一、现象
CAN监控器上出现错误帧。
二、分析过程
1、检查匹配电阻。两端均为120R电阻,全部断电后万用表测量为60R。(60R为最佳匹配电阻)
2、测试发现单独接发送端,将接收端断开,问题消失,锁定问题为接收端问题。
3、经过核查得知,发送端为500K波特率,接收端为250K波特率,导致问题出现。
三、总结
1、匹配电阻需两端120R。
2、总线上只要有一个节点波特率不一致,将导致总线数据传输异常。此次为监控端、发送端为500K,接收端为250K。
四、知识扩充
1、发生“位填充错误”,可能是CAN波形的上升沿/下降沿出现的位置不准确。
如果你用的是内部晶振HSI,很容易出现这种错误,改用外部晶振HSE即可。
内部晶振频率误差在2%以内,外部晶振频率误差要小得多。
一个8字节数据的扩展帧,由128个左右的位(包括ID、校验等)组成,靠后的位的上升沿/下降沿会因为频率误差累积导致其出现的位置不准确,可以用带存储功能的数字示波器分析出来。
2、如果是点对点通信,两个收发器的波特率和位时间配置如果不一样的话,很容易出现这样的问题。
楼主应该已经检查过通信两端的CAN控制器配置,不过还要检查一下两个MCU的主频是否相同、CAN总线的分频是否相同,CAN总线的H/L线有没有接反,已经终端电阻是否已经匹配。