看下面這個圖,大家已經知道今天的主角是UART,我們通常說的串口,UART包含TTL電平和RS-232電平兩種,嵌入式系統里面,單片機的串口一般都是TTL電平。
今天的內容關于UART的幀格式,比較簡單,玩過單片機的小伙伴應該都知道。
UART的英文全稱是:Universal Asynchronous Receiver/Transmitter,意為通用異步收發傳輸器。
UART因為有兩根線數據線TX和RX,可以以全雙工的形式進行發送和接收數據,同一時刻,兩條鏈路的發送器和接收器可以同時傳輸數據。
區別于全雙工的,還有另一種,是半雙工,因為只有一根數據線,所以數據傳輸是這樣。
或者是下面這樣,同一時刻,只有一條鏈路在傳輸數據。
除了雙工形式,還有一種是半工,只有發送器到接收器這一個鏈路。
說完了UART的工作模式,下面進入主題——UART幀格式,也可以稱之為UART協議,單片機與PC之間的通信,為了保證數據通信的可靠性,雙方都必須遵從UART協議。
UART數據幀格式
其中各位的含義如下:
起始位:發送1位邏輯0(低電平),開始傳輸數據。
數據位:可以是5~8位的數據,先發低位,再發高位,一般常見的就是8位(1個字節),其他的如7位的ASCII碼。
校驗位:奇偶校驗,將數據位加上校驗位,1的位數為偶數(偶校驗),1的位數4為奇數(奇校驗)。
停止位:停止位是數據傳輸結束的標志,可以是1/1.5/2位的邏輯1(高電平)。
空閑位:空閑時數據線為高電平狀態,代表無數據傳輸。
如果我們傳輸數據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),也有效減小了累計誤差。
-
uart
+關注
關注
22文章
1240瀏覽量
101480
發布評論請先 登錄
相關推薦
評論