请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H750 FDCAN发送异常

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

举报

5个回答
xmshao 回答时间:2021-5-8 15:42:54
结合你的问题描述,我查看了手册,觉得你的分析是有道理的。基于接口时钟域和CAN内核时钟域的数据交互时
有个同步环节,你当初的30MHz/80MHz时钟应该同步不好而导致异常,当你改成40MHz/80MHz时而正常。具体应用真是林林总总,各式各样。
废鱼 回答时间:2021-5-8 15:51:41
楼主看一下CAN的配置是否开启重新发送的设置。发生这种情况,可以查看CAN的发送错误计数器。如果一直增加,说明是由于CAN波特率的问题或者CAN总线的问题,ST收不到对方的ACK后,重新发送导致。
Xingou 回答时间:2021-5-10 09:28:04
没有配置自动重新发送,查看错误寄存器,并没有错误计数器在增加,波特率应该是正确的,上位机接收也都正常。
还是倾向于不同时钟域数据同步的问题,APB1频率15MHz,FDCAN频率40MHz的情况下,只是在之前的测试条件下不会再自动一直往外发数据了,但是修改了发送接收fifo和ram个数,问题又出现了,最后将FDCAN时钟也改为了15MHz,经过多项测试,暂时不在出现问题了。
ZHANGYONGHAI 回答时间:2022-10-21 21:18:54
HAL_FDCAN_AddMessageToTxFifoQ(fdcanH, &TxHeader, _DataBuf)
每秒大概8次,发送两万到三万次的时间就报错,停止发送
hfdcan1.ErrorCode=HAL_FDCAN_ERROR_FIFO_FULL
Get element from empty FIFO
有没人遇到过,有时重上电还会死机

xyzjacky 回答时间:2022-12-20 17:07:51
ZHANGYONGHAI 发表于 2022-10-21 21:18
HAL_FDCAN_AddMessageToTxFifoQ(fdcanH, &TxHeader, _DataBuf)
每秒大概8次,发送两万到三万次的时间就报错 ...

我们最近的项目也遇到了。和你的问题基本一样,不知道楼主,你的问题解决没有。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版