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

mycmf   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总线会阻塞吗?是什么原因造成阻塞的?

回复评论 (6)

                                 关注,
点赞  2009-9-7 14:00
                                 LZ  相同ID怎么判断优先级????????????怎么进行传输??????
点赞  2009-9-7 14:53
                                 两个板之发同样的数据,在实际应用没意义。29位码可以一样,后面8个字节不一样就可以总线总裁了。
点赞  2009-9-8 16:05
29位码一样?

29位码一样?这怎么行?如果没有记错,CAN的总线仲裁是根据ID(11位或29位)、帧的类型(远程帧、数据帧),29位码如果相同,可能很快就会出错。
点赞  2009-9-8 16:24
不知道顶楼的是否知道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)”
点赞  2009-9-9 14:16
                                 把两个邮箱的ID设成一致,确实没有什么实在的意义,CAN通信之所以能够广播式发送,就是通过ID来区分的
点赞  2009-9-14 15:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复