公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

大家好,

我正在使用基于XMC4400 MCU的电路板,并致力于CAN通信。 DAVE 是我用来做这件事的 IDE。

情况是,通信在开始时表现良好,但在发送了几十条CAN消息后,它停止了。 尝试了很多次,但这种行为仍然存在。 经过调试期间的调查,问题发生在 xmc_can_mo_Transmit () 函数中,该函数返回 XMC_CAN_STATUS_BUSY 状态,以下所有传输都停留在相同的原因上。

重置电路板后(我的表达式可能不准确 - 对于我的情况,我的意思是停止/重新启动DAVE中的调试),CAN通信恢复工作,但再次在发送数十条消息后停止XMC_CAN_STATUS_BUSY。

发送的频率为每秒一次,我认为这远非高。 另外,我尝试了不同的CAN设备作为接收器,问题仍然存在,因此我认为这不是连接或接收CAN节点的问题。

我的CAN配置是根据硬件信号连接设置自动生成完成的。 在代码中,CAN通信相关脚本基本上是这样的

 

 

CAN_NODE_0.lmobj_ptr[2]->mo_ptr->can_data_word[0] = a;
CAN_NODE_0.lmobj_ptr[2]->mo_ptr->can_data_word[1] = b;
XMC_CAN_MO_UpdateData(CAN_NODE_0.lmobj_ptr[2]->mo_ptr);
XMC_CAN_MO_Transmit(CAN_NODE_0.lmobj_ptr[2]->mo_ptr);

 

 

在 1 秒间隔内调用 tick 函数。

能否就繁忙状态的可能原因分享一些建议?

或者,有没有一种方法可以在传输失败时重置消息对象,例如清除忙碌状态和消息数据等,为下一轮的传输做好准备?

感谢您的回复。

问候,

 

 

0 点赞
2 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @WeiF

"xmc_can_mo_Transmit () " 函数返回 " XMC_CAN_STATUS_BUSY,"因为在你尝试发送的消息对象中发送了 TXRQ 位。这意味着之前的传输正在进行中,您无法发送显示为忙碌状态的新消息。

要使节点再次参与CAN通信,您需要重置该节点的INIT位。

CAN 请您尝试遵循上述建议并让我们知道结果?

最诚挚的问候,

浅下

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @WeiF

由于长时间处于非活动状态,我锁定了这个话题。 如果有任何新的查询,请随时创建一个新话题。

最诚挚的问候,

浅下

0 点赞