1. UART 空闲状态与帧结构
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)线路在没有发送数据时保持高电平。以最常见的8N1为例:
8:8 位数据位;N:No parity,无校验位;1:1 位停止位。
一帧由以下部分组成:
起始位 + 8位数据 + 停止位因此一帧总长度为:
1 + 8 + 1 = 10 bit起始位固定为低电平,停止位固定为高电平。
2.0x52的二进制表示
0x52 = 0101 0010写成各数据位:
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 0 1 0 1 0 0 1 03. UART 默认是低位先发送
普通 UART 默认使用:
LSB first:Least Significant Bit first,最低有效位先发送所以数据位在线路上的实际发送顺序是:
bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 0 1 0 0 1 0 1 0加上起始位和停止位后,按真实时间顺序应为:
起始位 数据位 停止位 0 0 1 0 0 1 0 1 0 1合起来:
0010010101因此,如果 USART 未配置高位优先,0x52的 8N1 波形应按时间读成:
00100101014. 为什么示波器上可能看到1010100100
示波器画面不一定按照“左边最早、右边最新”显示。应先确认横轴的时间方向。
如果示波器屏幕从左到右显示为:
1010100100但右侧才是最早发生的信号,那么真实时间顺序应从右往左读取:
0 0 1 0 0 1 0 1 0 1也就是:
0010010101这正好符合0x52的低位先发送格式。
所以判断 UART 数据时,不能只看屏幕上的左右排列,必须先确定:
哪一侧是较早时间5. 如何确定一帧的起点
UART 空闲时为高电平,起始位为低电平。因此:
空闲高电平 → 下降到低电平这个下降沿就是候选起始位。
读波形时应执行:
- 找到空闲高电平到低电平的下降沿;
- 把该低电平作为起始位;
- 按每个 bit 的时间间隔依次读取数据位;
- 最后检查停止位是否为高电平。
不要直接从示波器画面的最左边或最右边开始读,必须先找到起始位。
6. 如果配置为高位先发送
USART也可以配置为:
MSB first:Most Significant Bit first,最高有效位先发送此时0x52的数据位顺序变为:
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 0 1 0 1 0 0 1 0完整的8N1时间顺序为:
起始位 + 数据位 + 停止位 0 0 1 0 1 0 0 1 0 1合起来是:
0010100101因此:
低位先发送:0010010101 高位先发送:0010100101两者区别只在于 8 个数据位的顺序,起始位和停止位不变。
7. 结论
看到 UART 波形时,应按下面的顺序判断:
先确定时间方向 → 找到空闲高电平到低电平的下降沿 → 确认起始位 → 根据 LSB/MSB 方向读取数据位 → 检查停止位对于0x52、8N1、默认低位先发送:
真实时间顺序:0010010101如果示波器屏幕显示相反方向,则画面可能显示为:
1010100100这不代表数据错了,而可能只是示波器的时间方向与读取方向相反。