STM32 标准库实现 CAN 总线收发实战例程(001):CAN总线基础与STM32 CAN外设概述写在前面:一次深夜的CAN调试翻车凌晨两点,示波器探头夹着CAN_H和CAN_L,屏幕上本该出现的显性隐性波形变成了一团乱麻。板子上的STM32F103已经连续发了三小时数据,对面电机驱动器就是不理我。最后发现,CAN总线的终端电阻焊成了120kΩ——对,少了个“k”字。这种低级错误,在CAN调试中其实比想象中更常见。CAN总线看起来简单,两根线、一个差分信号,但真正上手时,波特率配置、采样点位置、过滤器设置、回环模式……任何一个细节翻车,总线就沉默给你看。这篇笔记,就从CAN总线最底层的物理特性讲起,结合STM32的bxCAN外设,把那些容易踩坑的点提前标记出来。CAN总线的物理层:两根线背后的博弈CAN总线使用差分信号传输,CAN_H和CAN_L之间的电压差决定了总线状态。显性位(Dominant)对应逻辑0,CAN_H比CAN_L高约2V;隐性位(Recessive)对应逻辑1,两根线电压几乎相等,差值为0V。这里有个关键点:显性位会覆盖隐性位。也就是说,如果多个节点同时发送,只要有一个节点发送显性位,总线就呈现显性状态。这种“线与”机制是CAN总线仲裁的基础。实际布线时,CAN_H和CAN_L必须双绞,绞距越密抗干扰越好。终端电阻必须接在总线两端,典型值120Ω,作用是匹配阻抗、抑制信号反射。别问我为什么强调“两端”——曾经见过有人只在主控板焊了一个120Ω,从节点全空着,结果总线长度超过1