昨天测试了CAN通信的环回模式,今天逻辑分析仪到手了,借助这一神器完成了今天的CAN通讯之正常模式数据收发。对于CAN通讯正常模式来说,没有逻辑分析仪或者CAN盒(某宝上可以买到),分析数据,想要调通的话只能看运气了,有了工具就可以轻松的看到数据的收发过程。
本次正常模式的测试是用两块板子进行测试,一块板子(STM32F103RET6)用于发送数据,另一块板子是正点原子的战舰开发板(STM32F103ZET6)用于接收数据(中断方式接收)。两块板子的CAN_H和CAN_H相连,CAN_L和CAN_L相连。
发送的板子STM32CubeMX配置及代码与前面的环回模式几乎一样,唯一不同的是初始化模式不同。请参考CAN通讯之一,这里不再赘述。
对于接收的开发板,战舰V3,其配置过程与前面环回模式也类似,只是第一步选择的芯片不一样。CAN外设参数配置与前面一样。
同样的,也需要在can.c中添加过滤器配置的代码以及接收中断服务函数。
在main.c中添加以下代码即可,至此,接收部分配置完成,添加的代码量很少。
因为在本例程中没有配置串口,所以在接收中断的地方设置断点,方便查看接收的数据。发送数据的板子在主函数while循环中间隔10ms发送一次数据,接收的开发板中断方式接收。
发送的数据:
战舰V3开发板接收的数据:
逻辑分析仪采集到的数据:
发送数据与接收数据完全吻合。当然,用战舰开发板发送数据,用另一块板子接收数据也行,需要稍微修改一下代码,读者可自行去测试。
特别注意事项:CAN通信芯片是5V的,我刚开始调试的时候没有找到两根USB线供电,其中一块开发板使用J-LINK直接供电的,通信一直没有成功,后来将两块开发板都用5V供电,通讯正常。
源代码:
链接:https://pan.baidu.com/s/1L56eFRBkvNvfMQU9XQdaUA
提取码:14nl