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

can发送死等邮箱空闲;

[复制链接]
any012 提问时间:2019-3-12 14:01 /
6ST金币
前阵子把cubemx升级到5.10了,顺便把F1的HAL库也升级到1.7.0了,结果can部分改动挺大的,can发送总是失败。
于是发了个帖子求助,得到朋友们的帮助,解决了。这是当时的帖子:https://www.stmcu.org.cn/module/forum/thread-619585-1-1.html

当时的解决办法是,查询发送邮箱的状态,等到有空的发送邮箱才进行发送。
  1. while(HAL_CAN_GetTxMailboxesFreeLevel(&hcan) == 0);
  2.     if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, data, &TxMailbox) != HAL_OK)
  3.         Error_Handler()
复制代码

现在又遇到了问题,有一次无意中can总线上直接了我做的这一块板,结果过一段时间后看门狗复位了。发现好像是在发送那里死等了。
而总线上接上其它can设备,和我这款板子通讯的话,倒是正常,不会看门狗复位。
试了几次,貌似总线上如有有其它can设备的话,就能正常发送。

请教,这个问题出现的缘由及解决办法。

最佳答案

查看完整内容

can总线上没设备,报文一直在邮箱里边没发出去,加个等待超时, 建议你再加个队列,配合队列来发送
收藏 评论10 发布时间:2019-3-12 14:01

举报

10个回答
westzg 回答时间:2019-3-12 14:01:18
can总线上没设备,报文一直在邮箱里边没发出去,加个等待超时,
建议你再加个队列,配合队列来发送

点评

我也是自己做一个消息队列来发送与接收数据的  发表于 2019-3-13 09:18

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

七哥 回答时间:2019-3-12 14:10:48
目前用过的CAN都是这样的,CAN总线上只有一个设备的话,是不允许的,就会出错。
在周立功CAN盒子上就是CAN打开失败。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

any012 回答时间:2019-3-12 14:19:25
好奇为什么会发送不出去?can的发送需要接收设备响应吗?
Johnson Cao 回答时间:2019-3-12 14:29:16
是的,CAN有重发机制,需要硬件应答

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

any012 回答时间:2019-3-12 17:26:28
本帖最后由 any012 于 2019-3-12 17:28 编辑

谢谢,是个办法。
另,超时后如何操作?清发送邮箱?
废鱼 回答时间:2019-3-13 08:49:58
超时以后,还是继续进来判断。他一般是有三个发送邮箱。如果都满了。那么就判断是空进入发送,不是则继续退出。这个主要还是代码上的控制逻辑。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

westzg 回答时间:2019-3-13 09:08:33
本帖最后由 westzg 于 2019-3-13 09:09 编辑

超时以后,此帧被丢弃,继续执行后面的程序,或者下一次发送,设置几十毫秒的超时,我在实际运用中,总线最忙的时候顶多10ms也发送出去了。根据实际情况调整这个超时时间

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

any012 回答时间:2019-3-13 13:45:52
感谢。
Rꫀᦔꫀꪑρtiꪮꪀ 回答时间:2024-1-24 16:08:53

废鱼 发表于 2019-3-13 08:49
超时以后,还是继续进来判断。他一般是有三个发送邮箱。如果都满了。那么就判断是空进入发送,不是则继续退 ...

三个邮箱都满了是会一直卡住嘛?

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版