真实面经题目 · 原创解析
UART 波特率怎么算,两端波特率不一致会怎样?
这题考异步串口的时钟误差,回答要说明波特率由外设时钟分频产生,不一致会导致采样漂移、乱码和帧错误。
真实面经题目 · 原创解析
这题考异步串口的时钟误差,回答要说明波特率由外设时钟分频产生,不一致会导致采样漂移、乱码和帧错误。
UART 波特率本质是每秒传输多少个符号,常见配置是用外设时钟经过分频和过采样产生采样时钟。驱动或寄存器配置时会根据 PCLK、目标波特率和过采样倍数计算分频值,例如接收端通常在起始位后按固定间隔采样每一位。两端波特率不一致时,单个位可能还能读对,但采样点会在一帧里逐渐漂移;漂移到靠近边沿甚至跨到相邻位,就会出现乱码、校验错误、停止位检测失败或 framing error。误差容忍度取决于帧长度、过采样、时钟源精度和收发器质量,工程上要让双方数据位、校验位、停止位和波特率一致,尽量使用稳定时钟,并用逻辑分析仪或示波器测实际位宽,而不是只相信软件配置值。
控制器不会天然知道 115200 等速率,而是由外设输入时钟、分频寄存器和过采样逻辑生成。实际速率可能因分频不能整除、晶振误差或时钟树配置错误而偏离目标值。
接收端检测到起始位边沿后,在预估的位中心采样数据位。因为每帧只在起始位同步一次,后续位完全依赖双方波特率足够接近。
如果发送端快、接收端慢,接收采样点会越来越靠后;反之越来越靠前。帧越长,累计误差越明显,最终可能把停止位当数据或跨位采样。
出现乱码时不要只改代码。要确认双方帧格式、实际 PCLK、分频值、晶振误差、线缆质量和电平转换器,并用工具测一位的时间宽度。
高速下每个位时间更短,同样的时钟误差、边沿延迟和线缆畸变占比更大,采样裕量变小。
不一定,还要数据位、校验位、停止位、电平标准、地线、线缆质量和收发方向都一致。
先用示波器或逻辑分析仪确认电平、时序、速率和帧格式,再对照驱动日志、错误码、重试次数和协议状态机,区分硬件连接、配置参数、总线仲裁和软件缓冲问题。