OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2574|回复: 6

关于CAN连续发送3个报文的问题

[复制链接]

2

主题

6

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-9-24
在线时间
1 小时
发表于 2020-4-21 16:29:12 | 显示全部楼层 |阅读模式
1金钱
请问下大哥们,假如我要发送三个报文,只需要填充txdMsg结构体,并调用CAN_Transmit(CAN1, &txdMsg);,循环三次即可,是这样吗?那假如发4个报文,因为只有3个邮箱,所以在第三次调用CAN_Transmit(CAN1, &txdMsg);后需要加检测邮箱空的函数,是这样吗?小白求指导

最佳答案

查看完整内容[请看2#楼]

建议每次发生都检查发送邮箱缓存是否可用,然后就是定周期发送,比如5ms发送一次,每次往邮箱发送一条。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2020-4-21 16:29:13 | 显示全部楼层
建议每次发生都检查发送邮箱缓存是否可用,然后就是定周期发送,比如5ms发送一次,每次往邮箱发送一条。
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14410
金钱
14410
注册时间
2018-8-3
在线时间
1156 小时
发表于 2020-4-21 18:43:31 | 显示全部楼层
对的 循环三次发送   CAN外设一共有2个接收FIFO,每个FIFO中有3个邮箱,即最多可以缓存6个接收到的报文。设置锁定模式,锁定模式下FIFO溢出时会丢弃新报文,非锁定模式下FIFO溢出时新报文会覆盖旧报文
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-9-24
在线时间
1 小时
 楼主| 发表于 2020-4-22 08:41:55 | 显示全部楼层
翼行园子 发表于 2020-4-21 18:43
对的 循环三次发送   CAN外设一共有2个接收FIFO,每个FIFO中有3个邮箱,即最多可以缓存6个接收到的报文。设 ...

谢谢大哥
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-9-24
在线时间
1 小时
 楼主| 发表于 2020-4-22 11:17:48 | 显示全部楼层
365mcu 发表于 2020-4-22 08:32
建议每次发生都检查发送邮箱缓存是否可用,然后就是定周期发送,比如5ms发送一次,每次往邮箱发送一条。

请问检查发送邮箱是否可用的库函数是什么?其次既然检查发送邮箱是否可用了,那么定时发送原则上是不是就可以不用了?这里定时发送只是为了保证通讯的可靠性是吗?
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-9-24
在线时间
1 小时
 楼主| 发表于 2020-4-22 11:37:47 | 显示全部楼层
365mcu 发表于 2020-4-22 08:32
建议每次发生都检查发送邮箱缓存是否可用,然后就是定周期发送,比如5ms发送一次,每次往邮箱发送一条。

CAN_SetMsg(0);  CAN_Transmit(CAN1, &TxMessage);                       
CAN_SetMsg(1);  CAN_Transmit(CAN1, &TxMessage);                                                                                       
CAN_SetMsg(2);  mbox=CAN_Transmit(CAN1, &TxMessage);//连续发送3个报文,获取第三个报文的邮箱号mbox,一般是2号邮箱                                                                                                                         
while(CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed);//等待2号邮箱发送完成
CAN_SetMsg(3);  CAN_Transmit(CAN1, &TxMessage);        //再发送第4个报文       
/***********************************************/
按上面的逻辑有没有问题呢?
回复

使用道具 举报

2

主题

391

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1957
金钱
1957
注册时间
2014-8-8
在线时间
307 小时
发表于 2020-4-22 13:22:34 | 显示全部楼层
a495256807 发表于 2020-4-22 11:17
请问检查发送邮箱是否可用的库函数是什么?其次既然检查发送邮箱是否可用了,那么定时发送原则上是不是就 ...

自己看下有个邮箱非空标志判断的,如果都非空那就不发送即可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 00:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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