www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

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

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

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

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

二、UART的波特率

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

串口傳輸數(shù)據(jù)的波特率是單片機(jī)的時(shí)鐘系統(tǒng)來(lái)產(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。

常見(jiàn)的波特率有2400、4800、9600、19200、38400、57600、115200……它們都可是2400的整數(shù)倍,因此不同的波特率可以通過(guò)分頻器來(lái)產(chǎn)生?,F(xiàn)在的單片機(jī)雖然都有著不同的頻率,常見(jiàn)的有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。

當(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ù)傳輸過(guò)程中的錯(cuò)誤和丟失。在UART通信中,可以通過(guò)設(shè)置奇偶校驗(yàn)位來(lái)提高數(shù)據(jù)傳輸?shù)恼_性和可靠性。

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

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

前面我們講過(guò),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ā)送器里面寫(xiě)入第一個(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é)。

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

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

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

這種方式適合大多數(shù)單片機(jī),只要有中斷就行。使用UART Write發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)并不是直接寫(xiě)入到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)記頭和尾的變量,只要頭和尾的變量值不相等就說(shuō)明緩沖區(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)景來(lái)合理地設(shè)置Queue的大小。

我們今天要介紹的UART,全稱Universal Asynchronous

Receiver/Transmitter,通用異步收發(fā)傳輸器。使用TTL電平信號(hào),和電腦的COM口(遵循RS-232)不同。它們之間不能直接通訊,需要在之間加入轉(zhuǎn)換器(如MAX232)。

Tips:

采用二進(jìn)制來(lái)表示數(shù)據(jù)時(shí):

TTL(晶體管-晶體管邏輯電平)電平信號(hào)規(guī)定,+5V等價(jià)于邏輯“1”,0V等價(jià)于邏輯“0”。

RS-232規(guī)定邏輯“1”的電平為-5V~-15 V,邏輯“0”的電平為+5 V~+15 V

UART工作原理:

和其它串口一樣,數(shù)據(jù)按照二進(jìn)制從低位到高位一位一位的傳輸,能將要傳輸?shù)臄?shù)據(jù)在串行通信與并行通信之間加以轉(zhuǎn)換,能夠靈活地與外部設(shè)備進(jìn)行全雙工數(shù)據(jù)交換。例如要傳輸一個(gè)字節(jié)的數(shù)據(jù)10001110,它是從低位0開(kāi)始,一位一位的傳輸過(guò)去。

在 UART 通信中,兩個(gè) UART 直接相互通信。發(fā)送端將來(lái)自控制設(shè)備(如 CPU)的并行數(shù)據(jù)轉(zhuǎn)換為串行形式,接著將其串行傳輸?shù)浇邮斩耍缓蠼邮斩藢⒋袛?shù)據(jù)轉(zhuǎn)換回并行數(shù)據(jù)以供接收設(shè)備使用。

數(shù)據(jù)從一個(gè)UART的發(fā)送引腳(Tx) 流向另一個(gè)UART的接收(Rx) 引腳:

UART通訊分類(lèi):

單工:UART只用Tx或Rx其中一根線進(jìn)行通訊,也就是只作接收或發(fā)送;

半雙工:UART在同一時(shí)間,只用作發(fā)送或接收;

全雙工:UART在發(fā)送的同時(shí),也可以接收;

UART波特率:

UART的波特率是指每秒傳輸?shù)亩M(jìn)制位數(shù)(單位bps),比如9600bps,意思就是每秒鐘可以傳輸9600個(gè)位(bit)。

例如:設(shè)字符傳輸?shù)乃俾蕿?20字符/秒,而每1個(gè)字符為10位(bit),那么傳送的波特率為:10位/字符 * 120 字符/秒 = 1200 /秒 = 1200bps。那么每1位二進(jìn)制位(bit)的傳送時(shí)間:

T = 1/1200 = 0.833ms

UART要求發(fā)送與接收兩個(gè)UART的波特率配置相同。如果發(fā)送與接收波特率不同,相差很大,接收端采樣點(diǎn)跨過(guò)多個(gè)電平,造成接收丟失,或者造成波特率不匹配,接收失敗,如下圖:

常見(jiàn)的波特率有9600、115200、128000、256000等。

通訊過(guò)程:

UART屬于異步傳輸數(shù)據(jù),這意味著沒(méi)有時(shí)鐘信號(hào)將發(fā)送的位輸出與接收的位采樣同步,也就是發(fā)送與接收使用各自的時(shí)鐘。發(fā)送端將開(kāi)始和停止位添加到傳輸?shù)臄?shù)據(jù)幀中,通過(guò)數(shù)據(jù)幀中定義的開(kāi)始位和結(jié)束位,接收端知道何時(shí)開(kāi)始讀取這些位。

每個(gè)數(shù)據(jù)幀包含 1 個(gè)起始位、5 到 9 個(gè)數(shù)據(jù)位(取決于 UART的設(shè)置,如果有奇偶校驗(yàn)位是5到8,沒(méi)有則是5到9)、一個(gè)可選的奇偶校驗(yàn)位和 1 個(gè)或 2 個(gè)停止位:

起始位:UART 數(shù)據(jù)傳輸線在不傳輸數(shù)據(jù)時(shí)通常保持在高電平。要開(kāi)始發(fā)送數(shù)據(jù)時(shí),發(fā)送端UART先在一個(gè)時(shí)鐘周期內(nèi)將傳輸線從高電平拉到低電平。當(dāng)接收端UART 檢測(cè)到從高到低的電壓轉(zhuǎn)換時(shí),它開(kāi)始以設(shè)置好的波特率的頻率讀取數(shù)據(jù)幀中的位。

數(shù)據(jù):數(shù)據(jù)幀包含正在傳輸?shù)膶?shí)際數(shù)據(jù)。如果使用奇偶校驗(yàn)位,它可以是 5 位到 8 位。如果不使用奇偶校驗(yàn)位,則數(shù)據(jù)幀可以是 9 位。在大多數(shù)情況下,首先發(fā)送的數(shù)據(jù)是最低有效位。

校驗(yàn):奇偶校驗(yàn)位是接收端UART 判斷數(shù)據(jù)在傳輸過(guò)程中是否發(fā)生變化的一種方式。位會(huì)因電磁輻射、不匹配的波特率或長(zhǎng)距離數(shù)據(jù)傳輸而發(fā)生改變。接收端 UART 讀取數(shù)據(jù)幀后,檢查數(shù)據(jù)部分值為1的個(gè)數(shù)是奇數(shù)還是偶數(shù)。當(dāng)奇偶校驗(yàn)位與數(shù)據(jù)匹配時(shí),UART 知道傳輸沒(méi)有錯(cuò)誤。

停止:發(fā)送端UART 將數(shù)據(jù)傳輸線從低電平拉到高電平持續(xù)至少兩個(gè)位的時(shí)間來(lái)表示整個(gè)數(shù)據(jù)包的傳輸已經(jīng)結(jié)束。

發(fā)送接收過(guò)程:

1.UART 從數(shù)據(jù)總線并行接收數(shù)據(jù):

2.發(fā)送 UART 將起始位、奇偶校驗(yàn)位和停止位添加到數(shù)據(jù)幀:

3.整個(gè)數(shù)據(jù)包從發(fā)送 UART 串行發(fā)送到接收 UART。接收 UART 以預(yù)配置的波特率對(duì)數(shù)據(jù)線進(jìn)行采樣:

4.接收 UART 丟棄數(shù)據(jù)幀中的起始位、奇偶校驗(yàn)位和停止位:

5.接收端 UART 將串行數(shù)據(jù)轉(zhuǎn)換回并行,并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線:

聲明:該篇文章為本站原創(chuàng),未經(jīng)授權(quán)不予轉(zhuǎn)載,侵權(quán)必究。
換一批
延伸閱讀

本屆年會(huì)將在上海(11月13-14日)、北京(11月19-20日)和深圳(11月27-28日)舉行,面向嵌入式設(shè)計(jì)工程師推出25門(mén)技術(shù)課程

關(guān)鍵字: 嵌入式 MCU 模擬

上海2025年9月5日 /美通社/ -- 由紐倫堡會(huì)展(上海)有限公司舉辦的上海國(guó)際嵌入式會(huì)議將于 2025 年 10 月 16-17 日在上海世博展覽館舉辦。 此次會(huì)議將由三個(gè)版塊組成:嵌入式技術(shù)會(huì)議、汽...

關(guān)鍵字: 嵌入式 CE CHINA EMBEDDED

從外部看,電子系統(tǒng)仿佛一個(gè)統(tǒng)一的學(xué)科或設(shè)備,各組成部分協(xié)同工作,渾然一體。然而揭開(kāi)表象,其內(nèi)在卻是另一番景象:一個(gè)碎片化、多層次的世界——其中每一層都獨(dú)立且復(fù)雜,衍生出各自特有的工具、專(zhuān)家、工作流程,甚至哲學(xué)體系。

關(guān)鍵字: 嵌入式 電子系統(tǒng) 半導(dǎo)體

8位單片機(jī)在嵌入式設(shè)計(jì)領(lǐng)域已經(jīng)成為半個(gè)多世紀(jì)以來(lái)的主流選擇。盡管嵌入式系統(tǒng)市場(chǎng)日益復(fù)雜,8位單片機(jī)依然不斷發(fā)展,積極應(yīng)對(duì)新的挑戰(zhàn)和系統(tǒng)需求。如今,Microchip推出的8位PIC?和AVR?單片機(jī)系列,配備了先進(jìn)的獨(dú)立...

關(guān)鍵字: 單片機(jī) 嵌入式 CPU

深圳2025年8月28日 /美通社/ -- 8月26日,2025 ELEXCON深圳國(guó)際電子展盛大啟幕。本屆大會(huì)以"All for AI"為主題,深圳市德...

關(guān)鍵字: AI 工業(yè)級(jí) SSD 嵌入式

深圳2025年8月26日 /美通社/ -- 8月26日,由博聞創(chuàng)意會(huì)展主辦的 第22屆深圳國(guó)際電子展暨嵌入式展(elexcon2025)在深圳(福田)會(huì)展中心隆重開(kāi)幕。 作為中國(guó)電子與嵌入式技術(shù)領(lǐng)域的專(zhuān)業(yè)大展,本屆展會(huì)...

關(guān)鍵字: 嵌入式 電子 高通 AI

模塊化設(shè)計(jì)作為一種將系統(tǒng)拆分為獨(dú)立、可復(fù)用組件的方法,能夠在低代碼平臺(tái)中實(shí)現(xiàn)功能的靈活組合,并最大限度地提升系統(tǒng)性能。本文將探討如何通過(guò)模塊化設(shè)計(jì),使得低代碼平臺(tái)既能快速適應(yīng)變化,又能保持高效穩(wěn)定的運(yùn)行。

關(guān)鍵字: 模塊化設(shè)計(jì) 嵌入式

CPU親和度通過(guò)限制進(jìn)程或線程可以運(yùn)行的CPU核心集合,使得它們只能在指定的CPU核心上執(zhí)行。這可以減少CPU緩存的失效次數(shù),提高緩存命中率,從而提升系統(tǒng)性能。

關(guān)鍵字: Linux 嵌入式

加密算法分對(duì)稱加密和非對(duì)稱算法,其中對(duì)稱加密算法的加密與解密密鑰相同,非對(duì)稱加密算法的加密密鑰與解密密鑰不同,此外,還有一類(lèi)不需要密鑰的散列算法。

關(guān)鍵字: 算法 嵌入式

從本質(zhì)上講,算法是一種有條不紊、分步驟解決問(wèn)題或完成任務(wù)的方法。無(wú)論是簡(jiǎn)單的數(shù)字相加公式,還是復(fù)雜的機(jī)器學(xué)習(xí)協(xié)議,算法都是軟件應(yīng)用的基礎(chǔ),確保任務(wù)能夠高效有效地執(zhí)行。

關(guān)鍵字: 算法 嵌入式
關(guān)閉