can发送死等邮箱空闲;
前阵子把cubemx升级到5.10了,顺便把F1的HAL库也升级到1.7.0了,结果can部分改动挺大的,can发送总是失败。于是发了个帖子求助,得到朋友们的帮助,解决了。这是当时的帖子:https://www.stmcu.org.cn/module/forum/thread-619585-1-1.html
当时的解决办法是,查询发送邮箱的状态,等到有空的发送邮箱才进行发送。
while(HAL_CAN_GetTxMailboxesFreeLevel(&hcan) == 0);
if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, data, &TxMailbox) != HAL_OK)
Error_Handler()
现在又遇到了问题,有一次无意中can总线上直接了我做的这一块板,结果过一段时间后看门狗复位了。发现好像是在发送那里死等了。
而总线上接上其它can设备,和我这款板子通讯的话,倒是正常,不会看门狗复位。
试了几次,貌似总线上如有有其它can设备的话,就能正常发送。
请教,这个问题出现的缘由及解决办法。
can总线上没设备,报文一直在邮箱里边没发出去,加个等待超时,
建议你再加个队列,配合队列来发送 目前用过的CAN都是这样的,CAN总线上只有一个设备的话,是不允许的,就会出错。
在周立功CAN盒子上就是CAN打开失败。 好奇为什么会发送不出去?can的发送需要接收设备响应吗? 是的,CAN有重发机制,需要硬件应答 本帖最后由 any012 于 2019-3-12 17:28 编辑
谢谢,是个办法。
另,超时后如何操作?清发送邮箱?
超时以后,还是继续进来判断。他一般是有三个发送邮箱。如果都满了。那么就判断是空进入发送,不是则继续退出。这个主要还是代码上的控制逻辑。 本帖最后由 westzg 于 2019-3-13 09:09 编辑
超时以后,此帧被丢弃,继续执行后面的程序,或者下一次发送,设置几十毫秒的超时,我在实际运用中,总线最忙的时候顶多10ms也发送出去了。根据实际情况调整这个超时时间
感谢。
页:
[1]