Uart介面的詳細解釋

2021-10-10 19:43:22 字數 1849 閱讀 2062

我面試的時候一般喜歡問應聘者乙個問題:uart與rs232/rs485的區別與聯絡?很多人對於這個問題答得都不是很好。還有些人壓根就沒有想過這個問題,一直認為他們是同乙個東西,就是咱們俗稱的串列埠。

我剛入嵌入式的大門時,對這個問題也困惑過很久,後來終於弄明白了。跟大家一起分享一下吧。

簡單來說,區別在於uart是一種介面,而rs232/rs485是一種匯流排。uart這個介面,後面可以接ttl電平,這就是我們俗稱的普通的串列埠。而uart如果接了rs232/rs485的轉換晶元,那麼後面的匯流排上就是按照rs232/rs485規則來傳輸資料。rs232/rs485匯流排的具體規則我們後續再討論,本篇主要詳解ttl下的情況。uart接ttl電平時,+5v等價於邏輯「1」,0v等價於邏輯「0」。

如下例子主要說明一下uart接ttl電平這種方式是怎麼傳輸二進位制資料的。這是我在專案中的乙個例子,用stm32f429的uart4口採集tof模組測量得到的距離資訊。

uart的rx連線測距模組tof的tx。tof向uart傳送了0x32 0x33 0x6d 0x6d 0x0a 五個位元組,對應的ascii碼是23mm,表示測到的距離。

0x32 0x33 0x6d 0x6d 0x0a 對應的示波器上測到波形如下所示,我們來一起分析一下。

首先,uart的波特率,配置的是9600。對於串列埠來說,波特率=位元率,所以串列埠現在位元率為9600,所以每乙個bit需要的時間為100us。所以示波器抓的波形對應的位元流是:

對於uart,我配置的**如下:

usart_initstructure.usart_baudrate = uart4_baud; //9600

usart_initstructure.usart_wordlength = usart_wordlength_8b;

usart_initstructure.usart_stopbits = usart_stopbits_1;

usart_initstructure.usart_parity = usart_parity_no ;

usart_initstructure.usart_hardwareflowcontrol = usart_hardwareflowcontrol_none;

usart_initstructure.usart_mode = usart_mode_rx | usart_mode_tx;

usart_init(uart4, &usart_initstructure);

所以uart的資料位寬為8bit,再加上起始位0,結束為1.所以位元流分割為如下:

0  0100 1100  1

0  1100 1100  1

0  1011 0110  1

0  1011 0110  1

0  0101 0000  1

考慮硬體匯流排上的資料時序,cpu接收到後的位元序列顛倒:  

0100 1100 顛倒為  0011 0010  即為0x32

1100 1100 顛倒為  0011 0011  即為0x33

1011 0110 顛倒為  0110 1101  即為0x6d

1011 0110 顛倒為  0110 1101  即為0x6d

0101 0000 顛倒為  0000 1010  即為0x0a

完美! 傳送的0x32 0x33 0x6d 0x6d 0x0a 位元組與示波器上測量到的高低電平訊號完美相符。

作為嵌入式軟體工程師,對軟硬體的介面分析到這種程度,一般情況下,就夠用了。

-----------------------------上善若水,大智若愚-----------------------------------

對UART介面的理解

uart是一種通用序列資料匯流排,用於非同步通訊。該匯流排雙向通訊,可以實現全雙工傳輸和接收。在嵌入式設計中,uart用來與pc進行通訊,包括與監控偵錯程式和其它器件,如eeprom通訊。uart通訊 uart首先將接收到的並行資料轉換成序列資料來傳輸。訊息幀從乙個低位起始位開始,後面是7個或8個資...

C 新建頁面的頭部詳細解釋

page language c autoeventwireup true codebehind forestindex.aspx.cs inherits gzly.forestsource.forestindex 學習過asp.net的同學,對上面這句話應該非常熟悉,因為每當我們新建乙個.aspx頁...

認識UART介面

串列埠進行通訊的方式有兩種 同步通訊方式和非同步通訊方式 spi serial peripheral inte ce 序列外設介面 i2c inter ic bus 意為ic之間匯流排 一 host 對多,以位元組為單位傳送。uart universal asynchronous receiver ...