當(dāng)前位置:首頁(yè) > 技術(shù)學(xué)院 > 技術(shù)前線
[導(dǎo)讀]UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)器)是一種常用的串行通信協(xié)議,廣泛應(yīng)用于單片機(jī)或各種嵌入式設(shè)備之間的通信。

UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)傳輸器)是一種廣泛使用的異步串行通信協(xié)議。它允許數(shù)據(jù)在發(fā)送端和接收端之間通過單根或多根線進(jìn)行傳輸,是許多嵌入式系統(tǒng)和計(jì)算機(jī)與外部設(shè)備通信的基礎(chǔ)。

UART通信的基本原理相對(duì)簡(jiǎn)單。在UART通信中,數(shù)據(jù)以位(bit)為單位進(jìn)行傳輸,每個(gè)位都有一個(gè)固定的時(shí)間長(zhǎng)度,這個(gè)時(shí)間長(zhǎng)度由波特率決定。UART通信通常包括三個(gè)主要部分:數(shù)據(jù)位、起始位和停止位。起始位用于通知接收端數(shù)據(jù)即將開始傳輸,數(shù)據(jù)位是實(shí)際要傳輸?shù)男畔ⅲV刮粍t用于表示數(shù)據(jù)已經(jīng)傳輸完畢。

UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)器)是一種常用的串行通信協(xié)議,廣泛應(yīng)用于單片機(jī)或各種嵌入式設(shè)備之間的通信。本文將詳細(xì)介紹UART通信的基本原理、工作模式、波特率計(jì)算以及常見使用方式,幫助有一定單片機(jī)開發(fā)能力的人群更好地理解和應(yīng)用UART通信。

一、UART通信的異步通信機(jī)制

UART通信是一種異步串行通信方式,其基本原理是通過數(shù)據(jù)線上傳輸二進(jìn)制數(shù)據(jù)位。UART通信系統(tǒng)主要由發(fā)送端和接收端兩部分組成,它們之間通過數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸。發(fā)送端將待發(fā)送的數(shù)據(jù)轉(zhuǎn)換為并行信號(hào),然后通過驅(qū)動(dòng)電路將并行信號(hào)轉(zhuǎn)換為串行信號(hào),并通過發(fā)送電路將串行信號(hào)發(fā)送到數(shù)據(jù)線上。接收端則通過接收電路將數(shù)據(jù)線上的信號(hào)還原為并行信號(hào),再通過解碼電路將并行信號(hào)轉(zhuǎn)換為原始數(shù)據(jù)位。


一文講透UART通信工作原理

UART通信采用異步通信方式,即發(fā)送端和接收端之間通過數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸。在異步通信中,發(fā)送端和接收端不需要同時(shí)處于激活狀態(tài),而是通過起始位和停止位來標(biāo)識(shí)數(shù)據(jù)幀的開始和結(jié)束。具體來說,當(dāng)發(fā)送端產(chǎn)生起始位后,發(fā)送一個(gè)數(shù)據(jù)位;然后等待接收端的起始位,如果接收到起始位,則繼續(xù)發(fā)送下一個(gè)數(shù)據(jù)位;如果沒有接收到起始位,則認(rèn)為數(shù)據(jù)幀傳輸失敗。同樣,當(dāng)接收端產(chǎn)生停止位后,發(fā)送一個(gè)校驗(yàn)位;然后等待發(fā)送端的停止位,如果接收到停止位,則認(rèn)為數(shù)據(jù)幀傳輸成功。


一文講透UART通信工作原理

二、UART的波特率

波特率表示單位時(shí)間內(nèi)通過線路傳輸?shù)亩M(jìn)制數(shù)據(jù)的位數(shù),通常用bps(bits per second)表示。例如,如果波特率為9600bps,則每秒鐘可以傳輸9600個(gè)比特位的數(shù)據(jù)。

串口傳輸數(shù)據(jù)的波特率是單片機(jī)的時(shí)鐘系統(tǒng)來產(chǎn)生的,因此它和單片機(jī)的系統(tǒng)時(shí)鐘存在算式關(guān)系。

波特率= (16 * 時(shí)鐘頻率) / (32 * 采樣時(shí)間) + (1 * 時(shí)鐘頻率) / (32 * 采樣時(shí)間) - (1 * 時(shí)鐘頻率) / (64 * 采樣時(shí)間)

其中,采樣時(shí)間指從上一次起始位到本次起始位之間的時(shí)間間隔。例如,如果采樣時(shí)間為10ns,則波特率為9600bps。

常見的波特率有2400、4800、9600、19200、38400、57600、115200……它們都可是2400的整數(shù)倍,因此不同的波特率可以通過分頻器來產(chǎn)生。現(xiàn)在的單片機(jī)雖然都有著不同的頻率,常見的有32MHz、48MHz和144MHz,通常它們都會(huì)有一個(gè)外部系統(tǒng)時(shí)鐘為單片機(jī)的外圍設(shè)備提供基礎(chǔ)時(shí)鐘頻率(如1MHz),UART產(chǎn)生波特率也是從該時(shí)鐘產(chǎn)生時(shí)鐘信號(hào)。

需要注意的是,在實(shí)際使用中,時(shí)鐘頻率可能會(huì)受到一些因素的影響,如晶振漂移、電源噪聲等。因此,為了保證數(shù)據(jù)傳輸?shù)恼_性和可靠性,建議在設(shè)計(jì)UART通信系統(tǒng)時(shí)使用外部晶振或時(shí)鐘發(fā)生器,并對(duì)其進(jìn)行校準(zhǔn)和補(bǔ)償。

三、停止位和奇偶校驗(yàn)

在UART異步通信中,停止位用于表示數(shù)據(jù)幀的結(jié)束。停止位可以是1個(gè)或2個(gè)比特位。當(dāng)停止位為1個(gè)比特位時(shí),每個(gè)數(shù)據(jù)字節(jié)的后面都添加一個(gè)額外的時(shí)間間隔,以補(bǔ)償時(shí)鐘抖動(dòng)和其他因素引起的誤差。例如,如果波特率為9600bps,則每個(gè)字節(jié)的時(shí)間間隔為4ms,因此每個(gè)停止位的時(shí)間間隔為4ms / 8 = 0.5ms。


一文講透UART通信工作原理

當(dāng)停止位為2個(gè)比特位時(shí),每個(gè)數(shù)據(jù)字節(jié)的后面都添加兩個(gè)額外的時(shí)間間隔,即每個(gè)字節(jié)的時(shí)間間隔為4ms / (8 + 4) = 0.3125ms。這種模式適用于需要更高精度的數(shù)據(jù)傳輸場(chǎng)景。

奇偶校驗(yàn)是一種常用的錯(cuò)誤檢測(cè)方法,可以檢測(cè)數(shù)據(jù)傳輸過程中的錯(cuò)誤和丟失。在UART通信中,可以通過設(shè)置奇偶校驗(yàn)位來提高數(shù)據(jù)傳輸?shù)恼_性和可靠性。

需要注意的是,奇偶校驗(yàn)位只能檢測(cè)數(shù)據(jù)傳輸過程中的錯(cuò)誤和丟失,而不能保證數(shù)據(jù)的完整性和正確性。因此,在使用UART通信時(shí),還需要采取其他措施來確保數(shù)據(jù)傳輸?shù)恼_性和可靠性。

四、UART的輪詢收發(fā)和中斷收發(fā)

前面我們講過,UART通信就是把一個(gè)字節(jié)的數(shù)據(jù)拆分成若干bit位,然后一個(gè)bit一個(gè)bit的發(fā)送。當(dāng)一個(gè)字節(jié)的數(shù)據(jù)被送進(jìn)UART發(fā)送器后,這個(gè)字節(jié)被轉(zhuǎn)換成bit位,UART發(fā)送這個(gè)字節(jié)后還要產(chǎn)生停止位,此時(shí)UART發(fā)送器已經(jīng)空閑,可以繼續(xù)發(fā)送下一個(gè)字節(jié)。通常UART發(fā)送器發(fā)送完一個(gè)字節(jié)后會(huì)產(chǎn)生一個(gè)空閑狀態(tài),輪詢式發(fā)送就是等待這個(gè)空閑狀態(tài)并發(fā)送下一個(gè)字節(jié)。UART接收也是如此,UART接收器收完一個(gè)字節(jié)并收到停止位信號(hào)時(shí),就會(huì)向單片機(jī)的UART數(shù)據(jù)寄存器保存剛收到的數(shù)據(jù),并產(chǎn)生一個(gè)收到標(biāo)志位,輪詢?cè)摌?biāo)志位就可以接收到該字節(jié)數(shù)據(jù)。

但是在單片機(jī)系統(tǒng)中經(jīng)常不止UART收發(fā)應(yīng)用,這時(shí)就要用到中斷收發(fā)。通常單片機(jī)的UART收發(fā)都有RX收到中斷和TX完畢中斷。中斷發(fā)送時(shí),UART發(fā)送器是空閑狀態(tài),此時(shí)往發(fā)送器里面寫入第一個(gè)字節(jié),該字節(jié)傳輸完畢后產(chǎn)生TX完畢中斷,在TX完畢中斷的服務(wù)函數(shù)中再填入后續(xù)字節(jié)并產(chǎn)生下一個(gè)中斷,最后直到把需要傳輸?shù)淖止?jié)都傳完為止。中斷接收時(shí),UART接收器收到字節(jié)后會(huì)產(chǎn)生RX收到中斷,在RX收到中斷服務(wù)函數(shù)中讀取收到的字節(jié),每次中斷時(shí)都讀取收到的字節(jié)。


一文講透UART通信工作原理

五、帶數(shù)據(jù)緩存的UART收發(fā)

在很多單片機(jī)系統(tǒng)中,都會(huì)提供UART Read和UART Write這樣的接口函數(shù)。一些高級(jí)的單片機(jī)甚至還有UART Read Callback和UART Write Callback這樣的回調(diào)函數(shù)來收發(fā)數(shù)據(jù)。通常很多單片機(jī)的數(shù)據(jù)處理能力相對(duì)UART通信來說要快得多,因此像采用上述接口函數(shù)的單片機(jī)系統(tǒng)都使用了數(shù)據(jù)緩存來輔助UART收發(fā)。常見的UART收發(fā)方式有這幾種:

數(shù)據(jù)隊(duì)列(Queue)收發(fā):

這種方式適合大多數(shù)單片機(jī),只要有中斷就行。使用UART Write發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)并不是直接寫入到UART發(fā)送器,而是放進(jìn)了一個(gè)環(huán)形緩沖區(qū)中。然后在UART TX發(fā)送完畢中斷服務(wù)函數(shù)中讀取環(huán)形緩沖區(qū)并把讀到的字節(jié)送入U(xiǎn)ART發(fā)送器,然后等待TX發(fā)送完畢中斷服務(wù)函數(shù)再次執(zhí)行時(shí)送入下一個(gè)字節(jié),直到把環(huán)形緩沖區(qū)的數(shù)據(jù)送完為止。環(huán)形緩沖區(qū)通常有一個(gè)標(biāo)記頭和尾的變量,只要頭和尾的變量值不相等就說明緩沖區(qū)有數(shù)據(jù)。使用UART Read接收數(shù)據(jù)時(shí),也不是直接從UART接收器中獲取數(shù)據(jù),而是從環(huán)形緩沖區(qū)中獲取數(shù)據(jù)。UART RX收到中斷服務(wù)函數(shù)中把UART接收器收到的字節(jié)送進(jìn)環(huán)形緩沖區(qū),單片機(jī)執(zhí)行UART Read時(shí)獲取到的數(shù)據(jù)是環(huán)形緩沖區(qū)的數(shù)據(jù),這樣可以保證單片機(jī)程序不用一直等待UART接收器。這種設(shè)計(jì)的優(yōu)點(diǎn)是可以有效地處理實(shí)時(shí)數(shù)據(jù),避免了數(shù)據(jù)的丟失。但是,如果Queue的大小設(shè)置不當(dāng),可能會(huì)導(dǎo)致數(shù)據(jù)的溢出。因此,我們需要根據(jù)實(shí)際的應(yīng)用場(chǎng)景來合理地設(shè)置Queue的大小。

帶硬件FIFO的UART收發(fā)

很多先進(jìn)的單片機(jī)的UART收發(fā)用上了硬件FIFO。沒有硬件FIFO的單片機(jī)在收發(fā)數(shù)據(jù)時(shí)每收發(fā)一個(gè)字節(jié)就要執(zhí)行一次中斷函數(shù),在高波特率通信時(shí)單片機(jī)會(huì)頻繁進(jìn)入中斷,從而影響單片機(jī)主任務(wù)的處理。而硬件FIFO則可以緩解這種矛盾。例如單片機(jī)的UART FIFO是16字節(jié),單片機(jī)在發(fā)送數(shù)據(jù)時(shí)一次最多可以傳輸16字節(jié)數(shù)據(jù),等16字節(jié)數(shù)據(jù)發(fā)送完畢后才產(chǎn)生UART TX發(fā)送完畢中斷。接收數(shù)據(jù)時(shí)通常是“半滿”中斷和“超時(shí)”中斷,即接收FIFO中的字節(jié)數(shù)超過8字節(jié),或者接收FIFO不為空但是超過1字節(jié)的時(shí)間內(nèi)沒有收到新的字節(jié)數(shù)據(jù),產(chǎn)生一次UART RX接收中斷。通常帶硬件FIFO的UART會(huì)和數(shù)據(jù)隊(duì)列的方式相結(jié)合使用,在高波特率通信下傳輸效率更高。

DMA的UART收發(fā)

DMA(Direct Memory Access)是一種可以將計(jì)算機(jī)的某個(gè)存儲(chǔ)區(qū)域直接映射到內(nèi)存地址空間的技術(shù),從而實(shí)現(xiàn)對(duì)內(nèi)存和其他外設(shè)的統(tǒng)一訪問。當(dāng)UART接收到數(shù)據(jù)時(shí),數(shù)據(jù)會(huì)被直接寫入到DMA控制的內(nèi)存區(qū)域中,然后觸發(fā)中斷。在中斷服務(wù)程序中,我們可以從DMA控制的內(nèi)存區(qū)域中取出數(shù)據(jù),進(jìn)行必要的處理,然后再通過UART發(fā)送出去。


一文講透UART通信工作原理

DMA傳輸

使用DMA進(jìn)行UART傳輸對(duì)連續(xù)多條數(shù)據(jù)的傳輸幫助特別大,例如前面提到的UART Read Callback和UART Write Callback回調(diào)函數(shù)的方式。連續(xù)發(fā)送多條數(shù)據(jù)流時(shí),可以把數(shù)據(jù)流放在單片機(jī)的多個(gè)不同的緩沖區(qū),然后DMA直接指向緩沖區(qū)地址,待DMA傳輸完畢后產(chǎn)生UART Write Callback,然后在UART Write Callback中把DMA指向下一個(gè)緩沖區(qū)地址。接收數(shù)據(jù)時(shí)也可以預(yù)約一個(gè)接收緩沖區(qū),DMA傳輸?shù)臄?shù)據(jù)傳輸?shù)皆摼彌_區(qū),傳輸滿了后產(chǎn)生UART Read Callback再指向下一個(gè)接收緩沖區(qū),同時(shí)可以讓單片機(jī)主程序處理已收滿數(shù)據(jù)的緩沖區(qū)的內(nèi)容。

UART協(xié)議的應(yīng)用場(chǎng)景:

UART協(xié)議廣泛應(yīng)用于各種設(shè)備之間的通信,如計(jì)算機(jī)與外設(shè)(鼠標(biāo)、鍵盤、打印機(jī)等)、嵌入式系統(tǒng)與傳感器、微控制器之間的通信等。由于其簡(jiǎn)單性和普遍性,UART協(xié)議在串行通信中占有重要地位。

總結(jié):

UART協(xié)議以其簡(jiǎn)單、靈活和易于實(shí)現(xiàn)的特點(diǎn),在串行通信領(lǐng)域得到了廣泛的應(yīng)用。盡管在高速數(shù)據(jù)傳輸方面可能不如一些同步通信協(xié)議,但UART協(xié)議在許多低速通信場(chǎng)景中仍然是首選方案。隨著技術(shù)的發(fā)展,UART協(xié)議也在不斷地進(jìn)行改進(jìn)和擴(kuò)展,以滿足現(xiàn)代電子系統(tǒng)的需求。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉