CAN分析仪可以发送,但不能接收的故障排查
滤波器设置
传统CAN模式分为掩码模式和列表模式。列表模式只接收符合指定ID的帧,保存指定ID使用2个32位寄存器,分为16位模式和32位模式。16位模式可以存4个ID。32位模式可以存2个ID。掩码模式就是接收指定符合要求的ID哪几位为1,0不关心。如果全为0,则全接受。
CAN-FD模式增加范围接收和拒绝
采样因子设置
关于采样点的计算,
(
1
+
T
S
E
G
1
)
/
(
1
+
T
S
E
G
1
+
T
S
E
G
2
)
(1+TSEG1)/(1+TSEG1+TSEG2)
(1+TSEG1)/(1+TSEG1+TSEG2)
采样因子设定要靠近7/8这个值(0.85~0.9),如
时钟频率 | Sync_seg | SJW | TSEG1 | TSEG2 | 采样点 | 波特率 |
---|---|---|---|---|---|---|
16 | 1 | 1 | 13 | 2 | 0.875 | 1M |
20 | 1 | 1 | 16 | 3 | 0.85 | 1M |
同步跳转宽度
波特率在不同CAN收发器内会有误差,所以需要一个类似同步时钟的规则,一般设置宽度为3~4.值越大容忍度越高。
大数据传输下几个特殊的配置使能
hfdcan1.Init.AutoRetransmission = ENABLE; //自动重发
hfdcan1.Init.TransmitPause = DISABLE;
hfdcan1.Init.ProtocolException = ENABLE; //故障检测
我在stm32上调试连续发送1024个字节数据时,发现有漏帧情况出现。通过使能自动重发得以解决。
其余还有硬件电路板是否清洁干净也引起接收不良。