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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版