STM32 CAN过滤器配置教程:接收特定ID数据详解

滤波器详细配置 (slave_id为只接收的id号):

1、对扩展数据帧进行过滤:(只接收扩展数据帧)

CAN_FilterInitStructure.CAN_FilterIdHigh=(((u32)slave_id<<3)&0xFFFF0000)>>16;
CAN_FilterInitStructure.CAN_FilterIdLo=(((u32)slave_id<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

2、对扩展远程帧过滤:(只接收扩展远程帧)

CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id<<3)&0xFFFF0000)>>16;
CAN_FilterInitStructure.CAN_FilterIdLow  = (((u32)slave_id<<3)|CAN_ID_EXT|CAN_RTR_REMOTE)&0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

3、对标准远程帧过滤:(只接收标准远程帧)

CAN_FilterInitStructure.CAN_FilterIdHigh   =(((u32)slave_id<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterIdLow  = (((u32)slave_id<<21)|CAN_ID_STD|CAN_RTR_REMOTE)&0xffff;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

4、对标准数据帧过滤:(只接收标准数据帧)

CAN_FilterInitStructure.CAN_FilterIdHigh   =(((u32)slave_id<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterIdLow  = (((u32)slave_id<<21)|CAN_ID_STD|CAN_RTR_DATA)&0xffff;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

5、对扩展帧进行过滤:(只接收扩展帧)

 CAN_FilterInitStructure.CAN_FilterIdHigh   =(((u32)slave_id<<3)&0xFFFF0000)>>16;
 CAN_FilterInitStructure.CAN_FilterIdLow  = (((u32)slave_id<<3)|CAN_ID_EXT)&0xFFF
 CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;
 CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFC;

6、对标准帧进行过滤:(只接收标准帧)

CAN_FilterInitStructure.CAN_FilterIdHigh   =(((u32)slave_id<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterIdLow  = (((u32)slave_id<<21)|CAN_ID_STD)&0xffff;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFC;

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 CAN过滤器配置教程:接收特定ID数据详解

发表评论