STM32之CAN500K更换到125K奇怪现像 - 杨超 联系客服

发布时间 : 星期一 文章STM32之CAN500K更换到125K奇怪现像 - 杨超更新完毕开始阅读d95bfde4001ca300a6c30c22590102020740f2a7

STM32之CAN500K更换到125K奇怪现像

笔者从4.19着手调试一款AVM的全景测试架,主要功能是模拟原车的车速,雷达,档位,灯光,方向盘转角等信号。通过AVM厂家的信息得知通过 CAN控制,同时得知CAN波特率为125K.。笔者手头有一份DEMO代码,波特率为500K。经确认500K测试架与CAN分析工具是通的则说明我们测试架的硬件是好的。但是我更换成CAN 125K配置后,测试架和CAN分析工具之间不能通迅了。同时笔者确定配置寄存器是按照官方计算公式计算的。是什么导致了此奇怪现像了?匪夷所思了1天,于4.22早上正式调通,本文分享心得。

1. 官方波特率计算公式

Tclk笔者代码设置的是40K

2.笔者500K代码配置

此时测试是通的

2. 笔者首版125K代码配置

同样的计算公司,同一种配置方式,代码和测试盒之间不能通迅的。笔者在此耽搁了大半天,找资料分析寄存器,都没有发现问题 。但测试架的CAN发送总是失败,提示无ACK响应,或者FORM错误。一直没有查到原因。笔者白思不得其解 3. 笔者在即将放弃之余,尝试了其它的配置组合,完美调通

此4字节的值做了变动。通过观察发现BS1 BS2在500K我们设置的值很小,同时PRESCALER设置挺大。但500K是通的,同时官方也没有说这几个值分别有什么限制,只给出了如1所示的计算公式。照理只要满足公司的波特率都应该是通的。但最后发现BS1 BS2如果按500的来,只调节PRESCALER,不能正常通迅。笔者试图调节BS1 BS2,然后再节PRESCALER。然后按1公式重新组盒 。最后发现BS1 BS2调大,PRESCALER调小测试在125K上测试通过。反之则不通。

总结:通过上面实验可知,BS1 BS2 PRESCALER几个寄存值对波特率有不同的表现方式。在低波特率时BS1 BS2可以小些,反之在高波特率时BS1 BS2应该大些。因此得出结论BS1 BS2相位调节段应该跟随波特率调节随着变动。

测公司中的3个

寄存器变量必须随波特率变动,则不能只调节一个寄存器。调节原则是波特率增加BS1 BS2调小。反之BS1 BS2适度增加。最后笔者得出理论依据采样点必须在95%左右。无论寄存器怎么变,采样点必须满足要求。采样点不对是导致一开始调试不通的原因。不同的波特率导致了分频系数的改变。改变了采样点。采样点偏离太多导致通迅失败。以后调试CAN驱动务心首先观注采样点的寄存器配置。而不能只观注计算公式,正确的做法是多者兼顾。