目錄
一.通信領域基礎知識介紹
1.1 串行和并行通信
1.2 同步和異步傳輸
1.3 串口和COM口
1.4 通信協議標準以及物理層定義
1.5 物理層協議之TTL / RS-232 / RS-485
二.USART介紹
2.1 USART特點介紹
2.2 UART和TTL / RS-232 / RS-485
2.3 USART硬線流控介紹
2.4 USART幀格式介紹
2.5 USART對比其他總線
三.USART工程配置及使用
3.1 USART數據傳輸方式配置說明
3.2?USART中斷配置配置說明
3.2.1 USART常用中斷
3.2.2 USART中斷配置實戰說明
3.2.3?DMA常用中斷
3.2.4 DMA中斷配置實戰說明
四.USART異步模式同步機制介紹
一.通信領域基礎知識介紹
介紹USART之前,我們需要先了解一些通信協議領域的通用知識。
1.1 串行和并行通信
- 串行:串行接口的基本傳輸單位是1位,即每次只能傳輸一個bit,通過協議組合成幀進行傳輸
- 并行:一次性可以傳輸多個位,理論上每個位需要一條獨立線束
1.2 同步和異步傳輸
Synchronous / Asynchronous 同步/異步,通信層面的異步/同步概念與軟件層面不同:
- 軟件層面:
- 同步處理:同步調用意味著調用方主動等待并立即獲得結果。
- 異步處理:異步調用意味著調用方發起請求后立即返回,結果通過事件、回調或輪詢等方式在后續通知。
- 通信層面:
- 同步通信:通信雙方使用同一根時鐘線來控制通信,理論上有時鐘線的情況下雙方的節奏是一致的,因此稱為同步。
- 異步通信:雙方互相不知道對方時鐘頻率,通過一些設計來規避雙方的時鐘不一致問題。
1.3 串口和COM口
- 串口(Serial Port):通用稱呼,是一個廣義概念,嚴格來說所以串行通道都可以稱之為串口,包括USB。但是在嵌入式MCU領域,一般說起串口都是默認指的USART的異步模式。
- COM:COM代表計算機中的邏輯串口設備名稱(如COM1, COM2),是電腦對串口的抽象。電腦上的COM口一般就是通過USART實現的。
1.4 通信協議標準以及物理層定義
按照目前國際標準,一般將通信協議劃分為5層(實際上廣泛使用的標準)或者7層(ISO推薦)協議。按照從底層到上層分為:
- 物理層
- 數據鏈路層
- 傳輸層
- 網絡層
- 會話層
- 表示層
- 應用層
其中物理層定義了以下內容:
特性類別 | 定義說明 |
---|---|
過程特性 | 比特在時間軸上的傳輸方式,如同步/異步、采樣點、位時序 |
硬件特性 | 接口芯片、收發器、電路驅動能力、端口數量 |
機械特性 | 物理連接器、針腳排列、接口規格 |
電氣特性 | 電壓電平范圍、電流驅動、抗干擾能力、差分/單端方式 |
功能特性 | 通道容量、點對點/多點拓撲、誤碼率、最大距離 |
1.5 物理層協議之TTL / RS-232 / RS-485
這三者都是物理層定義,規定了通信物理層定義
概念 | 簡要說明 | 電氣特性 |
---|---|---|
TTL(Transistor-Transistor Logic) | 原生電平 | 邏輯1:3.3V 或 5V,邏輯0為:0V。 |
RS232 | 電壓轉換 | 邏輯1:-3V 到 -15V,邏輯0:+3V 到 +15V。 |
RS485 | 電壓轉換+差分電平 | 邏輯 1:B線電壓比A線電壓高,典型差值 >+200mV。 邏輯 0:A線電壓比B線電壓高,典型差值 >+200mV。 其共模電壓范圍通常為 -7V 到 +12V |
二.USART介紹
2.1 USART特點介紹
USART(即Universal Synchronous / Asynchronous Receiver/Transmitter,通用同步/異步收發器),其特性如下:
- 串行通信
- 同步/異步傳輸:支持同步傳輸(USART同步模式),以及異步傳輸(USART異步模式)
- 物理層以及數據鏈路層協議:只負責數據的轉發,不涉及應用邏輯。其物理層定義不完整,因此需要搭配其他物理層協議使用,如TTL、RS-232、RS-485
- 線束數量不固定,可選搭配如下:
- Tx/Rx:數據傳輸線
- GND:當通信雙方不直接公地,一般需要增加GND線作為參考電平以保持通信穩定性
- CTS/RTS:流控線,可選非標準協議定義內容,用于控制通信雙方的傳輸,防止數據溢出或丟失
- CLK:USART可使用同步模式進行通信,此時需要額外的時鐘線
注意!!
USART的硬線流控CTS/RTC以及USART的同步傳輸模式,在實際項目中很少使用,因為這兩者都會增加線束的數量、傳輸協議的復雜度。而USART最大的優點就是協議的簡單以及線束數量少(最少只需要兩根)。
2.2 UART和TTL / RS-232 / RS-485
USART的物理層定義并不完全,如下:
特性類別 | USART 覆蓋情況 | 缺失說明 |
---|---|---|
過程特性 | 完整 | 無缺失,USART 定義了起始位、數據位、校驗位、停止位,但功能簡單 |
硬件特性 | 缺失 | USART 本身不定義具體硬件,需依賴 TTL/RS232/RS485 芯片 |
機械特性 | 缺失 | USART 不定義連接器規格,實際由外部標準決定 |
電氣特性 | 缺失 | USART 不規定電平和驅動能力,需要 TTL/RS232/RS485 補充 |
功能特性 | 部分缺失 | USART 默認點對點,最大速率/距離未標準化,誤碼檢測只有奇偶校 |
因此實際使用過中必須搭配一個物理層協議使用,常用搭配如下:
概念 | 簡要說明 | 電氣特性 | 與USART的關系 |
---|---|---|---|
TTL(Transistor-Transistor Logic) | 原生電平 | 邏輯1:3.3V 或 5V,邏輯0為:0V。 | MCU內部USART外設輸出的就是TTL電平。 優點:無需電平轉換芯片,硬件成本低 缺點:抗干擾能力和傳輸距離比RS 232和RS 485差。 |
RS232 | 電壓轉換 | 邏輯1:-3V 到 -15V,邏輯0:+3V 到 +15V。 | 用于USART通信時,將原生TTL電平進行了電壓轉換。 優點:RS 232的電壓范圍更廣,抗干擾更強。 缺點:需要額外的電平轉換芯片,增加了硬件成本。 |
RS485 | 電壓轉換+差分電平 | 邏輯1:-3V 到 -15V,邏輯0:+3V 到 +15V。 | 用于USART通信時,將原生TTL電平進行了電壓轉換,并變成了差分電平。 優點:因為使用差分電平,抗干擾能力極強,且傳輸距離得到大大提升。支持多點通信。 缺點:需要額外的電平轉換芯片以及線束,且在車載電子領域和CAN定位重合且競爭 |
注意:
在汽車電子領域,RS-485的生態位主要被CAN占據,其出場率較低。
2.3 USART硬線流控介紹
由于USART協議
CTS(Clear To Send)和RTS(Require To Send),不屬于標準USART規定內容。本質上是通過硬線指示來完成流控效果,示意如下:
設備1 | 設備2 | 說明 |
---|---|---|
RTS(發) | CTS(收) | 當設備2收到設備1的RTS通知(一般是高電平到低電平跳變)時,代表設備1準備好接收數據了,設備2此時可以發送數據 |
CTS(收) | RTS(發) | 當設備1收到設備2的RTS通知(一般是高電平到低電平跳變)時,代表設備2準備好接收數據了,設備1此時可以發送數據 |
2.4 USART幀格式介紹
參數 | 說明 |
---|---|
開始位 | 1 bit,當USART數據傳輸線不傳輸數據時,它通常保持在高電壓電平。為了開始數據傳輸,發送方將傳輸線從高電平拉至低電平一個時鐘周期。當接收USART檢測到高電壓到低電壓轉換時,它開始以波特率的頻率讀取數據幀中的位。 |
數據位 (Data Bits) | 8bit 或 9bit,定義一幀有效數據,數據位包含要傳輸的實際數據。在通常情況下,數據首先以最低有效位發送,并且長度使用8位。 |
停止位 (Stop Bits) | 1至2bit,為了通知傳輸數據包的結束,USART發送端會將數據傳輸線驅動至高電壓至少1到2位持續時間。 |
校驗位 (Parity) | 1bit,可選,保證數據完整性。奇偶校驗位是接收USART在傳輸過程中判斷是否有任何數據發生變化的一種方法。電磁輻射、不匹配的波特率或長距離傳輸時,數據都有可能發生變化。接收USART讀取數據幀后,它會計算值為1的位數,并檢查總數是偶數還是奇數。如果奇偶校驗位為0(偶校驗),則數據幀中的1位應總計為偶數。如果奇偶校驗位是1(奇校驗),則數據幀中的1位應總計為奇數。當奇偶校驗位與數據匹配時,USART知道傳輸沒有錯誤。 |
2.5 USART對比其他總線
總線 | 使用場景 | 通信距離 | 線束數量 | 通信方向 | 通信單 元數量 | 同步& 異步 |
---|---|---|---|---|---|---|
USART | 微控制和外部設備、模塊之間、調試接口 | 建議小于1.5m | Tx+Rx+GND(可選) | 全雙工 | 1 對 1 | 異步 |
SPI(Serial Peripheral Interface) | 主要用于嵌入式系統內主芯片與外圍芯片之間的短距離、高速通信 | 建議小于3m | CS:片選線,選擇和那個從模塊通信; MOSI:主模塊給從模塊發送數據 MISO:從模塊給主模塊發送數據 CLK:時鐘線 | 全雙工 | 1(主)對N(從) | 同步 |
IIC(Inter-Integrated Circuit) | 適用于連接微控制器和各種外部設備,如溫度傳感器、EEPROM、實時時鐘等,使用兩根線進行雙向通信。? | 建議小于3m | 數據傳輸線+CLK | 半雙工 | N(多主)對N(多從) | 同步 |
LIN(Local Interconnect Network) | 主要用于汽車電子系統中的低速通信,如車門控制、座椅控制等。 | 理論可達40m | Tx/Rx(共用一根) + GND(可選) | 半雙工 | 1(主)對N(從) | 異步 |
CAN(Controller Area Network) | 廣泛用于汽車、工業控制和其他分布式系統中,具備高可靠性和抗干擾能力,支持多個設備在同一總線上通信。 | 理論可達40m | CAN_H+CAN_L | 半雙工 | N對N (不分主從) | 異步 |
注意:
- 傳輸速率一般來講:SPI>IIC>USART>CAN>LIN。
- SPI/IIC一般多用于片上通信,USART多用于片上通信及調試接口,CAN/LIN用于車輛間ECU遠距離通信。
- USART 更偏向點對點、調試和簡單設備通信,其通信距離(短)和穩定性(稍顯不足)使得它的競爭對手主要是SPI和IIC。
三.USART工程配置及使用
3.1 USART數據傳輸方式配置說明
屬性 | 說明 |
---|---|
波特率 | 波特率配置一般由多個寄存器來對時鐘進行分頻,已達到更精準的頻率控制。比如如下形式: 波特率 = 所選定外設時鐘頻率 / (波特率整數部分 + (波特率小數分子部分) / 波特率小數分母部分) 具體配置形式不固定,只需要記住可能存在多個參數配置來控制精度就行,本質上都是外設時鐘 / 預分頻值。 |
停止位 | 需要指定停止位的長度,可選范圍是1bit / 1.5bit / 2bit,部分芯片可能不支持1.5bit模式 |
數據位定義 | 需要定義數據位是8位還是9位,如果是9位還需要指定第9位的含義。不同芯片對于第9位的支持情況不一樣,這里按照最大組合情況介紹
|
傳輸次序(接收/發送) | 選擇大小端模式,即接收/發送時是高Bit位(MSB)還是低Bit位(LSB) |
傳輸模式 | 選擇同步還是異步傳輸。
|
時鐘極性 | 選擇數據在時鐘上升沿還是下降沿同步(全雙工異步模式不需要此配置)。 |
傳輸方向 | 選擇傳輸方向,可以配置僅收或者僅發 |
USART通道 | 一般外設提供不止一組USART硬件通道,需要選擇使用哪一個硬件通道 |
時鐘源選擇 | 選擇USART的時鐘源,為USART通信提供時鐘參考基準,以滿足波特率要求 |
傳輸類型 |
|
硬件流控 | 是否支持硬件流控,可以配置只支持CTS或者RTS,即單向流控 |
硬件FIFO模式 | 是否啟用硬件FIFO,并配置深度 |
3.2?USART中斷配置配置說明
3.2.1 USART常用中斷
信號 | 意義 | 觸發條件 | 說明 |
---|---|---|---|
RXNE/RDR | 接收到新數據 | RX 寄存器中有未讀取字節 | CPU讀取數據寄存器,防止覆蓋。DMA場景不需要。 |
TXE | 發送數據寄存器空 | TX 寄存器空,可以寫入新的待發送數據(前面數據不一定發送完成) | CPU 寫入下一個字節,DMA場景不需要 |
TC/TFE | 發送完成 | 前面一幀數據發送完成 | 標記發送結束,釋放緩沖區 |
IDLE | 總線空閑 | 接收線空閑一段時間(通常是一幀位時間) | 標記幀結束或數據終止 |
ORE | 接收溢出 | RX 寄存器未及時讀取 | 錯誤處理 |
NE | 噪聲錯誤 | 總線噪聲導致接收錯誤 | 錯誤處理 |
FE | 幀錯誤 | 停止位或字節長度錯誤 | 錯誤處理 |
PE | 奇偶校驗錯誤 | 奇偶位不匹配 | 錯誤處理 |
3.2.2 USART中斷配置實戰說明
傳輸類型 | TXE | TC | IDLE | RXNE |
---|---|---|---|---|
RS-485半雙工 + DMA | 不使用,DMA直接判斷數據 | 必須使用,用于通知CPU判斷是否要切換傳輸方向 | 必須使用 | 一般不需要,方向切換一般靠TC進行。 |
RS-485半雙工 + 非DMA | 推薦使用,通知CPU填充發送數據(理論上TXE會比TC觸發早,會更快一些)。 | 必須使用,用于通知CPU判斷是否要切換傳輸方向 | 必須使用 | 推薦使用,用于判斷是否需要切換方向 |
普通傳輸 + DMA | 不使用,DMA直接判斷數據 | 必須使用,TC在此模式下不再是字節級別通知,而是傳輸單位的通知。這個"傳輸單元"取決于字長、傳輸計數、循環/塊模式、DMA FIFO配置。 | 必須使用 | 一般不需要,數據搬運由DMA進行 |
普通傳輸+ 非DMA | 推薦使用,通知CPU填充發送數據(理論上TXE會比TC觸發早,會更快一些)。 | 不使用,使用TXE發送數據更快 | 必須使用 | 必須使用,因為沒有DMA,需要CPU自行處理數據 |
3.2.3?DMA常用中斷
中斷名稱 | 觸發條件 | 典型用途 |
---|---|---|
Transfer Complete | DMA 完成搬運 | CPU 處理已搬運完成數據或繼續下一塊搬運 |
Half Transfer | DMA 完成緩沖區一半 | CPU 提前處理一半數據,保持 RX 連續或平滑 TX 輸出 |
Transfer Error | DMA 地址錯誤、FIFO 溢出、配置錯誤 | 錯誤處理 |
3.2.4 DMA中斷配置實戰說明
- USART錯誤類型中斷依實際項目情況選擇是否使能:ORE、NE、FE、PE
- 推薦基于DMA傳輸:對于高速或大數據量傳輸,強烈推薦使用DMA以減輕CPU負擔(當不使用DMA時,MCU只有1~2個停止位的反應時間)并降低數據丟失風險。對于低速簡單應用,可根據情況選擇中斷或輪詢方式。
- USART中斷配置建議:
- USART發送端:
- DMA傳輸完成中斷
- 半傳輸中斷(可選,用于連續大數據流平滑發送)
- USART接收端:
- 理論最優(實現復雜,設計不過關容易出問題,比如中斷嵌套):
- 半傳輸中斷(防止數據溢出,給CPU預留處理時間)
- 傳輸完成中斷(通知CPU全部處理完成)
- USART IDLE中斷(用于檢測幀結束或總線空閑,防止數據量不夠觸發半傳輸中斷)。
- 項目中常用(實現簡單,絕大部分場景夠用):
- 僅僅使用IDLE中斷,不使用DMA全傳輸和半傳輸中斷。
- 理論最優(實現復雜,設計不過關容易出問題,比如中斷嵌套):
- USART發送端:
DMA詳細介紹點此:【嵌入式原理系列-第七篇】DMA:從原理到配置全解析
四.USART異步模式同步機制介紹
在異步模式下,USART總線空閑時默認高電平。
發送方準備發送數據時(假設數據位為8位,不無奇偶校驗位),會將總線電平拉低一個位時間,稱為起始位,起始位之后開始進行數據位的傳輸,傳輸位傳輸完成后,最后再將總線拉高一個位時間稱之為結束位。
每次起始位接收方會進行一次位同步,保證雙方時序一致。通常USART異步模式下,采樣點位于位中間,即0.5個bit處。
結合以上邏輯,可知異步模式下雙發雙方的速率可以有差距,但是必須保證速率差距在一定范圍內。范圍計算如下:
- 如果發送方速率大于接收方速率:1 <= (發送方速率÷接收方速率)<= (11÷10.5)。即發送方速率不能比接收方快4.76%以上
- 如果發送方速率大于接收方速率:(10÷10.5) <= (發送方速率÷接收方速率)<= 1。即發送方速率不能比接收方慢4.76%以上
總結,8位數據位+1位停止位+無校驗位情況下,雙方速率差應該小于4.76%。其他幀格式組合算法類似。
想了解更多嵌入式技術知識,請點擊閱讀我的其他文章
煙花的文章鏈接集合-CSDN博客
如果你覺得內容對您有幫助,別忘了點贊、收藏和分享支持下哦