搜索
bottom↓
回复: 12

STM32F4的CAN一次只能连续发送3个报文的问题

[复制链接]

出0入0汤圆

发表于 2019-12-23 11:52:04 | 显示全部楼层 |阅读模式
本帖最后由 JYJT 于 2019-12-23 11:54 编辑

在定时器中断中发送can报文,发现单个can,一次只能发三条。原因是Mailbox只有3个,发送3个时,会把Mailbox全部占用。第3条后面发送的会被全部忽略。目前试过:开周期更短的定时器3ms,主定时器10ms置位2个标志位,在3ms定时器中断里,第一次3ms中断发第一组3条报文,下一次3ms中断里,发送第二组3条报文。但是,第二组只能发出第一条来,后面两条发不出来,第一组3条都发出来了。以上波特率是100k,如果改成500k两组都能发出来。各位有没有遇到类似的问题。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出190入0汤圆

发表于 2019-12-23 12:49:55 | 显示全部楼层
发现没有Mailbox可用时候缓存起来,并且开启can发送完成中断,在中断中从缓存中取出消息发送,直到缓存为空,最后关闭发送完成中断

出0入17汤圆

发表于 2019-12-23 13:08:15 | 显示全部楼层
2楼正解。定时发送的话,需要准确算出每帧耗时都久,比如一次发8字节,一条报文开销+有效数据约128位(可能要更多位)。100kbps的话,1条就要1.28ms,3条就3.76ms。你的程序是不是上一次数据还没发送,新的定时又到来了,又没有判断mailbox是否空闲

出0入0汤圆

发表于 2019-12-23 13:24:09 | 显示全部楼层
用发送完成中断,通知发送管理的任务发一条。或者在while(1)里读TSR的发送邮箱空TME,任何一个空了就发。

出0入0汤圆

 楼主| 发表于 2019-12-23 17:55:05 | 显示全部楼层
APB时钟看错了,实际1.5ms的中断,实测间隔大于2.5ms发送有效,一旦小于等于2.5ms,发送就有问题。。

出280入168汤圆

发表于 2019-12-23 17:59:23 | 显示全部楼层
自己设计一个缓冲器,只要 RAM 够用,多少条都没限制。

出0入0汤圆

发表于 2019-12-23 20:04:40 | 显示全部楼层
肯定要设计缓冲器的,发送任务负责从发送缓冲器读取数据并写入mailbox邮箱。
发送任务如果发现mailbox邮箱为空就暂停几ms再查询,或者用发送中断。
然后其他的任务发送时就把数据发送到缓冲器里面就行了,缓冲器做成环形的。

出40入42汤圆

发表于 2019-12-23 20:09:45 | 显示全部楼层
通信模块的收发一般都设计缓冲器的,可以了解一下

出0入0汤圆

发表于 2019-12-23 22:16:21 | 显示全部楼层
不判断上次发完就发下次?

出0入0汤圆

 楼主| 发表于 2019-12-25 11:32:38 | 显示全部楼层
huangqi412 发表于 2019-12-23 22:16
不判断上次发完就发下次?

没打算拆开HAL的函数,捞出标志来判断,最多用下发送完成的回调函数,但是发送完成的回调是分mailbox的,也就是说共有三个。这样也比较尴尬,得对每一条待发送的报文单独设置一个标志~在每个mailbox里判断待发送标志是否有效,有效就发送,然后复位标志。思路有,但是就不想这么干~

出0入0汤圆

 楼主| 发表于 2019-12-25 11:39:42 | 显示全部楼层
knight_sh 和 chunjun lingdianhao都提到了缓冲器设计,另外还有一个关键词是任务,你们都上了系统了吗?我直接无系统运行,仅仅使用HAL_ADD_TXMESSAGE()函数发送,没有弄过缓冲器设计,缓冲器设计是不是很复杂?另外sbusr直接查询标志位了,一看就是标准库过来的。

出190入0汤圆

发表于 2020-1-3 19:20:13 | 显示全部楼层
JYJT 发表于 2019-12-25 11:39
knight_sh 和 chunjun lingdianhao都提到了缓冲器设计,另外还有一个关键词是任务,你们都上了系统了吗?我 ...

缓冲器跟上不上系统不相关的,常见的实现就是环形队列

出0入24汤圆

发表于 2020-1-3 21:50:38 | 显示全部楼层
我也遇到过这个问题。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 23:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表