加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

UART串口通信的幀格式

2020/08/05
1547
閱讀需 5 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

看下面這個(gè)圖,大家已經(jīng)知道今天的主角是 UART,我們通常說(shuō)的串口,UART 包含 TTL 電平和 RS-232 電平兩種,嵌入式系統(tǒng)里面,單片機(jī)的串口一般都是 TTL 電平。

今天的內(nèi)容關(guān)于 UART 的幀格式,比較簡(jiǎn)單,玩過(guò)單片機(jī)的小伙伴應(yīng)該都知道。

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

UART 因?yàn)橛袃筛€數(shù)據(jù)線 TX 和 RX,可以以全雙工的形式進(jìn)行發(fā)送和接收數(shù)據(jù),同一時(shí)刻,兩條鏈路的發(fā)送器和接收器可以同時(shí)傳輸數(shù)據(jù)。

區(qū)別于全雙工的,還有另一種,是半雙工,因?yàn)橹挥幸桓鶖?shù)據(jù)線,所以數(shù)據(jù)傳輸是這樣。

或者是下面這樣,同一時(shí)刻,只有一條鏈路在傳輸數(shù)據(jù)。

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

說(shuō)完了 UART 的工作模式,下面進(jìn)入主題——UART 幀格式,也可以稱之為 UART 協(xié)議,單片機(jī)與 PC 之間的通信,為了保證數(shù)據(jù)通信的可靠性,雙方都必須遵從 UART 協(xié)議。

UART 數(shù)據(jù)幀格式

其中各位的含義如下:

  • 起始位:發(fā)送 1 位邏輯 0(低電平),開(kāi)始傳輸數(shù)據(jù)。

  • 數(shù)據(jù)位:可以是 5~8 位的數(shù)據(jù),先發(fā)低位,再發(fā)高位,一般常見(jiàn)的就是 8 位(1 個(gè)字節(jié)),其他的如 7 位的 ASCII 碼。

  • 校驗(yàn)位:奇偶校驗(yàn),將數(shù)據(jù)位加上校驗(yàn)位,1 的位數(shù)為偶數(shù)(偶校驗(yàn)),1 的位數(shù) 4 為奇數(shù)(奇校驗(yàn))。

  • 停止位:停止位是數(shù)據(jù)傳輸結(jié)束的標(biāo)志,可以是 1/1.5/2 位的邏輯 1(高電平)。

  • 空閑位:空閑時(shí)數(shù)據(jù)線為高電平狀態(tài),代表無(wú)數(shù)據(jù)傳輸。

如果我們傳輸數(shù)據(jù) 0X33(00110011),那么對(duì)應(yīng)的波形就是如下這樣,因?yàn)槭?LSB 在前,所以 8 位數(shù)據(jù)依次是 11001100

發(fā)送 0X33 數(shù)據(jù)幀格式

如果再發(fā)其他數(shù)據(jù),再依次循環(huán)這個(gè)過(guò)程即可。

UART 是異步傳輸,以 1 個(gè)字符為傳輸單位,傳輸 2 個(gè)字符之間的時(shí)間間隔,比如傳輸 0X33 后再傳輸 0X35,這兩者時(shí)間間隔是未知的。

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

波特率的單位是 bps,全稱是 bit per second,意為每秒鐘傳輸?shù)?bit 數(shù)量。

波特率 9600bps,代表每秒鐘傳輸 bit 的數(shù)量為 9600,那么傳輸 1bit 數(shù)據(jù)的時(shí)間就是 1/9600=104us,波特率 115200bps,代表傳輸 1bit 數(shù)據(jù)的時(shí)間是 8us。

兩個(gè)串口之間是如何發(fā)送和接受數(shù)據(jù)呢?

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

?
其次,UART2 以 9600 波特率接收 0X33,通過(guò)數(shù)這些數(shù)據(jù)的脈寬,來(lái)確認(rèn)數(shù)據(jù)。

為了確保數(shù)據(jù)傳輸?shù)恼_性,減少誤差,一般 UART1 和 UART2 之間的波特率差別小于 10%,一次最多只能傳輸 1 個(gè)字節(jié)(8bit),也有效減小了累計(jì)誤差。

今天的文章內(nèi)容到這里就結(jié)束了,希望對(duì)你有幫助,我們下一期見(jiàn)。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

公眾號(hào)記得誠(chéng)主筆,CSDN博客專家,硬件-基帶工程師,從事2G/3G/4G無(wú)線通信、GNSS定位、車載電子、物聯(lián)網(wǎng)等產(chǎn)品的硬件開(kāi)發(fā)工作,用文字和讀者交流,總結(jié),分享,提高,共同進(jìn)步。