完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用基于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 函数。 能否就繁忙状态的可能原因分享一些建议? 或者,有没有一种方法可以在传输失败时重置消息对象,例如清除忙碌状态和消息数据等,为下一轮的传输做好准备? |
|
相关推荐
1个回答
|
|
XMC_CAN_STATUS_BUSY是由于CAN模块正在忙于处理之前的传输而导致的。这可能是因为CAN模块的发送FIFO已满,或者CAN总线上存在其他活动。
要逃脱这个状态,您可以采取以下几个步骤: 1. 检查CAN总线负载:确保CAN总线上的负载不会超过总线的容量。这可以通过检查其他设备是否在同一总线上进行通信来实现。 2. 增加发送FIFO的大小:如果发送FIFO经常满,您可以尝试增加FIFO的大小,这样可以提供更多的缓冲区来存储待发送的消息。 3. 检查CAN错误:检查CAN总线上是否存在错误,例如仲裁丢失或错误传输等。这些错误可能会导致CAN模块处于忙碌状态。 4. 调整发送频率:如果您的发送频率过高,可以尝试降低发送频率,以减少CAN模块的负载。 5. 检查硬件连接:请确保CAN总线连接正确,插头和电缆都正常。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
72 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
509 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
546 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
545 浏览 0 评论
1008 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11762 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 11:36 , Processed in 0.524093 second(s), Total 43, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号