【STM32筆記4】UART的時序解讀與硬件運用(即硬件UART的實現,另有硬件UART運用和軟件UART運用/硬件串口和軟件串口/USART的差異說明)

一、UART簡介

1、UART(Universal Asynchronous Receiver Transmitter)總線是異步串口,故一般比I2C、SPI兩種同步串口的結構要複雜很多,該總線雙向通信,是一種通用串行數據總線,可以實現全雙工傳輸和接收。一般由波特率產生器(產生的波特率等於傳輸波特率的16倍)、UART接收器UART發送器組成,硬件上由兩根線,一根用於發送(TX),一根用於接收(RX);

2、引腳連接方式(參考下圖)

3、STM32F1中UART引腳的分配(參考下圖)

 4、UART通信過程(參考下圖)

 

5、UART通信時需要配置參數的定義(起始位、數據位、奇偶校驗位、停止位、波特率) 

(1)起始位:它是單個包的第一位,用來表示數據傳送的開始。在通信線上沒有數據傳送時處於邏輯“1”狀態。當發送設備發送一個字符數據時,首先發出一個邏輯“0”信號,這個邏輯低電平就是起始位。起始位通過通信線傳向接收設備,當接收設備檢測到這個邏輯低電平後,就開始準備接收數據信號。

(2)數據位 :它是用來衡量通信中實際數據位的。當計算機發送一個信息包,實際的數據不會是8位的,標準的值是5、7和8位。如何設置取決於你想傳送的信息。比如,標準的ASCII碼是0~127(7位)。擴展的ASCII碼是0~255(8位)。如果數據使用簡單的文本(標準 ASCII碼),那麼每個數據包使用7位數據。每個包是指一個字節,包括開始/停止位,數據位和奇偶校驗位。由於實際數據位取決於通信協議的選取,術語“包”指任何通信的情況。

(3)奇偶校驗位:它是串口通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當然沒有校驗位也是可以的。對於偶和奇校驗的情況,串口會設置校驗位(數據位後面的一位),用一個值確保傳輸的數據有偶個或者奇個邏輯高位。例如,如果數據是011,那麼對於偶校驗,校驗位爲0,保證邏輯高的位數是偶數個。如果是奇校驗,校驗位位1,這樣就有3個邏輯高位。高位和低位不真正的檢查數據,簡單置位邏輯高或者邏輯低校驗。這樣使得接收設備能夠知道一個位的狀態,有機會判斷是否有噪聲干擾了通信或者是否傳輸和接收數據是否不同步。

(4)停止位:它是單個包的最後一位,用來表示數據傳送的結束。典型的值爲1,1.5和2位。由於數據是在傳輸線上定時的,並且每一個設備有其自己的時鐘,很可能在通信中兩臺設備間出現了小小的不同步。因此停止位不僅僅是表示傳輸的結束,並且提供計算機校正時鐘同步的機會。適用於停止位的位數越多,不同時鐘同步的容忍程度越大,但是數據傳輸率同時也越慢。

(5)波特率:它是用來衡量通信速度的。它表示每秒鐘傳送的bit的個數。例如300波特表示每秒鐘發送300個bit。當我們提到時鐘週期時,我們就是指波特率例如如果協議需要4800波特率,那麼時鐘是4800Hz。這意味着串口通信在數據線上的採樣率爲4800Hz。通常電話線的波特率爲14400,28800和36600。波特率可以遠遠大於這些值,但是波特率和距離成反比。高波特率常常用於放置的很近的儀器間的通信,典型的例子就是GPIB(通用接口總線)設備的通信。 

數據傳輸時參數運用參考如下:

 二、UART總線數據傳輸時的總時序圖

時序解讀:

UART 首先將接收到的並行數據轉換成串行數據來傳輸。消息幀從一個低位起始位開始,後面是7個或8個數據位(是在已帶奇偶校驗位/停止位的數據字中去掉校驗位/停止位後的有效數據位個數,可參考下面的示意圖進行理解) ,一個可用的奇偶位和一個或幾個高位停止位(通常UART爲1、1.5、2,USART還包含0.5)。接收器發現起始位時它就知道數據準備發送,並嘗試與發送器時鐘頻率同步。如果選擇了奇偶,UART就在數據位後面加上奇偶位。奇偶位可用來幫助錯誤校驗。在接收過程中,UART 從消息幀中去掉起始位和結束位,對進來的字節進行奇偶校驗,並將數據字節從串行轉換成並行。
UART 也產生額外的信號來指示發送和接收的狀態。例如,如果產生一個奇偶錯誤,UART 就置位奇偶標誌。 

注:

數據字的長度(此處定義爲有效數據位個數+奇偶校驗位(1)+停止位(此處以1位爲例))可以通過編程CR1寄存器中的M位,選擇成8或9位,即USART接收器/發送器可以根據CR1的M位接收/發送8位或9位的數據字,參考如下圖:

 下面以STM32FI的串口1爲例,分別進行初始化(參數配置)、中斷服務函數的運用(接收中斷)、printf函數的運用,其代碼實現參考如下三張圖:

1、串口1的初始化

2、 串口1的中斷服務函數

 3、串口1的printf()功能

另:

1、硬件UART運用和軟件UART運用的區別如下(此爲個人理解與總結):

(1)硬件UART運用:即在實現UART通訊功能時,直接採用芯片內部集成的UART相關硬件組件與電路,通過代碼實現其通訊功能時,直接操作其寄存器或直接調用其現成IAP函數(已完成寄存器的操作與運用)即可,有助於加深開發者對芯片底層寄存器操作的理解和UART設備的硬件實現原理的理解。

(2)軟件UART運用:即在實現UART通訊功能時,不直接採用芯片內部集成的UART相關硬件組件與電路,而是通過CPU對芯片自身空餘的IO口操作而軟件模擬實現其波特率的控制、接受器/發送器功能,從而實現時序功能,達到可與相應設備通信的目的,有助於開發者加深開發者對於IO模擬時序功能的運用和UART設備的數據輸出輸入時序的理解。

2、硬件串口與軟件串口的區別如下:

(1)硬件串口: 一般說來是具有滿足RS232或其他串口通訊連接協議的串口,這些協議不光是通訊協議,還有接口協議。硬件串口的特點就是,你連接這種設備時要用專用串口線連接設備和主控機。比如R232接口採用12V的電平信號互相傳送信號。

(2)軟件串口: 一般說來是在通訊協議上採用串口的設備,但在物理連接上,不一定遵從該串口的硬件協議。特點是可以用靈活的接口與現成的設備進行通訊。比如在USB線上模擬網絡通訊,在USB線上模擬RS232串口。如許多現成的模塊如GPRS,其接口都是串口的,但這個模塊聲明是5V的或3.3V的接口,那就不能直接接在通用串口上,而需要直接走TTL信號線與CPU連接,然後CPU運行一套串口通信協議即可輕鬆連接它們。

3、USART(Universal Synchronous/Asynchronous Receiver/Transmitter)是一個全雙工通用同步/異步串行收發模塊,該接口是一個高度靈活的串行通信設備。(和 UART 有區別,帶有時鐘驅動功能,故同步/異步通訊具有可選性) 

USART 收發模塊一般分爲三大部分:時鐘發生器、數據發送器和接收器

控制寄存器爲所有的模塊共享。時鐘發生器由同步邏輯電路(在同步從模式下由外部時鐘輸入驅動)和波特率發生器組成。發送時鐘引腳 XCK 僅用於同步發送模式下,發送器部分由一個單獨的寫入緩衝器(發送 UDR)、一個串行移位寄存器、校驗位發生器和用於處理不同湞結構的控制邏輯電路構成。使用寫入緩衝器,實現了連續發送多湞數據無延時的通信。接收器是 USART 模塊最複雜的部分,最主要的是時鐘和數據接收單元。數據接收單元用作異步數據的接收。除了接收單元,接收器還包括校驗位校驗器、控制邏輯、移位寄存器和兩級接收緩衝器(接收 UDR)。接收器支持與發送器相同的幀結構,同時支持幀錯誤、數據溢出和校驗錯誤的檢測。

附:此文爲本人經STM32實戰後總結所得,歡迎大家參考指點,謝謝。

 

 

 

 

 

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