通俗易懂的 UART 協議幀格式

看下面這個圖,大家已經知道今天的主角是 UART,我們通常說的串口,UART 包含 TTL 電平和 RS-232 電平兩種,嵌入式系統裏面,單片機的串口一般都是 TTL 電平。

今天的內容關於 UART 的幀格式,比較簡單,玩過單片機的小夥伴應該都知道。

UART 的英文全稱是:Universal Asynchronous Receiver/Transmitter,意爲通用異步收發傳輸器。

UART 因爲有兩根線數據線 TX 和 RX,可以以全雙工的形式進行發送和接收數據,同一時刻,兩條鏈路的發送器和接收器可以同時傳輸數據。

區別於全雙工的,還有另一種,是半雙工,因爲只有一根數據線,所以數據傳輸是這樣。

或者是下面這樣,同一時刻,只有一條鏈路在傳輸數據。

除了雙工形式,還有一種是半工,只有發送器到接收器這一個鏈路。

說完了 UART 的工作模式,下面進入主題——UART 幀格式,也可以稱之爲 UART 協議,單片機與 PC 之間的通信,爲了保證數據通信的可靠性,雙方都必須遵從 UART 協議。

UART 數據幀格式

其中各位的含義如下:

如果我們傳輸數據 0X33(00110011),那麼對應的波形就是如下這樣,因爲是 LSB 在前,所以 8 位數據依次是 11001100

發送 0X33 數據幀格式

如果再發其他數據,再依次循環這個過程即可。

UART 是異步傳輸,以 1 個字符爲傳輸單位,傳輸 2 個字符之間的時間間隔,比如傳輸 0X33 後再傳輸 0X35,這兩者時間間隔是未知的。

但是同一字符內相鄰位間的時間間隔是確定的,比如 0X33 低兩位的 1 和 1 之間的時間間隔是確定的,這涉及到 UART 傳輸速率的概念——波特率

波特率的單位是 bps,全稱是 bit per second,意爲每秒鐘傳輸的 bit 數量。

波特率 9600bps,代表每秒鐘傳輸 bit 的數量爲 9600,那麼傳輸 1bit 數據的時間就是 1/9600=104us,波特率 115200bps,代表傳輸 1bit 數據的時間是 8us。

兩個串口之間是如何發送和接受數據呢?

首先,UART1 以 9600 波特率發送 0X33,先在數據線上放 1 個 104us 脈寬的低電平(起始位),然後是連續 2 個 104us 脈寬的高電平(2bit 邏輯 1),依次類推。

其次,UART2 以 9600 波特率接收 0X33,通過數這些數據的脈寬,來確認數據。

爲了確保數據傳輸的正確性,減少誤差,一般 UART1 和 UART2 之間的波特率差別小於 10%,一次最多隻能傳輸 1 個字節(8bit),也有效減小了累計誤差。

今天的文章內容到這裏就結束了,希望對你有幫助,我們下一期見。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/INgYi8HYagm3Ko7sIEzMBw