打印
[STM32H7]

STM32H750 FDCAN发送异常

[复制链接]
710|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2022-10-25 09:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

使用特权

评论回复
沙发
两只袜子| | 2022-10-25 09:57 | 只看该作者
本帖最后由 两只袜子 于 2022-10-25 09:59 编辑

检查一下是不是CAN波特率的问题或者CAN总线的问题

使用特权

评论回复
板凳
t1ngus4| | 2022-10-27 10:36 | 只看该作者
听你描述,好像是这么回事儿

使用特权

评论回复
地板
dalarang| | 2022-10-27 13:05 | 只看该作者
是CAN发送后没收到目标机的ACK应答,所以视为发送失败反复重发

使用特权

评论回复
5
g0d5xs| | 2022-10-28 12:04 | 只看该作者
我不是很理解,就你ST例程稍微修改一下,生成的就有问题,你有cubemx生成的就没问题了?

使用特权

评论回复
6
SantaBunny| | 2022-11-3 19:56 | 只看该作者
你cubemx生成没有问题吗

使用特权

评论回复
7
MessageRing| | 2022-11-4 19:14 | 只看该作者
是不是CAN波特率的问题?

使用特权

评论回复
8
Jacquetry| | 2022-11-5 16:36 | 只看该作者
CAN发送后没收到目标机的ACK应答吗?

使用特权

评论回复
9
jcky001| | 2022-12-26 09:12 | 只看该作者
结合你的问题描述,我查看了手册,觉得你的分析是有道理的。基于接口时钟域和CAN内核时钟域的数据交互时
有个同步环节,你当初的30MHz/80MHz时钟应该同步不好而导致异常,当你改成40MHz/80MHz时而正常。具体应用真是林林总总,各式各样。

使用特权

评论回复
10
cr315| | 2022-12-26 09:12 | 只看该作者
楼主看一下CAN的配置是否开启重新发送的设置。发生这种情况,可以查看CAN的发送错误计数器。如果一直增加,说明是由于CAN波特率的问题或者CAN总线的问题,ST收不到对方的ACK后,重新发送导致。

使用特权

评论回复
11
麻花油条| | 2022-12-26 09:14 | 只看该作者
没有配置自动重新发送,查看错误寄存器,并没有错误计数器在增加,波特率应该是正确的,上位机接收也都正常。
还是倾向于不同时钟域数据同步的问题,APB1频率15MHz,FDCAN频率40MHz的情况下,只是在之前的测试条件下不会再自动一直往外发数据了,但是修改了发送接收fifo和ram个数,问题又出现了,最后将FDCAN时钟也改为了15MHz,经过多项测试,暂时不在出现问题了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

970

主题

2982

帖子

7

粉丝