打印

CAN通讯接收发送共同29位码,通讯阻塞

[复制链接]
4705|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jinjing999|  楼主 | 2009-9-2 11:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
两块板子做can通讯测试,两个代码都是一样的,发送的CAN数据也是一样的,并且都同时接受,也同时发送,运行一段时间后,发现两个板子不通讯了,复位一个板子能同时通讯上。
     我修改一个板子上 CAN_TxMessage.ExtId数据,就是两个板子上的29码不同,运行一夜,通讯一直能成功。
    进一步分析问题,如果两个板子都发送同样的ID码( 29位码),CAN通讯会出错,我仿真过了,程序是正常的,在发送数据的时候temp = CAN_Transmit(&CAN_TxMessage);返回数据是temp = CAN_NO_MB,也就是说发送邮箱满了,不能发送了。
    我的问题是,CAN节点都发送同样的ID码,CAN总线会阻塞吗?是什么原因造成阻塞的?
沙发
511| | 2009-9-7 14:00 | 只看该作者
关注,

使用特权

评论回复
板凳
woshiwml| | 2009-9-7 14:53 | 只看该作者
LZ  相同ID怎么判断优先级????????????怎么进行传输??????

使用特权

评论回复
地板
zdx818| | 2009-9-8 16:05 | 只看该作者
两个板之发同样的数据,在实际应用没意义。29位码可以一样,后面8个字节不一样就可以总线总裁了。

使用特权

评论回复
5
IJK| | 2009-9-8 16:24 | 只看该作者
29位码一样?

29位码一样?这怎么行?如果没有记错,CAN的总线仲裁是根据ID(11位或29位)、帧的类型(远程帧、数据帧),29位码如果相同,可能很快就会出错。

使用特权

评论回复
6
grant_jx| | 2009-9-9 14:16 | 只看该作者
不知道顶楼的是否知道CAN Bus的仲裁方式?

在同一总线上出现了,扩展帧的29为ID全部相同,意味什么?不解释你也知道。

1、当存在仲裁是,报文退出发送状态,邮箱中数据发不出去,等待下一次的发送;

2、邮箱出不去,发送错误计数器(Transmit Error Counter (TEC))+8,加到127进入“错误被动(Error Passive)”模式,如果还不处理,TEC加到+255,节点自动退出总线;

3、如有数据发送成功,TEC会-1的,发送和接收都是一样。

你所说的“通讯阻塞”大概就是这个原因吧,换个说法:你做好了错误管理吗?发送是TEC,接收是REC,看STM32的CAN Bus模块的“CAN错误状态寄存器 (CAN_ESR)”

使用特权

评论回复
7
dfsa| | 2009-9-14 15:30 | 只看该作者
把两个邮箱的ID设成一致,确实没有什么实在的意义,CAN通信之所以能够广播式发送,就是通过ID来区分的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

363

帖子

1

粉丝