FANYI · ENGINEER INTERVIEW / 嵌入式单片机
STM32与单片机CAN总线面试常考位时间、时间段、采样点、SJW、终端匹配与错误帧。解释参数计算及真实调试顺序。
CAN波特率由CAN内核时钟与位时间总量共同决定,采样点的位置则由位时间分段决定。波特率标称一致但时钟误差、采样点和总线物理层不匹配,仍可能出现错误帧或通信不稳定。
01面试官先考计算逻辑
经典CAN位时间通常划分为同步段、时间段1和时间段2。不同MCU可能用PropSeg、PhaseSeg1、PhaseSeg2或TSEG1/TSEG2等命名,先核对芯片参考手册。对于常见时间量子定义,标称比特率 = CAN外设时钟 ÷ [预分频 × (1+TSEG1+TSEG2)];采样点通常是(1+TSEG1)占整个位时间的百分比。
01确认CAN外设输入时钟,不要把CPU主频直接当CAN时钟。
02根据目标标称位速率枚举预分频和位时间量子总数。
03选择合适采样点,并结合网络长度、传播延迟、节点振荡器偏差和收发器时序核算。
04按芯片文档配置SJW,它是重同步时允许调整的时间量子数量,不是任意增大就更稳定。
05确认CAN控制器处于正常工作模式、收发器供电和STB/EN脚状态。

02为什么总线接上了仍然报错
如果CAN_H/CAN_L接反、两端终端匹配错误、线束分支过长,信号边沿和差分幅度可能劣化。断电后测量总线两线间的等效电阻,两个120 Ω终端并联常约为60 Ω,但实际测得值还受连接拓扑、其他器件影响;此项只是线索。用示波器检查显性/隐性电平、边沿和反射,并结合错误计数器与状态寄存器区分位错误、填充错误等。
03面试参考回答
“我先确认外设时钟,用预分频与位时间分段计算目标波特率,再检查采样点和重同步宽度是否满足网络拓扑。出现错误帧会同时查总线两端终端、收发器状态、波形和错误计数器,避免只修改软件参数。”
04延伸追问
问:采样点是不是越晚越好?答:不是。应在传播延迟与相位误差之间留平衡,并按芯片和网络设计指南选择,不能只为了某个百分比牺牲相位缓冲。

扫码关注






























