一、通信接口介紹
通信的目的:將一個設備的數據傳送到另一個設備,擴展硬件系統。
當STM32想要實現一些功能,但是需要外掛一些其他模塊才能實現,這就需要在兩個設備之間連接上一根或多跟通信線,通過通信線路發送或者接收數據,完成數據交換,從而實現控制外掛模塊和讀取外掛模塊數據的目的。
通信協議:制定通信的規則,通信雙方按照協議規則進行數據收發。
單工:只允許數據單向傳輸;
雙工:指通信雙方能夠進行雙向通信;
半雙工:發送數據和接收數據不能同時傳輸;
全雙工:可以同時進行發送數據和接受數據,一般有兩根通信線,一根發送數據,一根接收數據,發送線路和接收線路互不影響。
時鐘特性分為同步和異步。
同步:一般有時鐘線連接,接收設備可以在時鐘信號的指引下進行采樣;
異步:沒有時鐘線,需要通信雙方約定一個采樣頻率,并且還需要加一些幀頭幀尾等,進行采樣位置的對齊。
電平信號
單端:引腳的高低電平都是對GND的電壓差,單端信號通信的雙方必須要共地,就是把GND連接在一起;
差分:靠兩個差分引腳的電壓差來傳輸信號,差分信號可以極大地提高抗干擾特性。
USB協議中有一些地方也需要用到單端信號,因此USB協議也需要共地。
設備特性
點對點:同一時間只能在兩個設備之間進行通信;
多設備:可以在總線上掛載多個設備。
二、串口通信介紹
1、定義和功能
定義:串口是一種應用十分廣泛的通訊接口,串口成本低,容易使用、通信線路簡單,可實現兩個設備的相互通信。
功能:單片機的串口可以使單片機與單片機、單片機與電腦、單片機與各式各樣的模塊相互通信,極大的擴展了單片機的應用范圍,增強了單片機系統的硬件實力。
51單片機內部自帶UART(通用異步收發器),可實現單片機的串口通信。
2、硬件電路
簡單雙向串口通信有兩根通信線(發送端TXD和接收端RXD);
TXD與RXD要交叉連接;
當只需單向的數據傳輸時,可以直接一根通信線;
當電平標準不一致時,需要加電平轉換芯片。
3、電平標準
電平標準是數據1和數據0的表達方式,是傳輸線纜中人為規定的電壓與數據的對應關系,串口常用的電平標準有下面三種:
(1)TTL電平:+5V表示1,0V表示0;
(2)RS232電平:-3V ~ -15V表示1,+3V ~ +15V表示0;
(3)RS485電平:兩線電壓差+2V ~ +6V表示1,-2V ~ -6V表示0(差分信號)。 ?
4、串口參數及時序圖
波特率:串口通信的速率(發送和接收各數據位的間隔時間),單位;碼元/s或波特(Baud),
比特率:每秒傳輸的比特數,單位bit/s或bps,在二進制調制的情況下,一個碼元就是一個bit,此時波特率就等于比特率,單片機的串口通信,基本都是二進制調制。
二進制調制:高電平表示1,低電平表示0,一位就是1bit。
?? ?例如波特率為1000bps,即1s發送1000位數據,每一位的發送時間就是1ms,接收方也是每隔1ms接收一位。
空閑時:引腳默認為高電平;
起始位:標志一個數據幀的開始,固定為低電平;
數據位:數據幀的有效載荷,1為高電平,0為低電平,從低位到高位發送數據;
檢驗位:用于數據驗證,根據數據位計算得來;
停止位:用于數據幀間隔,固定為高電平。
校驗有三種方式,分別是無校驗、奇校驗和偶校驗。
如果使用奇校驗,則數據位8位+校驗位會出現奇數個1,如傳輸數據是0000 1111,則校驗位會補1。
如果使用偶校驗,則數據位8位+校驗位會出現偶數個1,如傳輸數據是0000 1111,則校驗位會補0。
三、USART串口外設
?通用同步/異步收發器,簡稱USART(Universal Synchronous/Asynchronous Receiver/Transmitter),在51單片機中還會叫UART,也就是通用異步收發器。STM32中這個同步功能用的很少,所以兩者區別不大。
USART是STM32內部集成的硬件外設,可根據數據寄存器的一個字節數據自動生成數據幀時序,從TX引腳發送出去,也可自動接收RX引腳的數據幀時序,拼接為一個字節數據,存放在數據寄存器里。
USART自帶波特率發生器,最高達4.5Mbits/s,它本質上就是一個分頻器,通過APB2總線給的72MHz的頻率,對其進行分頻,得到想要的波特率時鐘,最后在這個時鐘下,進行收發數據。
波特率一般采用9600bits/s、115200bits/s。
STM32中的串口通信可配置數據位長度(8/9),數據位不需要校驗位就是8位,加上校驗位就是9位。可選校驗位(無校驗/奇校驗/偶校驗)。
停止位長度(0.5/1/1.5/2),決定了數據幀的間隔,一般都是采用1位。
支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN。
同步模式:相比正常的串口通信,多了一個時鐘CLK的輸出;
硬件流控制:如A設備TX向B設備的RX發送數據,A設備發送的數據太快,B處理過不來,B就只能選擇拋棄新數據或者覆蓋原數據;如果有硬件流控制,兩者之間的硬件電路上還會多出一根線,如果B沒有準備好,就置高電平,如果準備好了,就置低電平,A接收到了B反饋的準備信號,就只有在B準備好了以后,才會發送數據。硬件流控制就是為了防止B處理數據太慢導致數據丟失的問題。
DMA:串口通信支持DMA數據轉運;
智能卡:跟學校飯卡或者公交卡有關;
IrDA:用于紅外通信的,一個為紅外發光管,一個為紅外接收管,靠閃爍紅外光通信;
LIN:局域網的通信協議。
STM32F103C8T6 USART資源: USART1、 USART2、 USART3。
四、USART框圖
發送數據:首先將要發送的數據,寫入TDR發送數據寄存器,然后會檢測發送移位寄存器中是否有數據正在移位,如果沒有,就會將數據從TDR轉入到移位寄存器中,這時會使標志位TXE置1,TDR為空,這時就可以寫入下一個數據了,移位寄存器中的數據就會向右(低位先行)一位一位地把數據輸出到TX引腳,發送完成后,新的數據就會自動的從TDR轉移到移位寄存器中。
接收數據過程跟上面類似,其中標志位為RXNE,接收數據寄存器非空,標志位置1時,就可以將數據讀走了。
TDR和RDR是在同一個數據寄存器DR中的。
五、USART基本結構
時鐘來源是PCLK2/1,經過波特率分頻后,產生的時鐘通向發送控制器和接收器,它們兩個用來控制移位;
寫入數據通過兩個寄存器移出,然后通過GPIO的復用輸出,輸出到TX引腳,產生串口協議規定的波形。
讀取數據類似。
USART初始化步驟:
(1)RCC開啟時鐘,包括USART和GPIO的時鐘;
(2)GPIO初始化,把TX配置成復用輸出,RX配置成輸入;
(3)配置USART;
(4)如果有接收數據,還需要配置中斷,加上ITconfig和NVIC;
(5)開啟USART。