现场的STM32 CAN总线设置一共有3个:A、B、C。其中A是发送命令者,C是执行命令者,B是分析命令者。A发送命令,C执行命令后输出信号,B通过分析命令的内容切换继电器通道。以上就是设计初衷。
实测发现存在故障,在某些情况下,A发送的命令,C执行并回复A一条CAN报文,由于A的发送和C的回复间隔时间太近,致使B解析报文时又接收到了新的报文,最终使得报文解析无效,继电器不动作。
解决方法是B接收到A发送的命令后,立刻关闭CAN总线的中断,直至自己动作结束(>300ms),这样B就不会接收到C发送的回复A的CAN报文,问题解决。