串口、COM口、UART口, TTL、RS-232、RS-485区别详解&Uart接口的详细解释【转】 (2)

如下例子主要说明一下UART接TTL电平这种方式是怎么传输二进制数据的。这是我在项目中的一个例子,用STM32F429的Uart4口采集TOF模块测量得到的距离信息。

UART的Rx连接测距模块TOF的Tx。TOF向UART发送了0x32 0x33 0x6d 0x6d 0x0a 五个字节,对应的ASCII码是23mm,表示测到的距离。

0x32 0x33 0x6d 0x6d 0x0a 对应的示波器上测到波形如下所示,我们来一起分析一下。

串口、COM口、UART口, TTL、RS-232、RS-485区别详解&Uart接口的详细解释【转】

首先,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 字节与示波器上测量到的高低电平信号完美相符。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyffgs.html