STM32 USART UART #1 基礎應用 – USART基本概念

STM32的USART和UART的基本概念。文章主要集中在異步串行通信的原理上,講解了數據幀的結構、波特率等關鍵參數。我還介紹了UART的硬件組成部分,包括如何通過寄存器來控制數據的傳輸和接收。此外,文章還涉及了USART中斷字符的傳輸和錯誤處理的重要性。

Outline

USART基本概念和常見的應用

USART(universal synchronous asynchronous receiver transmitter, 通用異步接收發送器)是一種在計算機硬件中常見的硬件通信協議,用於串行通信。它允許設備之間進行點對點的低速度數據交換。USART的主要特點和工作原理如下:

  1. 異步串行通信:異步意味著在傳輸數據時,發送方和接收方的時鐘不同步。UART通信不需要時鐘信號來同步發送和接收的數據,這是它與同步串行通信(如SPI或I2C)的主要區別。
  2. 數據格式:UART通信中的數據通常包括起始位、數據位(通常是7或8位)、可選的奇偶校驗位,以及停止位。這種格式確保接收器可以正確地識別和解析接收到的數據。
  3. 波特率:UART通信中的一個關鍵參數是波特率,即每秒傳輸的位數。發送方和接收方必須設置為相同的波特率以實現正確的通信。
  4. 硬件結構:一個典型的UART包括一個發送器(用於發送數據, transmitter)和一個接收器(用於接收數據, receiver),以及一個串行數據線(對於全雙工通信,分別有一條用於發送和一條用於接收)。
  5. 應用場景:UART廣泛應用於微控制器、計算機、通信設備等場景,用於低速度的點對點通信。它非常適合於數據量不大,對實時性要求不高的應用。
  6. 無需外部時鐘:由於UART是異步的,它不需要外部的時鐘信號。這使得UART設計相對簡單,並減少了硬件需求。

同步異步接收發送器(USART)有多種運用,涵蓋了不同的通信需求和協議。通常有哪些運用如下:

  1. 全雙工數據交換:USART能夠與外部設備進行全雙工數據交換,即同時進行數據的發送和接收。這對於需要高效通信的應用非常重要。
  2. 支持NRZ異步串行數據格式:NRZ(Non-Return to Zero)格式廣泛用於工業標準的串行通信,USART的這一特性使其兼容多種設備。
  3. 廣泛的波特率範圍:通過使用分數波特率生成器,USART能夠支持非常廣泛的波特率,使其適用於多種不同速率的通信需求。
  4. 同步和半雙工通信:USART支持同步一向通信和半雙工單線通信,這增加了其在不同通信模式下的靈活性。
  5. 支持多種通信協議和標準
    • LIN(Local Interconnect Network):一種用於車載網絡的串行網絡協議。
    • 智能卡協議(smart card):用於智能卡和讀卡器之間的通信。
    • IrDA(Infrared Data Association)SIR ENDEC:一種紅外數據通信標準。
    • 調制解調器操作(例如CTS/RTS):允許USART在調制解調器通信中使用。
  6. 多處理器通信:USART支持多處理器之間的通信(address mask),這對於複雜的系統和應用非常重要。
  7. 高速數據通信:通過使用DMA(直接內存訪問)進行多緩衝配置,USART可以實現高速數據傳輸,這對於要求高速數據處理的應用非常關鍵。

USART是一種多功能的通信工具,適用於多種不同的應用場景,從工業控制到車載系統,再到智能卡和無線通信,USART的多樣性和靈活性使其成為串行通信中一個強大的解決方案。

USART基本運作原理

做為串列通訊的工具,需要知道基本通訊的格式,如下:

USART/UART Data frame.
USART/UART Data frame.

在上方圖中顯示了幾種基本的data frame,而在一個frame中是由起始位(start bit)、停止位(stop bit)、可選的奇偶校驗位(parity bit,optional),以及數據位(7或8位)所組合成。其中注意兩個部分,Idle freme表示當前是閒置狀態,Break Frame是指數據線被有意或無意地保持在低電位一段時間(超過一個frame的時間),通常用於指示特殊情況或進行故障排除。

接下來介紹USART在STM32中是如何運作的,其中使用了那些Register,如下:

在下方圖USART block diagram中,首先注意背景灰色框框的部分,分成兩組分別為Transmit和Receive,再細分能夠分成Transmit Data Register (TDR)、Transmit Shift RegisterReceive Data Register (RDR)、Receive Shift Register兩大部分。談談如何接收資料,首先外部資料透過Rx傳輸進來,再透過Receive Shift Register接收傳至RDR,最後由CPU或DMA的方式將資料放置SRAM內部,讓User能夠取其資料使用。反之,如果要將資料傳輸出去,能夠透過CPU或DMA方式將SRAM資料帶入到TDR內,最後再透過Transmit Shift Register傳輸至Tx,以上是基本的USART傳輸方式。

USART block diagram.
USART原理圖。
USART原理圖

以上內容概述了USART的整體運作機制。接下來,我們將詳細介紹如何通過寄存器來控制數據傳輸和接收,探討各種中斷功能,以及如何確保資料傳輸的準確性。

USART – 單一字元傳輸與接收 (Singal Byte Communication)

字符傳輸

  1. TXE位的清除機制
    • TXE位在寫入數據寄存器時總是被清除。這意味著當有新數據被寫入數據寄存器時,TXE位會重置。
  2. TXE位設置的含義
    • 硬件設置TXE位,表示以下幾點:
      • 數據已從TDR(Transmit Data Register,傳輸數據寄存器)移動到移位寄存器,並且數據傳輸已經開始。
      • TDR寄存器是空的。
      • 可以在不覆蓋前一數據的情況下,將下一數據寫入USART_DR(USART Data Register,USART數據寄存器)。
  3. 中斷產生條件
    • 如果TXEIE(Transmit Data Register Empty Interrupt Enable)位被設置,TXE標誌將生成一個中斷。這意味著當TDR準備好接收新的數據時,系統可以配置為自動發出一個中斷信號。
  4. 數據寫入過程
    • 當正在進行數據傳輸時,對USART_DR(USART數據寄存器)的寫入操作會將數據存儲在TDR(傳輸數據寄存器)中。當前傳輸完成後,這些數據會被複製到移位寄存器中。
    • 當沒有進行數據傳輸時,對USART_DR的寫入操作會直接將數據放入移位寄存器,隨即開始數據傳輸,並且TXE(傳輸數據寄存器空)位立即被設置。
  5. TXE位和TC位的行為
    • 如果一個數據幀(包括停止位)被傳輸並且TXE位被設置,則TC(傳輸完成)位會變高。
    • 如果在USART_CR1(控制寄存器1)中設置了TCIE(傳輸完成中斷啟用)位,當TC位變高時會生成一個中斷。
  6. 關閉USART或進入低功耗模式前的要求
    • 在向USART_DR寫入最後一筆數據後,必須等待TC=1(表示傳輸完成)才能禁用USART或使微控制器進入低功耗模式。
Single Byte Communication Flow Chart
Single Byte Communication Flow Chart

流程圖說明:

  1. 將資料’A’進行傳輸,寫入至TDR,此時TXE(Transmit Data Register Empty)會被硬體重置。
  2. 資料會經由TDR隨著Clock帶入至Transmit Shift Register,這時TXE會被硬體設置,同時如果TXEIE有被啟用,則會發生中斷。
  3. 當資料透過Transmit Shift Register傳輸出去且完成,這時TC(Transmission Complete)會被硬體設置,如果有設置TCIE則會產生中斷(可軟體重置)。

請注意,上述流程適用於單字節傳輸。對於多字節傳輸情況,要使TC(傳輸完成)位被設置,除了完成當前傳輸外,還必須滿足TDR(傳輸數據寄存器)為空,即TXE(傳輸數據寄存器空)位被設置的條件。只有在這些條件都滿足時,TC位才會被設置,從而觸發TC中斷。

USART - TX傳輸時序圖
USART – TX傳輸時序圖

字符接收

  1. 字符接收過程
    • 在USART接收過程中,數據通過RX引腳按最低有效位先進行移位。在此模式下,USART_DR寄存器包含一個緩衝區(RDR),位於內部總線和接收移位寄存器之間。
  2. 接收設置步驟
    • 啟用USART:通過將USART_CR1寄存器中的UE位設置為1來啟用USART。
    • 設定字長:在USART_CR1中設定M位,以定義字長。
    • 設定停止位:在USART_CR2中設定停止位的數量。
    • 選擇DMA使能:如果進行多緩衝通信,在USART_CR3中選擇DMA使能(DMAR),並按多緩衝通信中解釋的方式配置DMA寄存器。
    • 選擇波特率:使用波特率寄存器USART_BRR來選擇所需的波特率。
    • 設置接收使能:設置USART_CR1中的RE位。這啟用接收器,開始尋找起始位。
  3. 字符接收時的行為
    • 當字符被接收時,RXNE(接收數據寄存器非空)位被設置,表示移位寄存器的內容已轉移到RDR。換句話說,數據已被接收,可以讀取(以及相關的錯誤標誌)。
    • 如果設置了RXNEIE位,則會生成中斷。
    • 如果在接收過程中檢測到帧錯誤、噪聲或溢出錯誤,則可以設置錯誤標誌。
    • 在多緩衝模式下,每接收一個字節後RXNE被設置,並通過DMA讀取數據寄存器來清除。
    • 在單緩衝模式下,通過軟件讀取USART_DR寄存器來清除RXNE位。RXNE標誌也可以通過寫入零來清除。在接收下一個字符結束前必須清除RXNE位,以避免溢出錯誤。
  4. 注意事項
    • 在接收數據時不應重置RE位。如果在接收過程中禁用了RE位,則當前字節的接收將被中斷。

以上是USART傳輸接收流程筆記。

USART – Break Characters

在上小節了解Break frame用意之後,接下來說明如何傳送和接收Break frame:

USART – Transmit Break frame

通信中如何使用SBK(Send Break)位來傳送中斷字符(break character),以及相關的操作細節。以下是對這段文字的分析:

  1. 發送中斷字符
    • 通過設置SBK位,USART會傳送一個中斷字符。中斷幀的長度取決於M位的設定(M位用於定義數據位的長度)。
  2. SBK位的操作
    • 當SBK位設置為‘1’時,在完成當前字符傳輸後,USART會在TX(傳輸線)上發送一個中斷字符。
    • 中斷字符傳輸完成時(即在中斷字符的停止位期間),該位會由硬件自動重置。
  3. 確保下一幀的識別
    • USART在最後一個中斷幀的末尾插入一個邏輯1位,以保證下一數據幀的起始位能被正確識別。
  4. 操作注意事項
    • 如果在中斷傳輸開始前,軟件重置了SBK位,則中斷字符將不會被傳輸。
    • 對於連續兩次的中斷,應在前一次中斷的停止位之後再設置SBK位。

USART – Receive Break frame

  1. 中斷字符的接收
    • 在USART通信中,當接收端檢測到一個中斷字符時,這通常表示數據線被有意或無意地保持在低電平一段時間,這段時間超過了傳輸一個正常數據位的時間。
  2. 處理為幀錯誤
    • USART將接收到的中斷字符視為一種幀錯誤(framing error)。幀錯誤是串行通信中的一種錯誤類型,指的是數據幀的格式不符合預期,例如缺失停止位。
    • 在這種情況下,USART偵測到的不是正常的數據幀結構(如起始位、數據位、可選的奇偶校驗位和停止位),而是一個異常的低電平信號,因此將其解釋為幀錯誤。
  3. 錯誤處理
    • 當USART檢測到幀錯誤時,它可能會通過設置錯誤標誌位、生成錯誤中斷或採取其他錯誤處理措施來響應這種情況。
    • 接收到的中斷字符通常用於通信協議中的特殊目的,如指示通信的開始或結束,或用於錯誤恢復和診斷。

USART – Receiver Start bit detection

在USART中,當識別出特定的採樣序列時,起始位被檢測到。這個序列是:1 1 1 0 X 0 X 0 X 0 0 0 0。

偵測start bit時序圖
偵測start bit時序圖
  1. 起始位檢測的中止
    • 如果起始位的檢測序列不完整,起始位檢測將被中止,接收器返回到閒置狀態,不設置任何標誌位,在這個狀態下,它將等待下一個下降沿(表示新的起始位的可能開始)。
  2. 起始位的確認
    • 起始位被確認(RXNE接收數據寄存器非空標誌位設置,如果RXNEIE=1則生成中斷),如果在兩次採樣中,3個被採樣的位都為0(第一次採樣在第3、第5和第7位,第二次採樣在第8、第9和第10位)。
  3. 起始位的驗證與噪聲標誌
    • 起始位被驗證(RXNE標誌位設置,如果RXNEIE=1則生成中斷),但如果在兩次採樣中,至少有2個採樣位是0,則設置NE(噪聲)標誌位。如果這個條件不滿足,則起始位檢測被中止,並返回閒置狀態(不設置任何標誌位)。
    • 如果在其中一次採樣(第3、第5和第7位或第8、第9和第10位的採樣)中,發現2個位為0,則起始位被驗證,但設置NE噪聲標誌位。

::在之後的文章會特別說明如何用軟體實現start bit detection。

UART與USART的比較

下方是UART和USART比較表格:

特性UART(通用異步接收發送器)USART(通用同步異步接收發送器)
通信方式只支持異步通信支持同步和異步通信
時鐘同步不需要外部時鐘信號同步模式下需要外部時鐘信號
數據傳輸率相對較低,適合低速通信在同步模式下可以達到較高的數據傳輸率
技術複雜性較低,硬件設計簡單較高,特別是在同步模式下
應用場景低速、低成本、低功耗應用,如簡單嵌入式系統高速數據傳輸和複雜通信要求的場景,如高性能嵌入式系統
主要優勢簡單性和成本效益速度和靈活性
UART和USART比較表格

UART和USART最主要的區別在於它們的通信方式。UART專門用於異步通信,而USART則支持同步和異步通信。

  1. 通信方式
    • UART:只支持異步通信,即數據傳輸時沒有時鐘信號同步。這使得UART在設計上更為簡單,但通信速度通常較慢。
    • USART:可以進行同步或異步通信。同步通信通常比異步通信快,但它需要額外的時鐘線來同步發送方和接收方。
  2. 應用場景和優勢
    • UART的簡單性使其非常適合於低速、低成本和低功耗的應用,如簡單的嵌入式系統和微控制器間的通信。
    • USART由於其靈活性和高速能力,更適合於需要高速數據傳輸和更複雜通信要求的場景,例如高性能嵌入式系統、數據收集設備和通信接口。

技術細節的對比 除了通信方式的差異,UART和USART在技術細節上也有所不同。

  1. 時鐘同步
    • UART不需要外部時鐘信號,這意味著硬件設計更簡單,但也導致了數據傳輸率的限制。
    • USART在同步模式下,需要時鐘同步信號,這提高了數據傳輸的速度和效率。
  2. 數據傳輸率
    • UART的數據傳輸率通常較低,但足以應對許多基本的串行通信需求。
    • USART在同步模式下可以達到更高的數據傳輸率,適合數據量大的應用。

UART和USART都是串行通信中的重要組件,它們各有優勢。選擇使用哪一種取決於特定應用的需求。UART在簡單性和成本效益方面占優,而USART則在速度和靈活性方面更勝一籌。

以上是對USART常見的基本觀念。

發表迴響

返回頂端