以前没有接触过CAN通信,最近接触CAN通信,要调试F0芯片上的can通信,发送调试好了,接收总是只能接收固定id的数据,
这主要和过滤器有关,通过对过滤器的设置可以过滤特定的canid的数据,也可以接收任意canid的数据,具体设置方法如下:
CAN_FilterTypeDef sFilterConfig;
sFilterConfig.FilterBank = 0; //过滤器0
sFilterConfig.FilterMode = CAN_FILTERMODE_IDLIST; //设为列表模式
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;//滤波器位宽为单个32位
sFilterConfig.FilterIdHigh = 0x0000; //基本ID放入到STID中
sFilterConfig.FilterIdLow = 0x0000;
sFilterConfig.FilterMaskIdHigh = 0;//这里设置接收任意ID的CAN数据
sFilterConfig.FilterMaskIdLow = 0;//0表示接收来自发送端任意ID的数据
sFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0; //接收到的报文放入到FIFO0中
sFilterConfig.FilterActivation = ENABLE; //激活过滤器
sFilterConfig.SlaveStartFilterBank = 0;
HAL_Status=HAL_CAN_ConfigFilter(&hcan, &sFilterConfig);
使用过滤器0,当将FilterMode 设置为列表模式的时候,屏蔽寄存器FiterMask也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符FilterId相同, 所以列表模式下是过滤特定的ID模式

本文详细介绍了在调试F0芯片上的CAN通信时,如何通过设置过滤器接收特定或任意CAN ID的数据。包括配置过滤器的基本步骤,以及列表模式和掩码模式下过滤器的工作原理。
最低0.47元/天 解锁文章
5363

被折叠的 条评论
为什么被折叠?



