UART

霍北北發表於2024-05-11

UART

  • UART
    • 1. 什麼是UART?
    • 2. 硬體接線
    • 3. 資料幀格式
    • 4. 波特率
      • 4.1. 波特率和位元率的定義
      • 4.2. 波特率和位元率之間的關係
      • 4.3. 波特率的作用
    • 5. UART通訊分析實踐
      • 5.1. 傳送"Hello, World!",請寫出資料幀。
      • 5.2. 每秒傳輸多少個位元組?每秒傳輸多少個位元?
    • 6. 總結
    • others

參考連結:

  1. 超簡單的一種通訊,2分鐘搞懂,串列埠通訊的工作原理!
  2. UART串列埠協議詳解 - 曾小慶的文章 - 知乎
  3. 有待補充:透徹理解UART通訊,沒有比這篇更詳細的了! - 億佰特物聯網應用的文章 - 知乎

1. 什麼是UART?

通用非同步收發器(Universal Asynchronous Receiver/Transmitter),通常稱作UART,
是一種序列、非同步、全雙工的通訊協議,在嵌入式領域應用的非常廣泛。

2. 硬體接線

  • 通訊雙方TX、RX交叉連線
  • 通訊雙方共地

3. 資料幀格式

  • 啟動位:
    • 佔1個位長
    • 保持邏輯0電平
  • 有效資料位:
    • 可選5、6、7、8、9個位長(通常是8bit)
    • LSB在前,MSB在後,即最低有效位在前)
  • 校驗位:
    • 1位,可選是否有
    • 常見的是奇偶校驗位
  • 停止位:
    • 可選1、1.5、2個位長
    • 保持邏輯1電平
  • 空閒位:
    • 匯流排空閒時預設邏輯1電平

4. 波特率

4.1. 波特率和位元率的定義

波特率有一個很重要的相關概念,稱為位元率。

  • 位元率:每秒鐘傳輸的位元數,單位bit/s,bps
  • 波特率:每秒鐘傳輸的碼元數,單位symbol/s,Baud

4.2. 波特率和位元率之間的關係

位元率 = 波特率 * log2M,M表示每個碼元承載的資訊量(M也可以認為是進位制數)。

二進位制系統中,每個碼元都存在2種狀態,所以波特率數值上等於位元率。

4.3. 波特率的作用

在串列埠通訊中,傳送端和接收端需要規定好一個相同的波特率,才能保證通訊正常。

在描述波特率的作用時,我比較喜歡用打羽毛球來進行比喻。傳送端是發球的人,接收端是接球的人,而波特率就是兩個打球的人揮拍的頻率,如果這兩個人的節奏一致,羽毛球就可以很長時間不落地,而如果有快有慢,就很容易出現丟球的情況。

5. UART通訊分析實踐

UART在波特率為9600bps、資料幀格式為預設8-N-1的情況下:

5.1. 傳送"Hello, World!",請寫出資料幀。

  1. "Hello, World!"一共有12個位元組,所以一共需要傳送12個UART資料幀。
  2. 根據ASCII碼,將位元組轉成二進位制表示:
    字元 二進位制
    H 01001000
    e 01100101
    l 01101100
    l 01101100
    o 01101111
    , 00101100
    W 01010111
    o 01101111
    r 01110010
    l 01101100
    d 01100100
    ! 00100001
  3. 資料格式預設8-N-1,所以開始位1位,結束位1位,無校驗位。
    0010010001 / 0011001011 /
    0011011001 / 0011011001 /
    0011011111 / 0001011001 /
    0010101111 / 0010101111 /
    0011100101 / 0011011001 /
    0011001001 / 0001000011 /
  4. 注意資料幀之間要有空閒位

5.2. 每秒傳輸多少個位元組?每秒傳輸多少個位元?

  1. 1byte = 8bit,但是UART協議中包含開始位和結束位,所以每秒鐘傳輸的位元組數 = 9600/10 = 960
  2. 根據計算出的每秒鐘傳輸的位元組數,每秒鐘傳輸的位元數是 960*8 = 7680(即一個byte的傳輸速率是7680bps)

6. 總結

  1. UART屬於哪種型別的通訊方式?
  2. 請繪製出UART通訊的硬體接線圖。
  3. 波特率和位元率之間的區別是什麼?
  4. UART在波特率為9600bps、資料幀格式為預設8-N-1的情況下,傳送"Hello, World!",請寫出資料幀。
  5. UART在波特率為9600bps、資料幀格式為預設8-N-1的情況下,每秒傳輸多少個位元組(Byte)?每秒傳輸多少個位元(bit)?

others

我之前總是UART、串列埠,兩個概念傻傻分不清楚。
嚴格來說,串列埠是序列通訊介面的簡稱,所有按位傳送和接收的介面都可以被稱作是串列埠。而UART是一種常見的串列埠協議,其餘常見的串列埠協議包括RS232、RS485等等。
但其實也不用分的那麼清楚,在談論微控制器的時候,大家提到串列埠,雙方都會預設就是UART。

相關文章