60 秒回答模板

UART 波特率本质是每秒传输多少个符号,常见配置是用外设时钟经过分频和过采样产生采样时钟。驱动或寄存器配置时会根据 PCLK、目标波特率和过采样倍数计算分频值,例如接收端通常在起始位后按固定间隔采样每一位。两端波特率不一致时,单个位可能还能读对,但采样点会在一帧里逐渐漂移;漂移到靠近边沿甚至跨到相邻位,就会出现乱码、校验错误、停止位检测失败或 framing error。误差容忍度取决于帧长度、过采样、时钟源精度和收发器质量,工程上要让双方数据位、校验位、停止位和波特率一致,尽量使用稳定时钟,并用逻辑分析仪或示波器测实际位宽,而不是只相信软件配置值。

考点 分频链路
难度 真实面经题
回答目标 证明自己理解异步串口采样机制,并能定位速率不匹配导致的通信异常。

深入解析

01

波特率来自时钟分频

控制器不会天然知道 115200 等速率,而是由外设输入时钟、分频寄存器和过采样逻辑生成。实际速率可能因分频不能整除、晶振误差或时钟树配置错误而偏离目标值。

02

异步接收依赖起始位重新对齐

接收端检测到起始位边沿后,在预估的位中心采样数据位。因为每帧只在起始位同步一次,后续位完全依赖双方波特率足够接近。

03

不一致会累积采样漂移

如果发送端快、接收端慢,接收采样点会越来越靠后;反之越来越靠前。帧越长,累计误差越明显,最终可能把停止位当数据或跨位采样。

04

排查要看实际波形

出现乱码时不要只改代码。要确认双方帧格式、实际 PCLK、分频值、晶振误差、线缆质量和电平转换器,并用工具测一位的时间宽度。

易错点

  • 把波特率说成字节每秒,忽略起始位、停止位和校验位的开销。
  • 认为两端配置同一个数字就一定没有误差,不看实际时钟和分频。
  • 只说会乱码,不解释采样点漂移和帧错误原因。
  • 排查时只看软件,不测实际位宽和波形。

面试官追问

为什么低速能通,高速就乱码?

高速下每个位时间更短,同样的时钟误差、边沿延迟和线缆畸变占比更大,采样裕量变小。

只要波特率一致就一定正常吗?

不一定,还要数据位、校验位、停止位、电平标准、地线、线缆质量和收发方向都一致。

如果板子上通信不稳定,你会怎么定位?

先用示波器或逻辑分析仪确认电平、时序、速率和帧格式,再对照驱动日志、错误码、重试次数和协议状态机,区分硬件连接、配置参数、总线仲裁和软件缓冲问题。