USART原理分析

USART

上文知道了,我們USART是屬於全雙工異步通信通用同步和異步收發器,並且可以設置單線半雙工模式

通用同步異步收發器 (USART) 能夠靈活地與外部設備進行全雙工數據交換,簡單的說就是USART是可以進行雙工通信的,USART通過小數波特率發生器提供了多種波特率

首先我們看USART的完整框圖

在這裏插入圖片描述

1:爲什麼可以實現雙工通訊

在這裏插入圖片描述
從圖中我們可以看出,在USART中,發送和接收各擁有一個移位寄存器

移位寄存器是幹嘛的?

移位寄存器是一種存儲器,存在裏邊的數據可以從低位向高位移動或從高位向低位移動。
在USART裏的作用,可以理解爲先把數據放在TDR和RDR是一個數據緩衝器,裏面存着數據,
移位寄存器就是負責與外部設備一個一個bit傳輸

  • 接收數據
    在這裏插入圖片描述
    移位寄存器先一個位一個位的接收外部設備的內容(一般8bit),再一次性的將內容傳入緩衝器

  • 發送數據
    在這裏插入圖片描述數據緩存器先將數據一次性的發送給移位寄存器,移位寄存器再一個位一個位發送給外部設備

值得注意:緩衝器與移位寄存器和移位寄存器與外部設備之間的數據傳輸都是硬件自動完成的,我們只需要配置相應的寄存器即可,傳輸的速度與波特率相關!

因爲存在兩個移位寄存器,所以可以異步傳輸(發送和接收不同時完成),而SPI的發送和接收是公用一個移位寄存器,這就導致在發送的時候也一邊接收的數據

2:小數波特率發生器

在這裏插入圖片描述
這個通過控制寄存器來設置具體的值在這裏插入圖片描述

3:框圖中的狀態標誌位

在這裏插入圖片描述
標誌位對應的內容,消除標誌位對應的映射關係如下

在這裏插入圖片描述

- CTS:CTS 標誌 (CTS flag)
如果 CTSE 位置 1,當 nCTS 輸入變換時,此位由硬件置 1。通過軟件將該位清零(通過向
該位中寫入 0)。如果 USART_CR3 寄存器中 CTSIE=1,則會生成中斷。
0:nCTS 狀態線上未發生變化
1:nCTS 狀態線上發生變化
注意:該位不適用於 UART4 和 UART5

- LBD:LIN 斷路檢測標誌 (LIN break detection flag)
檢測到 LIN 斷路時,該位由硬件置 1。通過軟件將該位清零(通過向該位中寫入 0)。如果
USART_CR2 寄存器中 LBDIE = 1,則會生成中斷。
0:未檢測到 LIN 斷路
1:檢測到 LIN 斷路
注意:如果 LBDIE=1 ,則當 LBD=1 時生成中斷

- TXE:發送數據寄存器爲空 (Transmit data register empty)
當 TDR 寄存器的內容已傳輸到移位寄存器時,該位由硬件置 1。如果 USART_CR1 寄存器
中 TXEIE 位 = 1,則會生成中斷。通過對 USART_DR 寄存器執行寫入操作將該位清零。
0:數據未傳輸到移位寄存器
1:數據傳輸到移位寄存器
注意:單緩衝區發送期間使用該位

- TC:發送完成 (Transmission complete)
如果已完成對包含數據的幀的發送並且 TXE 置 1,則該位由硬件置 1。如果 USART_CR1 寄存
器中 TCIE = 1,則會生成中斷。該位由軟件序列清零(讀取 USART_SR 寄存器,然後寫入
USART_DR 寄存器)。TC 位也可以通過向該位寫入‘0’來清零。建議僅在多緩衝區通信
時使用此清零序列。
0:傳送未完成
1:傳送已完成

- RXNE:讀取數據寄存器不爲空 (Read data register not empty)
當 RDR 移位寄存器的內容已傳輸到 USART_DR 寄存器時,該位由硬件置 1。如果
USART_CR1 寄存器中 RXNEIE = 1,則會生成中斷。通過對 USART_DR 寄存器執行讀入
操作將該位清零。RXNE 標誌也可以通過向該位寫入零來清零。建議僅在多緩衝區通信時使
用此清零序列。
0:未接收到數據
1:已準備好讀取接收到的數據

- IDLE:檢測到空閒線路 (IDLE line detected)
檢測到空閒線路時,該位由硬件置 1。如果 USART_CR1 寄存器中 IDLEIE = 1,則會生成中
斷。該位由軟件序列清零(讀入 USART_SR 寄存器,然後讀入 USART_DR 寄存器)。
0:未檢測到空閒線路
1:檢測到空閒線路
注意:直到 RXNE 位本身已置 1 時(即,當出現新的空閒線路時) IDLE 位纔會被再次置 1

- ORE:上溢錯誤 (Overrun error)
在 RXNE = 1 的情況下,當移位寄存器中當前正在接收的字準備好傳輸到 RDR 寄存器時,該
位由硬件置 1。如果 USART_CR1 寄存器中 RXNEIE = 1,則會生成中斷。該位由軟件序列清
零(讀入 USART_SR 寄存器,然後讀入 USART_DR 寄存器)。
0:無上溢錯誤
1:檢測到上溢錯誤
注意:當該位置 1 時, RDR 寄存器的內容不會丟失,但移位寄存器會被覆蓋。如果 EIE 位置 1 ,
則在進行多緩衝區通信時會對 ORE 標誌生成一箇中斷

- PE:奇偶校驗錯誤 (Parity error)
當在接收器模式下發生奇偶校驗錯誤時,該位由硬件置 1。該位由軟件序列清零(讀取狀態
寄存器,然後對 USART_DR 數據寄存器執行讀或寫訪問)。將 PE 位清零前軟件必須等待
RXNE 標誌被置 1。
如果 USART_CR1 寄存器中 PEIE = 1,則會生成中斷。
0:無奇偶校驗錯誤
1:奇偶校驗錯誤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章