目錄
一、USART簡介
1.電平標準
2.通信接口
? ?3.硬件電路?
4.串口參數以及時序
5.串口時序
二、USART結構介紹
1.USART功能框圖?
?編輯??1.1 功能引腳
1.2 數據寄存器
1.3? 控制器
1.4 波特率發生器
1.5簡化結構圖
?2.數據幀
一、USART簡介
????????USART(Universal Synchronous/Asynchronous Receiver/Transmitter) 是一種串行通信接口,用于實現設備之間的數據交換。它支持 同步模式和 異步模式,在 STM32 中最常用的是 異步串行通信(UART)模式。
- USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/異步收發器 USART是STM32內部集成的硬件外設,可根據數據寄存器的一個字節數據自動生成數據幀時序,從TX引腳發送出去,也可自動接收RX引腳的數據幀時序,拼接為一個字節數據,存放在數據寄存器里
- 自帶波特率發生器,最高達4.5Mbits/s
- 可配置數據位長度(8/9)、停止位長度(0.5/1/1.5/2)
- 可選校驗位(無校驗/奇校驗/偶校驗)
- 支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN
- STM32F103C8T6 USART資源: USART1、 USART2、 USART3(USARRT1是APB2總線上的設備,其他的都是APB1總線)
1.電平標準

2.通信接口
- ????????通信的目的:將一個設備的數據傳送到另一個設備,擴展硬件系統。
- ????????通信協議:制定通信的規則,通信雙方按照協議規則進行數據收發。
雙工模式 | 解釋 |
全雙工 |
|
半雙工 |
|
時鐘特性 | 解釋 |
異步 |
|
同步 |
|
電平特性 | 解釋 |
單端信號 |
|
差分信號 |
|
? ?3.硬件電路?
- 簡單雙向串口通信有兩根通信線(發送端TX和接收端RX)
- TX與RX要交叉連接 當只需單向的數據傳輸時,可以只接一根通信線
- 當電平標準不一致時,需要加電平轉換芯片
? ? ? ? 當有獨立供電的時候,VCC可以不連接。單設備1有供電,設備2沒有供電的時候,就需要接VCC,用VCC給設備2供電。
4.串口參數以及時序
- 波特率:串口通信的速率,異步通訊中由于沒有時鐘信號,所以兩個通訊設備之間需要約定好波特率,即每個碼元的長度,以便對信號進行解碼,串口數據包的基本組成中用虛線分開的每一格就是代表一個碼元。常見的波特率為4800、9600、115200等。
- 起始位:標志一個數據幀的開始,固定為低電平,串口的空閑狀態位高電平。數據包的停止信號可由0.5、1、1.5或2個邏輯1的數據位表示,只要雙方約定一致即可。
- 數據位:數據幀的有效載荷,1為高電平,0為低電平,低位先行。在數據包的起始位之后緊接著的就是要傳輸的主體數據內容,也稱為有效數據,有效數據的長度常被約定為5、6、7或8位長。
- 校驗位:用于數據驗證,根據數據位計算得來。校驗方法有奇校驗(odd)、偶校驗(even)、0校驗(space)、1校驗(mark)以及無校驗(noparity)。
- 停止位:用于數據幀間隔,固定為高電平,為下一個起始位做準備。

![]() | ![]() |
5.串口時序








?每一位的時間計算:1/波特率
硬件的話會自動執行
軟件模擬:定時調用GPIO_ReadInputDataBit來讀取每一位
二、USART結構介紹
1.USART功能框圖?
??1.1 功能引腳
- TX:發送數據輸出引腳。
- RX:接收數據輸入引腳。
- SW_RX:數據接收引腳,只用于單線和智能卡模式,屬于內部引腳,沒有具體外部引腳。
- nRTS:請求以發送(RequestToSend),n表示低電平有效。如果使能RTS流控制,當USART接收器準備好接收新數據時就會將nRTS變成低電平;當接收寄存器已滿時,nRTS將被設置為高電平。該引腳只適用于硬件流控制。
- nCTS:清除以發送(ClearToSend),n表示低電平有效。如果使能CTS流控制,發送器在發送下一幀數據之前會檢測nCTS引腳,如果為低電平,表示可以發送數據,如果為高電平則在發送完當前數據幀之后停止發送。該引腳只適用于硬件流控制。
- SCLK:發送器時鐘輸出引腳。這個引腳僅適用于同步模式。
1.2 數據寄存器
????????第二個方框中的發送數據寄存器(TDR Transmit DR)和接收數據寄存器(RDR Receive DR)將發送或者接收的數據存儲在這里,這兩個寄存器占用同一個地址,在程序上,只表現為一個寄存器,就是數據寄存器DR(Data RRegister),但是實際硬件中,是分成兩個寄存器,TDR只寫,RDR只讀,寫操作的時候寫到了TDR,讀操作的從RDR中讀出來。
? ? ? ? 下面的發送移位寄存器和接收移位寄存器。?發送移位寄存器的作用:把一個字節的數據一位一位的移出去,正好對應串口協議的波形的數據位。接收也是類似的。
? ? ? ? 發送移位寄存器和接收移位寄存器的工作原理:就是當寫入0X55的數據時,即寫入到TDR中,寄存器中就是二進制存儲:01010101,此時硬件監測到我們寫入的數據,就會檢查當前發送移位寄存器是不是又數據正在移位,如果沒有,這個0X55的二進制數據就會立刻全部移動到發送移位寄存器中,準備發送,當數據從TDR移動到移位寄存器時,會置一個標志TXE(TX Empty),發送寄存器空,檢查這個標志位,如果置1,就可以在TDR中寫如下一個數據。然后發送移位寄存器就會在下面發送控制的驅動下,向右移位(低位先行),然后一位一位的把數據輸出到TX引腳。當數據移位完成后,新的數據就會再次自動的從TDR轉移到發送移位寄存器里面。接收移位寄存器 同理。
1.3? 控制器
?????????第三個框中的發送控制和接收控制就是用來控制發送/接收移位寄存器的工作。
????????USART有專門控制發送的發送器、控制接收的接收器,還有喚醒單元、中斷控制等等。使用USART之前需要向USART_CR1寄存器的UE位置1使能USART。發送或者接收數據字長可選8位或9位,由USART_CR1的M位控制。


????????為得到一個信號真實情況,需要用一個比這個信號頻率高的采樣信號去檢測,稱為過采樣,這個采樣信號的頻率大小決定最后得到源信號準確度,一般頻率越高得到的準確度越高,但為了得到越高頻率采樣信號越也困難,運算和功耗等等也會增加,所以一般選擇合適就好。
????????接收器可配置為不同過采樣技術,以實現從噪聲中提取有效的數據。USART_CR1寄存器的OVER8位用來選擇不同的采樣采樣方法,如果OVER8位設置為1采用8倍過采樣,即用8個采樣信號采樣一位數據;如果OVER8位設置為0采用16倍過采樣,即用16個采樣信號采樣一位數據。
????????USART的起始位檢測需要用到特定序列。如果在RX線識別到該特定序列就認為是檢測到了起始位。起始位檢測對使用16倍或8倍過采樣的序列都是一樣的。該特定序列為:1110X0X0X0000,其中X表示電平任意,1或0皆可。
????????8倍過采樣速度更快,最高速度可達fPCLK/8,fPCLK為USART時鐘,采樣過程見圖8倍過采樣過程。使用第4、5、6次脈沖的值決定該位的電平狀態。

????????左邊的硬件數據流控制:簡稱流控,就是如果發送設備發的太快,接收設備來不及處理,就會出現丟棄或者覆蓋數據的現象,有了流控,就可以避免這個問題。流控有兩個引腳,一個時nRTS(請求發送,是輸出腳,告訴別人,我當前可不可以接收),另外一個是nCTS(清除胡發送,是出入腳,用于接收別人nRTS的信號),前面的n是低電平有效的意思。
1.4 波特率發生器
? ? ? ? 波特率發生器就是分頻器,APB時鐘進行分頻,得到發送和接收移位的時鐘fPCLKx(x=1或者x=2),USART掛載APB2,所以就是PCLK2的時鐘,一般就是72M,在STM32F103C8T6中,其他的都掛載在APB1,所以是PCLK1的時鐘,一般就是36M,然后對時鐘進行分頻,除以一個USARTDIV的分頻系數。