Uart接口的详细解释
我面试的时候一般喜欢问应聘者一个问题: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。所以示波器抓的波形对应的比特流是:
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 字节与示波器上测量到的高低电平信号完美相符。
上一篇:电容之超级电容简易测试方法
下一篇:DDS正弦信号发生器
推荐阅读最新更新时间:2024-11-13 06:09
- EVALLEDILD2111E1,基于ILD2111数字DC/DC降压控制器的演示系统
- 使用 California Eastern Laboratories 的 ZICM3588SP2-1C-R 的参考设计
- 使用 TC7116 模数转换器开发欠范围和超范围信号的典型应用
- SP6641B 3.3V 评估板与 SP6201 LDO 稳压器的典型应用
- 使用 Analog Devices 的 LTM8003-3.3IY 的参考设计
- LTC1174 低噪声 3V 降压型稳压器的典型应用电路
- 14 位、125 MSPS 四通道 ADC,具有通过后数字求和增强的 SNR
- STGAP2HSCM隔离4A单栅极驱动器的演示板
- AM1D-2405S-RZ 5V 1W DC-DC 转换器的典型应用
- EVAL-AD5327DBZ,用于 AD5327 12 位、四通道、电压输出数模转换器 (DAC) 的评估板