STM32/STM8技术论坛
直播中

白纸扇

7年用户 59经验值
擅长:嵌入式技术 处理器/DSP 控制/MCU
私信 关注
[问答]

关于CAN总线有个问题想请教下大家

就是我现在用的是一个主机来控制3个从机。程序流程是主机发送一个广播消息,3个从机接收到消息后执行相关功能,执行完后 3个从机分别给主机发送一个消息证明已经执行完了,然后主机接收完这3个消息后再发一个广播消息,让3个从机继续执行,就这样一直循环。现在的问题是 我把接收消息的程序放到了定时器中断里,10ms读取一次,发现有时候从机就停止执行功能了,我用串口打印的方式查找错误发现是主机这边有时候会接收不到个别从机的数据,但是从机是发送正常的。所以应该是3个从机发送的数据冲突了,导致主机漏掉了数据。我目前的解决办法是让主机接收到哪个从机的数据后就给那个从机发送消息说不用发送了。现实情况是之前的从机偶尔停止情况改善很多,但是还是有,我实在没有办法了,想来求助下大家1.jpg
2.jpg

3.jpg

回帖(4)

杨先生

2022-9-15 16:41:58

最佳答案

中断接收处理。
1 举报
  • 白纸扇: 感谢老哥的回复了,我现在采用的是中断接收,但是 一对一能正常接收,一旦一对三就接收失败了,不知道啥原因

白纸扇

2022-9-15 16:43:17
这个是从机程序
举报
  • 5.jpg
  • 5.jpg

杨先生

2022-9-22 10:56:14
这才是中断接收。你那个只是检查了接收的标记位。需要配置
1、CAN 接收中断优先级,尽量高一些。
2、CAN 接收中断使能
3、产生中断后,在中断中立即读取并解析。(如果解析时间较长,就要挪出来到app中)
1 举报
  • 白纸扇: 我已经不采用我发的图里的轮询方案了,换了这个接收中断,还是会有偶尔接收不到消息的情况
  • Snipaste_2022-09-22_10-52-33.png

杨先生

2022-9-23 11:41:00
确认以下几个方面:
1、CAN时序配置是否合理。(包括单片机时钟是否稳定,不要用内部时钟源,尽量使用有源晶振)
2、硬件是否存在严重干扰(PCB布局布线、外部接线等)
3、中断处理是否耗费较多时间
4、是否存在同时接收很多消息情况(如有,还需要创建一个队列接收缓冲)
2 举报
  • 杨先生: 通讯都会存在传输错误,但极少。虽然极少,但应建立重发机制和确认机制。以防止关键命令或数据传输失败。
  • 白纸扇 回复 杨先生: 感谢老哥的指点,学习了

更多回帖

发帖
×
20
完善资料,
赚取积分