最近在调CANopen,用的芯片是STM32H750VBT6,发现按照ST的例程生成简单的测试程序后,只要执行一次发送后,CAN模块就会自动一直往外发送这帧数据,查看寄存器发现发送挂起寄存器一直有标志。
开始以为是配置问题,网上搜索也没有搜到太多相关的信息,之后分别查看了H7-Tool、rtthread和ST官方例程,发现设置并没有问题,后面就重新生成了一个只有CAN模块的代码,这时问题不再出现了,所以再去查之前的版本是否哪些代码导致了这个异常。
最后排查出来,原因是时钟的配置问题,由于其他部分需要,我的APB1时钟配置成了15MHz,而FDCAN1的时钟我用的是80MHz,将FDCAN1时钟改为40MHz后问题消失。(同时测试FDCAN1时钟80M,APB1时钟120M也是正常的)
查看手册可以看到FDCAN是有内核时钟域和APB时钟域两个时钟域,两个时钟域的数据进行交互时需要进行时钟同步
请问是否是之前的时钟配置使得这两个时钟域的同步异常了,所以导致发送挂起寄存器未被清空,从而一直往外发送数据? |