03-嵌入式原理圖入門-UART

什么是串口?

UART(Universal Asynchronous Receiver/Transmitter),即通用異步收發(fā)傳輸器,簡稱串口。

抓取日志、還有很多的外設(shè)也是用串口進行通訊,例如GPS模塊、藍牙模塊、電表、鎖板等


串口硬件及原理圖

串口內(nèi)部結(jié)構(gòu)

以s3c2440為例,其串口內(nèi)部結(jié)構(gòu)如下:

串口內(nèi)部結(jié)構(gòu)

從圖可知,串口內(nèi)部由以下單元組成:

baud-rate generator(波特率生成器), transmitter(發(fā)送器), receiver(接收器), control unit(串口控制單元)。

發(fā)送器和接收器都包含有FIFO(先入先出緩沖區(qū))和Shifter(移位器)

工作流程:

程序預先通過串口控制單元設(shè)置波特率,由波特率發(fā)生器產(chǎn)生相應時鐘,當cpu給串口發(fā)送數(shù)據(jù)時,程序?qū)?shù)據(jù)寫入內(nèi)存,通過interrupt 或者 DMA方式寫進FIFO,Transmit Shifter移位器每次從FIFO中取出1bit數(shù)據(jù)發(fā)送出去(TX);反之,串口給cpu發(fā)送數(shù)據(jù)時,Receive Shifter讀取RX信號,每次寫1bit數(shù)據(jù)給FIFO,隨后通過interrupt 或者 DMA方式寫進內(nèi)存由cpu處理數(shù)據(jù)



串口根據(jù)硬件接入方式

常用的有TTL、RS232、RS485三種

TTL:

TTL示意圖

TTL:全雙工(邏輯1: 2.4V--5V?? 邏輯0: 0V--0.5V),傳輸距離短,用于MCU之間通信,傳輸距離通常1m左右。

RS232:

232示意圖

RS-232:全雙工(邏輯1:-15V--5V? 邏輯0:+3V--+15V),傳輸距離可達15m左右,常用于MCU與PC間通訊,

由于MCU使用的是TTL電平,PC使用232電平,為此之間需要接入電平轉(zhuǎn)換芯片。

RS485:

485示意圖


RS485:半雙工、(邏輯1:+2V--+6V? 邏輯0: -6V---2V)這里的電平指AB 兩線間的電壓差,采用AB雙絞線差分信號傳輸,抗干擾強,傳輸距離遠,可達1KM左右。

由于485采用差分傳輸,因此485是半雙工傳輸,不能同時收發(fā),因此,需要使能DE/RE 達到切換發(fā)送/接收,通常有如下兩種方式:

GPIO使能:

485原理圖接線(一)

如上圖所示,GPIO_RX485_CTL輸出電平使能DE/RE

硬件使能:

485原理圖接線(二)
MAX485真值表

如上圖所示,UART_EE_C_TX作為發(fā)送端TX,又作為控制腳使能DE/RE,查看MAX485真值表可知,

UART_EE_C_TX為1,DE=RE=0,DI=1,485此時輸出為高阻態(tài),接收端AB電平由外部電路即R79對VDDAO分壓決定,此時為高電平;

UART_EE_C_TX為0,DE=RE=1,DI=0,485此時AB輸出 -6V---2V,接收端AB此時為低電平。


串口通訊協(xié)議

串口參數(shù)?

串口參數(shù)


串口參數(shù)由波特率、數(shù)據(jù)位、校驗位、停止位、流控組成

數(shù)據(jù)格式

串口通信數(shù)據(jù)格式


起始位:上位機發(fā)出低電平0并維持一段時間,表示傳輸開始,下位機接收到0準備開始通訊;

波特率:指每秒最大可發(fā)送多少位數(shù)據(jù),確定了串口通信周期;

數(shù)據(jù)位:指一幀數(shù)據(jù)中有效數(shù)據(jù)有多少位;校驗位:用于對數(shù)據(jù)的完整性校驗,可設(shè)置奇校驗、偶校驗和無校驗,比如發(fā)送0001 0000這個數(shù)據(jù),若采用偶校驗,則這個校驗位寫1,保證有偶數(shù)個“1”,反之,采用奇校驗則這個校驗位寫0,保證有奇數(shù)個“1”;

停止位:可設(shè)置1/1.5/2位,當一幀數(shù)據(jù)發(fā)完后,發(fā)出高電平并維持一段時間,表示1幀數(shù)據(jù)傳輸結(jié)束;

流控:當發(fā)送和接收端處理串口數(shù)據(jù)速度有較大差別時,會造成數(shù)據(jù)沒有被及時讀取而丟失,此時可通過軟件或硬件的方式來控制數(shù)據(jù)發(fā)送的速度,即為流控。

硬件流控需要在TX、RX外再額外接入RTS/CTS兩條線,當接收端串口控制器FIFO數(shù)據(jù)快滿時,接收端串口控制通過使能RTS告知發(fā)送端數(shù)據(jù)還沒處理完,請稍等,當接收端FIFO數(shù)據(jù)被處理及時時,接收端串口控制器發(fā)送CTS告知發(fā)送端數(shù)據(jù)已被處理,你可以接著發(fā)送數(shù)據(jù)了!軟件流控不需要額外接線,接收端程序通過TX發(fā)送數(shù)據(jù)告知發(fā)送端先別發(fā)送或接著繼續(xù)發(fā)送,這種方式雖然不需要額外接線,但是這種通知方式本身也占用了串口數(shù)據(jù)。

串口時序

串口時序

上位機發(fā)送端空閑時,其TX維持高電平

上位要發(fā)送數(shù)據(jù)時,將其TX由高電平拉低,并維持1bit時間,下位機RX被中斷收到起始信號,準備接收數(shù)據(jù),這一位即起始位;

上位機根據(jù)設(shè)置的數(shù)據(jù)位個數(shù)逐個發(fā)送相應個數(shù)的數(shù)據(jù),下位機在每1/2位的時間采樣一次下位機RX數(shù)據(jù),即端發(fā)送的即數(shù)據(jù)位的數(shù)據(jù);

上位機發(fā)送完數(shù)據(jù)位數(shù)據(jù)后,上位機串口控制器根據(jù)程序設(shè)置的校驗方式補一位1或補一位0(如果設(shè)置了無校驗,這一步跳過)并發(fā)送給下位機RX;

上位機發(fā)送校驗位數(shù)據(jù)后,意味著此幀數(shù)據(jù)發(fā)送完畢,發(fā)送高電平并維持設(shè)置好的相應停止位數(shù)的時間

停止位后上位機被保持高電平,處于空閑狀態(tài),直到下一次傳輸時起始位被拉低。

上圖,為1位起始位,8位數(shù)據(jù)位,偶校驗,1位停止位,發(fā)送0001 0000數(shù)據(jù)時序圖,有助理解以上內(nèi)容

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容