Uart接口TTL電平詳解


Uart接口的詳細解釋

 

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

 

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

 

簡單來說,區別在於UART是一種接口,而RS232/RS485是一種總線。UART這個接口,后面可以接TTL電平,這就是我們俗稱的普通的串口。而UART如果接了RS232/RS485的轉換芯片,那么后面的總線上就是按照RS232/RS485規則來傳輸數據。RS232/RS485總線的具體規則我們后續再討論,本篇主要詳解TTL下的情況。UARTTTL電平時,+5V等價於邏輯“1”,0V等價於邏輯“0”。

如下例子主要說明一下UARTTTL電平這種方式是怎么傳輸二進制數據的。這是我在項目中的一個例子,用STM32F429Uart4口采集TOF模塊測量得到的距離信息。

UARTRx連接測距模塊TOFTxTOFUART發送了0x32 0x33 0x6d 0x6d 0x0a 五個字節,對應的ASCII碼是23mm,表示測到的距離。

 

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

 

 

 

 

首先,UART的波特率,配置的是9600。對於串口來說,波特率=比特率,所以串口現在比特率為9600,所以每一個bit需要的時間為100us。所以示波器抓的波形對應的比特流是:

00100110010110011001010110110101011011010010100001

 

對於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 字節與示波器上測量到的高低電平信號完美相符。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM