咱們今天呢給大家講解咱們 stm32 開發當中的串口的應用啊?,?串口這個專題呢啊是我們那?個學習上必須要掌握的一個外設
串口有什么作用呢,其實在我們以后的這個開發程序當中,咱們可能經常需要用到一些調試?信息,對吧??啊,咱們可能今天要去調試我們的程序,那調試程序怎么了??我們肯定是需要?有一些調試信息輸出的
現在可能調試你的這些 c 語言啊之類的時候?,咱們經常用 printf,但是呢啊在我們裸機開發?當中,我們的裸機又沒有帶操作系統,也沒有屏幕,對不對?有很多情況下都是這樣的,那?么這個時候你想看到一些調試信息?,你怎么去做呢?這個時候你就要用到我們的串口啊
uart?它的最大的作用其實就是用來調試,那么除此之外呢,串口也是我們最基本的通信方式?之一
如果說我們兩個板子或者說我們有啊我們的板子和我們的電腦需要做一些數據的通信,那么?這個時候呢啊串口也是我們經常用的這個通信的手段之一
所以說咱們學習這個串口了啊?,對于我們以后的這個程序開發它是有很大的這個作用的。?那么呃我們本節的專題呢給大家呢啊分為4 個章節給大家進行一個講解啊
首先呢第一個章節呢給大家講一下串行通信的一些概念,包括我們串口的一些硬件啊電路怎?么去鏈接,然后呢呃它的這個通信協議是什么樣的,我們都會在這個第一節給大家進行一個?介紹。
然后呢我們著重的再去給大家講解咱們串口相關的一些寄存器啊,因為咱們可以通過這些寄?存器去了解啊咱們最底層究竟是怎么去操作這些硬件的,那么啊對于我們知道這個底層的這?些技術細節是有非常的大的好處,雖然說咱們在實際的這個開發過程當中啊,咱們很少直接?去操作這個寄存器啊。
第三節和第四節呢,咱們分別從這個呃寄存器去操作我們的串口,還有我們的庫函數去操作??我們的串口啊,兩方面給大家進行講解啊,講解咱們這個串口的數據收發啊,怎么用我們的??寄存器去實現?,然后呢就是怎么樣去??需要用我們那個庫函數去實現我們串口數據的收發,?那么我相信啊通過我們這個原理,寄存器還有兩個實例的介紹,那么大家肯定是能夠把這個??串口呢給掌握好,那好,那么我們現在呢就開始給大家講解咱們串行通信的一些基本的概念。?那么說到通信啊,說的通信,那么我們肯定要給大家講解我們通信的一些最基本的概念,對??吧?那么我們通信怎么進行分類的啊,然后呢我們這個創新通信當中呢,我們還會給大家介??紹咱們的這個 uart,就是它的一個啊串行通信啊外設。然后呢我們就給大家介紹這個串口的??電路鏈接以及我們的通訊協議
嗯?,這個串行通信當中呢?,我們還會給大家介紹咱們的這個就是它的一個串行通信啊外設,?然后呢我們給大家介紹這個串口的電路鏈接啊,以及我們的這個通信協議,對吧?那么我們??接下來就來看一下咱們的這個通信的基本概念。
提到通信,那么我們知道,你如果說要和另外一個人進行通信,首先必須要保證的是要有兩??個人?,沒有兩個人?,那你單方面一個人在那兒吼?,那怎么叫做通信呢?你只能叫做廣播啊,?我們這個通信啊肯定也是一樣的,它必須要有兩個對象,一個用來收取數據,一個來發送數??據?,那么啊根據我們這個數據通信。
兩者之間是否同步,我們把它分為這個同步通信和異步通信,那么我們這個地方呢啊就給大?家首先給大家講一講這個同步通信和異步通信它有什么區別啊
同步通信其實說白了就是說通信的雙方它可以根據一個同步信號來進行一個數據的收發,也????就是說他們有一個共同的同步信號,這個同步信號往往就是時鐘,往往就是時鐘,也就是說????你看到我 a 和 b 兩個對象要進行通信?,他們呢中間會有一個共同的同步信號?,這個同步信????號呢往往我們都是在他們兩者之間接一根信號線,這根信號線呢用于傳播一個什么呢?用于????傳播一個時鐘啊,其實就是一個時鐘線,其實就是一根時鐘線。所以說以后你凡是看到啊兩????個對象來進行通信的時候,他們之間連接了一根時鐘線,那么一般他們的通信就是同步通信????啊,因為這個時鐘啊是他們這個通信速率的一個參考他們兩個參考的標準是同樣的完全一致,?所以說這種情況下他們就是同步通信啊,他們都會有一個共同的時鐘信號啊,共同的時鐘信????號,那么他會他們就會根據他們連接的這個時鐘信號來進行數據的采樣和收發,所以說他們????的這個呃收發的速率完全是同步的?,那么呃完全是同步的就可以導致他們的這個通信速率?,??通信效率會比較高,通信效率就會比較高,當然了他們的付出的代價肯定就是啊要多花一個????管角去連接一個使用線?,那么這是我們的這個同步通信與此對應的啊,
與此對應的就是我們的這個異步通信?,我們異步通信呢它剛好沒有這個時鐘線?,看到沒有,?兩者通信之間他們并沒有按照一個統一的這個信號去進行一個數據的收發,那么我們就就在??想了,對吧?你們不按照同樣的這個數據去收發,那么我一方收的快,一方收的一方發送的??快,一方收的慢,那豈不是造成一個這個啊通信的這個誤差嗎??啊,對的,肯定是有的,他??們呢呃不是說沒有這個時鐘線,他們的這個速率啊就不能匹配啊,不是的。一般來說我們每??一個外設它內部都會有一個時鐘啊,都會有一個時鐘,那么他們完全可以參考他自己內部的??這個時鐘呢去設置它的這個通信速率,然后呢比如說我們兩個都有一塊表,對吧??我們都看??著按照自己的這個表的這個時間來調整我們的這個收發數據的快慢,但是我們兩者之間的表??可能這個有一點點誤差,對吧?可能兩者之間的表它并不是完全同步的,所以說他們兩者之??間雖然說他們是按照他內部的這個時鐘來設置它的這個收發速率,但是畢竟兩者并不是完全??同步的,所以說他們是異步的啊,這種情況下我們就把它叫做異步,異步呢啊,他們呢一般??在收到的時候還是會去設置他們的收發速率,就相當于咱們的這個串口啊,我們的這個串口??它是典型的一個異步通信,他們呢一般都會設置他自己的一個波特率啊,兩邊兒來一定要設??置為一樣,這樣的話他們的這個數據收發才會呢啊一致,那么由于他們的這個兩邊的這個時??鐘啊可能精確度的一些問題,兩邊不可能完全一致,那么就可能會導致他們在數據收發過程??當中啊每發數一個位。這個的時候就可能會有一點點的這個誤差,所以說對于我們異步通信??來說,它一次性通信的速率一般都不會很大?。因為你要是一次性通氣的速率很大,就可能導??致你的這個啊通信的這個數據啊收發的誤差會變得越來越大啊,那么這顯然不是我們愿意見??到的,所以說他們的這個通信速率一次性傳輸的這個數據一般都不是很多項目的串口,可能??就是 8 位,9 位這個樣子。那么我們后面呢給大家講解這個呃通信的這個協議的時候呢,啊,?還會給大家提那么異步通信他們的好處呢就是咱們沒有這個時鐘線,比如說減少了很多方便??啊,沒有這個是中線,那么省略了很多一些資源啊,他們在通信的時候只要約定好這個通訊??速度就可以了。
那么省略了很多一些資源啊,他們在通信的時候只要約定好這個通信速度就可以了,參照著?他們自己內部的時鐘?,就是大家以后看到是凡是這兩個 a 和 b 之間進行通信的時候?,他們
并沒有共同的時鐘?,那么他們就是異步通信
好,那么嗯大家了解到這里之后肯定應該明白同步通信和異步通信的一個區別,說白了你就?直接看有沒有這根時鐘線,對吧?那么沒有呢就是異步通信,有就是同步通信啊,可以這樣?去理解,那么這是從這個數據的這個收發是否同步去對我們這個通信來進行一個劃分,然后 劃分為同步通信和異步通信。
我們還可以從在某一時刻你是發送一個未來還是同時發送很多個位去進行一個劃分,我們把?這種通信呢啊把它劃分為這個呃串行通信和并行通信
串行通信指的就是在同一時刻你只能搜或者是發送一個位一個位的信息,那么那么很顯然你??在同一時刻只能發送一個位,那么我們只需要用到的是一根信號線就可以了,不管是你是收??是發,我們只需要用一根信號線啊,我發送的時候我就用這根信號線,很顯然我要發送大量??的數據的時候,由于我只有一根信號線,那么我同一時刻我就只能發一個位,只能發送一個??位,我接收的時候也是我接收的時候也只用一根信號線,那么我接收的時候呢也是同一時刻??只能收一個數據位,那么我要接受很很多很多數據的時候,我只能一個位一個位慢慢的接收。?像這種串行通信呢,啊,它的缺點很明顯,就是它同一是個只能收發一位,那么就會導致了??他的這個收發數據的速率。啊,收發數據的數據量是不是比較小啊??啊,通信的速度比較慢,?通信的速度比較慢?,但是它的優點是非常明顯的?,就是它非常節約 io?口資源?。那么我發送??數據和接收數據我只需要用一根信號線就可以了?,那么相對來說它的這個 io?口的資源是不??是非常的節約下來?如果說你的芯片?,那么你的 io?口資源非常的有限?,那么你又想和其他??人進行數據的通信,那么你就完全可以選擇我們串行通信的一些方式啊,串行通信的一些方??式。缺點就是什么呀?速率相對較慢啊,叫的較慢,然后它的優點呢就是占用資源的較少啊,?這個管理的資源較少
那么我們這個并行通信啊剛好就是什么呀?也是和它對應的,我們并行通信是指的是同一時?刻可以或者發多個數據位,多個數據位,那么你要同一時刻要發送多個數據位,很顯然你一?根信號線你就搞不定。對吧?那么你必須要什么呀??多根信號線,比如說我同一時刻發送 8?個位過去?,你看我一個 char?一個類型是不是 8 個位呀??我 8 個位我就可以一次性就發送過?去了,而像我們這種串行東西的話我得發送 8 次,因為它一次性只能發出一個位,那么對于?我并行通信來說,很顯然我的這個通信速率會變得非常的快。通信速率變得非常的快,那么?它的缺點也非常明顯,就是我占用的管腳會非常的多。我要一次性發送 8 個位,那我就需要?8 個數據線呀,我要占用 8 個管腳呀,對不對?那么這缺點就是占用的資源設置太多了,像?我們的這個啊芯片它的這個拐角一般來說都是非常這個寶貴的,那么除非是在一些特殊的要?求下?,我們才需要接很多很多根這個數據線。比如說對我們這個內存?,我們的這個 CPU?和?我們的這個內存芯片進行數據交互的時候,那么肯定要用并行,因為我們要求我們的這個內?存吶收發數據啊一定要快,這樣的話我這個整個程序跑起來才快,那么我們的內存芯片和我?們的這個 CPU?的之間的數據信號連接的話?,那么很顯然肯定是需要這個啊?,一般呢都會用?這種并行的東西用這種大量的數據管理啊,很多根數據管腳來進行這個數據的收發啊,那么?啊對于一些其他的像我們的這個 stm32 和其他的這些外設
通信的時候呢,一般可能用的串型會比較多一點點啊,用串行比較短?。因為我們有一些外設?他的這個速率咱們可以要求他們不用達到像我們內存那樣那么快,對不對啊??它的這個通信?速率一般可能就比較慢的?,可能幾十 kb?幾十兆幾兆這種同一速度?,對不對?像我們內存那
可以達到啊幾百兆?,甚至是上 G?的這種通訊速度啊?,那么這就是我們這個串行通信和并行?通信的一個區別,包括他們的優缺點,對吧?那么我相信大家來一眼就能看出來,然后我們?在這里呢直接給大家啊進行一個說明。
然后我們可以從這個通信的方向來進行一個劃分,然后我們可以劃分為單工、半雙工和全雙?工?。我們看這個箭頭大家都明白?。如果說我們是單供的這種方式,那么很顯然,那么就只能?是一個對象單方向的跟另外一個對象進行通信。而另外一個對象不能夠什么呀?給他進行通?信?,那么這就是一個單方向的?,你要么就是?a?發送數據給??b?,只能是一個方向?。或者說你?a??接收數據,對吧?只能是反過來的這種方向,只能是一個方向,不管是你是收還是發,那?么你只具有一個方向的這種通信的能力。
那么這種情況下就是你的單工,對吧?那么你只能做接收設備或者是發送設備,只能做其中?之一?,那么這就是單工的
半雙工,就是說你可以發送數據。也可以接收數據,但是你在同一時刻不能同時的發送和同??時的接收。你具備接收和發送的能力,但是你不能同時的發送和接收,這就是我們的半雙工,?半雙工、
全雙工很顯然它的功能就會更加強大。對吧?那么你既具備接收數據的能力,也具備發送數?據的能力?,而且你可以同時的發送數據和接收數據?。這就是我們的全雙工。
如果說以前學電子通信的這個同學的話,肯定對這些概念應該非常的了解,那么我們有一個?例子。就是非常清晰和他那個非常的那個得到我們的這個收音機,比如說它就是一個典型的?單工,像你收音機的話,你聽的時候你只能聽到我們遠處的這個廣播電視臺給你傳過來的這?些數據信號
那么你不能傳輸數據信號給遠處的這個廣播電視臺,那么很明顯你就是只能作為接收數據的?存在,那么你就是一個典型的單工數據通信,那么像我們的對講機,它其實既可以說話,也?可以聽到對方的說話,但是在同一時刻是只能是單方向的?。要么你說,要么別人說,像我們?的電話就不一樣?,電話就是一個全雙工的,像我們的手機,對吧?你既可以說,也可以聽到?對面的聲音?,就是這個典型的一個例子
那么大家了解一下咱們這個數據從方向來進行劃分?。分為單工?、半雙工和全雙工。
那么這就是我們通信當中的一些比較基本的概念,我們在這里也給大家做了一個簡單的總結。?對吧?那么比如說像我們后面要講到的這個串口?,那它就是一個典型的什么呀?異步通信?,??首先它是異步通信它中間沒有這根時鐘線,另外它是一個全雙工的,它既可以發送數據。也????可以接收數據,另外它還是一個串行的,它是串行的通信方式,因為它的發送數據和接收數????據都是一根線?。那么我們后以后可能還會學習到什么?SPI?、I2c??之類的?,它們其實就是同步????通信的?。那么有些是半雙工,有些是全雙工,那么以后我們講到這些通信的時候,再給大家????進行一個介紹。
那么這里大家先有一個印象,
那么接下來我們給大家介紹咱們?STM32?的串口,以前我們可能學習單片機的同學也接觸過??這種串口,對吧?那么我們通常把它叫做 ?UART,UART??就是咱們的這個同步的,大家注意,
對于我們這個地方?。我們以前的這個 ?UART??其實就是一個異步收發器?。?它對我們這個??STM32 來說它叫做 ?Usart?,?它其實中間加了一個同步?,就是說對我們 ?STM32?它里邊有一??個叫做 ?Usart??的東西?。它既可以支持同步的這種收發?,也可以支持異步的收發?。但是實際??上我們在后邊的這個使用過程當中?,我們就把它當做這個普通的 ?UART??來使用?。那么就是??把它當作一普通的串口來使用?,我們并沒有使用它的同步通信?。就是它支持這種同步通信,?那么需要我們去把時鐘線給它連上去。那么它就可以支持同步來進行通信了。但是我們其實??串口用的最多了,我們前面都說了,主要是用來進行一些打印調試的,對于我們來說,普通??的這種??UART??的這個功能就已經夠用了。
UART ?相對于 ?Usart??來說?,其實就是裁剪掉了它的這個同步通信的能力?。它的這個功能給??它裁剪掉了?,那么不管是 ?USART??還是 ?UART?,那么我們后邊就把它當做是普通的 ?UART ?來使用?。大家了解就可以了,因為其實在我們?STM32?的這個串口當中,其實它支持很多很??多的功能。但是我們都沒有去使用到這些功能,其實還是有一些雞肋,除非你是在這個特殊??的應用下,那么才可能會去使得用以外。平時我們都不怎么使用,我保證大家以后在開發當??中使用到串口的一些其他的功能也是比較少的。大部分你都是用來做調試的,所以說大家也??不用擔心?,你看我們在這里也給大家寫了?,?因為??SAT??的在我們 ?STM3 上用最多的就是打??印一些程序的信息。幫助我們去調試,當然它也可以傳輸一些信息,我們也可以遠端的通過??我們的串口去控制我們的這個板子?。這個也是可以的?,另外??UART??這一個外設?,這個就是??我們的這個 ?UART。在我們很多芯片和我們?STM32 進行鏈接的時候,進行數據傳輸的時候,?很多也是有這種 ?UART??來進行傳輸的?。比如說我們有一些 ?Wifi??芯片和我們的 ?STM32 這??個控制芯片要進行這種數據傳輸的時候。很多也是采用的這種串口來進行通信的。這里也給??大家進行一個說明,它除了應通過這些用于這個打印信息以外,還可以通過做一些這個數據??的傳輸
那么我們對?STM32?的這個串口簡單的進行一個了解。下面我們就來給大家說一說咱們這個?STM3F407,它有它的一個串口的配置,對吧?那么對于我們?STM3F 407 來說,它有四個?USART ?和兩個 ?UART?。也就是說它有四個這個串口了?,它除了支持異步通信以外?,還可以?支持同步通信。
另外還有兩個這個??UART??就是最簡單的這種異步通信?,那么我們可以看到它有??USART1 、?USART6、USART2、USART3 ?和 ?USART4 和 ?USART5。就是 4 個 ?USART ?和兩個 ?USART。?那么其實我們主要關注的它的這個管腳主要是它的這什么呀?發送數據和接收數據的管腳?。?我們串口,一般來說它是串口串行通信的,對吧?那么它的發送數據和接收數據都是一根信??號線,所以說我們只關注它的發送數據管腳和接收數據管腳。那么對于同步通信的還支持這??個同步通信的這個串口來說的話,它肯定就有一些時鐘管腳。包括還有一些管腳可以是用來??控制它的這個硬件數據流的
那么大家可以看到,那么這些拐角咱們暫時不用去關注,我們只需要關注上面就可以了,那?么我們在這里只是給大家整理出來了我們哪些管腳它可以支持這個 ?USART1 ?的功能?。?USART6?的功能,對吧??比如說 ?USART1 ?的功能,我們的 ?PA9 和 ?PA10,包括 ?PB7 和??PB6?都可以去支持這個 ?USART1 ?的這個功能?。那么這些具體每一個拐角支持的功能?,我們完全?可以從以前咱們那個數據手冊當中那個管腳的功能分布圖。大家可以去查,對吧?每一個管
腳可能支持很多個功能,那么對于我們串□來說,我們給大家整理在這里地方,那么大家可?以直接查?。當然了我們在后邊的時候,你要去使用具體的一個串□的時候,你首先還是得去?看你的電機原理圖。對吧?你要看看你的板子上是否用到了這個串□?,?那么并且這個串□是?連到哪一個管腳的??因為我們有一些很多管腳都可以支持同一個串□?, 比如說像我們的這個?USART1?,那么它除了 ?PA9 和 ?PA10?以外?。PB6 和 ?PB7?也可以當作為 ?USART1 ?來使用。
那么你在使用的時候你一定得去看你的電器原理圖 ,你用到的是 ?PA9 還是 ?PA10?還是說??你用的是 ?PB6 還是 ?PB7?,對吧??它們兩個可能只能選擇一個一套管腳來作為 ?USART1 ?來??使用,對吧?只能選擇一套,其他的都是一樣,我們可以看到大部分的這個串□都可能會支??持這個兩套管腳?。它都可以配置為那種功能。那么我們后邊對于我們的這個板子,我們也是??用到了串□的,那么我們先來看一下咱們這個串□的這個硬件。對于我們的板子,那么大家??拿到咱們這個 ?FSM4 來說?,我們使用到的是兩個串□?, ?一個就是 ?USART1?,那么另外一個??用到的是??UART3?,URAT3?,大家看到它們的□是不一樣的?,這個□是公□?, ?那么這個□是??母□?, ?它們的插槽的這個指針方向是不一樣的。那么你在鏈接的時候,你要看你是否有那個??串□線,那么像我們底下的這種串□線,那么我們給大家配的應該是配的這樣的一根串□線。?這個串□線它可以直接插到我們這個??UART3 里面?,?它和這個插槽的方向剛好是相同的。
其實我們給大家配的一根應該是 ?USB??轉串□線?,為什么呢??因為一頭是我們的這個 ?DB9??的這種插槽?,它的這種大的這種插□?, ?另外一□是我們的 ?USB??□?。因為我們普通的筆記本??現在已經很少有這種直接的這種串□了,所以說我們就不需要這邊的這種串□線,而對于我??們以前的一些臺式機來說?,可能還有串□?。對吧?那么如果說你要和你的這個臺式機連接,?你可以直接用我們的兩邊都是這種??DB9 插槽的這種串□線連接我們的板子和連到我們的這??個臺式機?。當然了,你的臺式機仍然也有我們的??USB??□?, ?對吧??直接插 ?USB??□也是可以??的?。那么一般來說,我們現在這種??USB??轉串□的這種線用的會更多一點,但關于我們這個??UART1 。可能就是我們這個串□線,它的這個方向可能得去找另外一種,那么你得去找它另 ?外一種的串□線,是這邊這個樣子的,那么你才能夠插得進去,我們這里使用到了兩個串□??一個??UART??線?,我們可以直接用我們的 ?USB??轉串□線去進行連接?。一端連接到我們的板??子上,一端連接到我們的電腦里邊。然后如果說你想使用 ?UART1 ,你又沒有這根線怎么辦???那么我們在旁邊還設計到了一個這個東西?,?它是一根??mini?USB??□?, ?那么這一根??Mini?USB
□我們可以把這個??USB??□當做串□一來使用?。仍然是串□一哈,大家注意,仍然是串□一??UART1 ,也就說它和它都是使用的是 ?UART1 ,那么這個,這一個小的這個 ?USB。這個 ?mini??USB??□?, ?我們可以通過這樣的一根線?,我們普通的這個電源充電線那么一端插進我們的這??個插槽里面。另外一端就是我們的標準??USB??□可以插到我們的電腦里面,我們可以使用這??一個?,使用我們的串□一?。它也是串□一?,那么兩個都是串□一?,對吧??兩個都是串□一,?我們兩個不能同時使用它,只能使用一個,那么怎么去選擇這個地方?那么我們在這個地方??有一個選擇開關,你撥向這一邊,就是我們的這個使用的這一個,對吧?公□?, ?那么你使撥??向另外一邊?,就使用的是我們這一個小的這個 ?USB??串□?, ?USB??轉串□來使用的?。它是這??樣的,它內部就是這樣的,他這個地方可以通過我們的這個開關去進行選擇。那么另外我們??從我們的電器原理圖里邊也可以看到
對于我們后期來說,我們就使用這樣一根線,其實都夠用了,就是我們這個普通的電源充電?線。對吧?那么這根充電線你就是一頭插我們的板子,一頭插在我們這個上面,那么另外一?頭是我們的標準 ?USB??□?, ?插進我們的電腦?,然后我們把這個選擇開關把它撥到這個 ?USB 轉串□的這一側,那么我們就可以使用這一個 ?UART1 ?了。這個 ?UART1 ??了,這是解決咱們?這個沒有相應的串□線?,這樣的標準的這種串□線。
咱們可以使用這樣的一種方式,當然了使用這樣的一種方式,我們可能需要裝一些驅動,需?要裝我們的??CH340?的驅動,大家注意,如果說你插進去之后連接到我們的電腦,你的電腦?的設備管理器沒有反應?。那么你應該把這個??CH340?的驅動給裝上啊。這樣的話它才能去識?別我們??CH?340?的驅動?,在我們的資料里面有?,希望大家可以提前安裝好。
這就是我們的硬件,大家看一看我串口長什么樣子,那么這就是我們的這個硬件的一個部分,?然后我們再來看一下它的這個電路的鏈接,其實對于我們串口來說它是串行通信。也就是說??它的發送數據和接收數據都是用的一根信號線?。那么比如說我的這個??STM?32 站?,或者是??其他的這些微控制器要和我的??PC??的串口進行通信。它怎么進行鏈接的?一般來說我這個??STM32?的發送管腳,它可以直接連到這個 ?PC??的接收管腳。然后?stm32?的接收管腳端連接??的是我們電腦端的發送管腳端?。剛好就是發送?、連接?、接收,接收?、連接發送就是這樣的一??種連接關系。
但是對于我們普通的微控制器?,還有我們的這個電腦?、PC?,他們是不能這樣直接連接的,?因為他們的這個電瓶不一樣。對于我們的這個微控制器,像這種板子來說?。它內部的這個電?瓶是我們普通的?TTL??電瓶,那么對我們這個電腦來說?,它的這個電瓶是我們的?。這個可能?就是我們的 ?RS232?的電瓶了?,它兩者這個電瓶關于邏輯 1 ?和邏輯 0?的定義是不一樣的?。具?體他們是怎么定義的?,大家可以下來查查資料。
那么我在這里只告訴大家,他們是不能那個完全不一樣,那么不一樣的話就導致了你這個電?平不能直接連接。否則別人就識別不了,那么所以說它中間一般都會有一個轉換器,把這個 電瓶轉換過來。我們在發送的數據的時候,比如說我們的微控制器往外發送的時候,通過這?個轉換器就可以把這個?TTL??電平轉換成 ?RS232?的電平?。然后發送到我的這個 ?PC??端?。發?過來的時候它就可以把這個 ?RS232?的電平轉化為?TTL??電平?,然后我的這個微控制器可以?識別了?。就是一般都會有一個轉換器?。像我們板子可能用的比較多的就是什么 ?MAX232 之?類的東西,大家可以找一找,我們板子上也有這種芯片?。那么對于我們,如果說你是普通的?這種微控制器和其他的微控制器進行一個連接的時候,那么由于電平是一樣的。對吧?你就 可以不用中間的那個轉換器
一般來說我們串口通信的管腳,大家可以看到,我們基本上用發送數據管腳,接收數據管腳??和再加一根地線。三根線一般都夠了,地線主要是用于這個平衡它們之間的電壓,對吧??平??衡它們之間的電壓,好,這就是我們這個硬件的鏈接,大家要了解,那么對于我們是,雖然??說我們主要是編程。但是我們要以后要去看懂我們的電氣原理圖,看起要看清這些電氣原理??圖,我們肯定也是知道。那么對于我們這一個外設,它的基本的這個電路是怎么進行連接的,?那么我們這個電路的連接就給大家講到這里?,那么下面我們再給大家講講咱們這個串口。
那么我給你發送數據,你那邊接收數據,咱們究竟是怎么去約定這個數據收發當中的一些細??節的部分?約定這些數據收發的這些細節的一些東西,就是我們的一個通信協議,那因為我??給你發送一大堆數據發送給你。那么你要怎么去解析??我們之間是不是要有一個約定,如果??說我們沒有這個約定?,我就不知道怎么去解析你的數據?。所以說不管是任意一種通信方式,?它們都會有它自己的一個通信協議?,那么通信協議就約定了。
我如何去解析你的數據?如何去那個根據你的這個發送速度來進行接收,來給你進行匹配等?等的一些內容,我們來看一下。那么串口自然也有串口的這個通信協議了,串口的通信協議?我們來看一下?,?比如說我的發送方 ?a ?要給接收方 ?b ?發送數據?。那么我們發送的管腳 ?TX 連到了對方的 ?RX,管腳上面去發送管腳,連到對方的接收管腳上面去,正常情況下中間連?接的這根信號線,它們是保持高電平。就是說我在默認情況下,不發送數據的情況下保持的?是高電平。那么一旦我要發送數據的時候,我會把這根信號線電瓶給它拉低,給它發送一個
低電平 0?。那么對方此時感受到了我接收管腳電平的變化,變成了一個低電平?。對方就知道??你要給我發送信號了,你要給我發送數據了,那么很顯然這個 0 就是我的一個起始信號。就 ?是我發送數據的一個起始信號,我們的這個 0 就是我們整個數據通信當中的起始位。好,對??方感知到你要發送數據了,收到一個 0?的低電平,那么接下來他就要做好接收數據的準備了。?那么同時我們發送方就可以去發送數據了。
那么一般來說我們的?,在我們??STM??三人當中?,我們可以發送八個數據位或者是 9 個數據?位?。發送一堆??data?,發送一堆??data?,這就是你發送的數據可能就是 8~9 個位的數據?。那?么你在約定通信之前?,你一定要約定好你究竟的你的數據位究竟要發送?8 個位還是發送 9?個位?。我們兩邊都要約定好?。一般來說我們就選擇 8 位?,?因為我們一個 ?QR??發送一個字符?剛好就是 8 個位?,所以說一般我們都是選擇 8 位?。那么數據發送完成之后?,我們可能還會?發送一個校驗位?,可能還會有一個校驗位。
那么看你需不需要這個校驗,這個校驗位是什么意思??嗯,我們可選的校驗有奇偶校驗和偶??校驗?,那么我們的這個校驗位目的就是為了驗證一下我們前邊的這個數據它發送是否成功。?或者是發送是否有丟失
它是怎么去進行校驗的??比如說我們發送一個數據?,我們發送一個八位數的數據?,?比如說??0X05?。大家先把它換算成二進制?,?因為我們這一個發送是一個位的進行發送的?,對吧??那??么我們拆成二進制?,它就變成了 00000101 ,對吧?那么這樣的 8 個數據位,我在發送了起??始位之后,那么我緊接著要發送數據位,我怎么去發送的??我是從低位到高位一個位的發送,?我先發送一?,再發送 0?,再發送一?,再發送 0?,這樣由低到高一次性依次發送?。然后我看我??需不需要校驗,那么我有兩種校驗方式,可能是奇校驗,可能是偶校驗?。如果說我選擇奇校??驗,那么我就要去核對一下我發送的數據里邊一的個數里邊一的個數是否為奇數個。如果說??我一的個數它是偶數個位?,?它不是奇數個位?,那么我顯然就要在我的校驗位上面補一個一,?因為我校驗是一個位,那么補一個一的目的是為了讓我數據位加上我的校驗位總共一的個數??為奇數個一。這樣的話我發送給對方,對方把這個數據接收到了之后,他會去檢驗他收到的??數據和他的校驗位一的個數是否為奇數個?。如果為奇數個一的話?,OK?,?它就認為你發送成??功。如果它收到的數據變成了偶數個一,那么很抱歉,它就認為你在數據傳輸的過程當中可??能出錯了?。它就要求你重發,這就是我們的這個校驗?。它去核對一下我的這個數據是否一的??個數是否有偶數個,那么如果為偶數個的話,它的這個校驗位上面它就什么呀??不做任何的??改變?,就填寫一個 0 就可以了。
那么如果說它發現你的這個發送的數據是奇數個一?,那么它就會在這個校驗位上補一個一,?保證你的這個數據位加上我的這個校驗位的總共一的個數為偶數個一?。這樣的話往外發送,?那么對面也會按照的這種偶數的校驗來校驗你的這個數據位和校驗位,它也會去核實一下你??的這個數據位加校驗位是否為偶數個一。如果為偶數個一,它就認為你發送正確,那么如果??為奇數個一,它就認為你發送錯誤,對吧?那么這種校驗方式,它是一種比較簡單的這種校??驗方式,它肯定校驗也不是非常的準確,有一些錯誤肯定是那個校驗不出來的,但是它能夠??大概減少 50%的一個誤差?,可以減少 50%的一個誤差。
這種校驗是最簡單的一種校驗,就是我們串口當中使用的一種奇偶校驗,其實咱們在發送數 據的時候有很多種校驗方式的。包括一些什么??CRC??的一些校驗,可能會更加的復雜?。它校?驗起來也會更加的準確?。那么本身我們這個串口它在發送數據的過程當中?,你就只是發送?8~9 個數據位一次性就傳輸這么多,所以說它的這個出錯的概率其實是非常低的,那么大家?不用擔心這個問題。一般來說都很少出錯,極少出錯。所以說一般來說我們也并沒有去使用?它的校驗位。
好,如果說你這個校驗位你配置好了之后,那么我們這整個數據也就發送完畢了,發送完畢 之后我們需要有一個結束信號,那么就是我們的這個停止位?。它會把整個信號線再拉高,發?送 1 ?至 2 個高電平?,發送 1 ?至 2 個高電平?,OK?,對面收到之后也就知道了你整個數據的傳?輸已經結束了。
數據的傳輸已經結束了,這就是我們整個發送由我們起始到我們的停止,一般我們都采用的?是 8N1 ?的這種方式?。就是說這個我們發送 8 個數據位,
n??就表示的是沒有既有校驗?。然后一就表示的是咱們只選擇一個停止位就可以了?,?因為咱?們的這個數據傳輸多半都是用于調試的。基本上不會有一些太多的這個錯誤,因為我們串口?還是比較穩定的?,所以說它的運用才會這么廣
好,那么這就是我們這個串口通信協議的介紹,我們給大家說了這個串口是如何進行發起始?發送?。如何發送這個起始信號?如何傳輸數據?,如何去校驗以及如何去停止?
那么我們還有一個東西沒給大家提?,就是我 ?a ?以多快的速率給你發?,你 ?b ?必須就要有多?快的速率來接收。我要保證我發送的速率和你接收的速率要匹配,咱們這個發送和接收才能?perfect?。才能完整?,那么這個地方我們就提到會有一個速率的問題 ,這個速率的問題對于?我們串口來說?,?它一定要約定好。
兩邊都要約定好這個相同的這個速率才可以我們在串行通信當中我們會有專門的一個標準,?對,速率的一個標準就是我們的波特率,它就是用來描述咱們數據傳輸的這個速率。特別是??在我們串行通信當中它用的非常的多。那么我們在串行通信當中我們就是用波特率來進行一??個描述的,波特率它的單位就是 ?BPS?。就是說我每秒傳輸多少個位??BPS??每秒傳輸多少個??位,那么它是衡量咱們數據通信的一個重要的指標。那么這個 ?BPS??一般來說我們會有一些??標準,我們國際上的標準就是這些,什么 1 10?、300?、600?、120?。可能我們用的比較多的就??是 115200,9600,我們以后可能會用的比較多一些?。一般來說我們這個波特率對我們串口??來說它傳輸的數據是有限的?。所以說對我們?stM32 來說?,它可能說理論能夠達到什么 6 兆??之類的?,咱們很少使用到這么高的這個速度一般可能就是?幾十 ?KB??了?。這么多?。這里還有??一個例子?,就是說如果說我是給你設置的 1 15200BPS?,就是這樣的一個波特率?。其實它指??的就是每秒鐘傳輸 115200 位,并不是說我數據就每秒鐘傳輸這么多個數據?。因為整個位里??邊還包含了咱們的一些起始信號、校驗位、結束信號等等,所以說它的這個真正的這個數據??位并沒有這么多?。那么大家一定要注意。
那么我們以后在這個設置串口通信的時候,就要去配置好它的這個波特率,兩邊都要配置為??相等的這個波特率,那么表明它們傳輸的數據和接收的數據一定要匹配好,那么我們本節課??主要是給大家介紹了一些通信的基本概念。還有咱們初始通信的協議。包括波特率這些東西,?包括咱們硬件的一個電路接口給大家進行了一個介紹。那么我們后邊再給大家介紹創口的一??些其他的東西?,我們本節課就到這里?,感謝大家的收聽?。再見!