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

STM32F407的CAN通讯接收长数据问题

[复制链接]
yyjyyj 提问时间:2023-10-16 20:25 / 已解决

我想使用STM32F407的CAN通讯来接收六维力传感器的力信息,但是这个信息长度有31个字节,当STM32发送请求力信息的命令时,传感器采集卡一次性就发出4帧的数据帧,使接收FIFO溢出。想利用CAN_IT_RX_FIFO0_MSG_PENDING中断在接收到第一帧数据时就进中断,但是用keil调试的时候每次进中断时FIFO就已经数据溢出了,求大神给个解决思路。

收藏 评论4 发布时间:2023-10-16 20:25

举报

4个回答
butterflyspring 回答时间:2023-10-17 12:02:58
楼主是想用空余的FIFO做硬件缓冲,避免数据很快溢出。

但是在调试时是不能用中断断点,因为接收的数据不会因断点而停下。

可以测试一下从中断发生到FIFO释放大约多长时间,是否来得及。
如果来不及的话,释放一个FIFO后,要即可查查是否FIFO中此时又收到数据以及避免再次中断。
此时在中断服务函数里要小心处理。
xmshao 回答时间:2023-10-17 09:56:43
还有就是,我们库的CAN中断处理程序因考虑的点比较多、比较全面,代码稍显啰嗦。
我们可以根据具体应用对CAN接收中断服务程序可以针对性地调整。



另外,CAN的速率是否可以考虑放慢一点,给接收端CPU相对充裕的时间来处理接收数据。
xmshao 回答时间:2023-10-17 09:46:43
你现在31个数据负载,经典CAN每次最多8个数据,那么发送端往往就
是一连串数据的连续发送。


你接收时恐怕就不能让CPU停在接收中断里哦。否则后来的数据
可能就覆盖溢出了。


你的接收中断要做快速处理,快进快出。进去后把msg取走后
赶紧退出。全部接收完成后来处理数据。
废鱼 回答时间:2023-10-17 14:56:55

使用CAN中断接收数据,中断中只对CAN数据进行接收。在CAN协议层使用多包协议,可以参考各种多包或者自己定义多包的规则协议。这样外部只需要处理队列中的数据,通过协议进行数据包整合。

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版