STM32
直播中

张秀兰

7年用户 1285经验值
私信 关注
[问答]

请问CAN通讯上可以做哪些出错处理?

我先说一下目前项目中采用的一些处理:
1、利用HAL库的返回值处理,比如下面:
        while(HAL_CAN_Transmit_IT( hcan_use)!=HAL_OK)
        {
                __nop();
        }

2、加入独立看门狗,死机3秒就重启
3、CAN通讯协议设计成发送后必须有回复,超时没回复就发出重启指令,另接收指令的CAN节点重启,然后重发指令

但是目前通讯在节点多于6个以上的时候会容易出现通讯故障。
现在从硬件与软件两个方面同时解决,
硬件上我认为可能是线路阻抗匹配上有问题,正申请购置相应测量仪器
软件上除了上述处理以外,不知道各位还有什么经验没有?
比如说怎么通过一些寄存器标志位进行错误判断,然后能够通过软件上做出一些相应的处理,使CAN通讯功能恢复正常。之类的。

回帖(1)

陈韵瑄

2024-4-25 16:00:30
楼主用的是中断发送,如果想查询实时发送结果,不要用中断。接收用中断处理。节点过多并不一定是电阻的问题,只要保证最多2个120欧姆的电阻即可。可能是波特率配置不一致导致的。
举报

更多回帖

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