CAN_FilterInitTypeDef CAN_FilterInitStructure;
CAN_FilterInitStructure.CAN_FilterNumber = 0;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)0x0710<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)0x0730<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = (((u32)0x0750<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = (((u32)0x0770<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterNumber = 1;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdList;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)0x07A0<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)0x07B0<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = (((u32)0x07C0<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = (((u32)0x07D0<<21)&0xffff0000)>>16;
目前使用列表模式,希望同时过滤8个ID。 但是这样设置,过滤器只能过滤后面4个ID,也就是07A0、07B0、07C0、07D0这四个ID。
为什么这样设置不可以同时过滤8个ID呢?同时这样过滤后边4个ID,不符合STM32参考手册说明~!
过滤器优先级规则(STM32参考手册)
根据过滤器的不同配置,有可能一个报文标识符能通过多个过滤器的过滤;在这
种情况下,存放在接收邮箱中的过滤器匹配序号,根据下列优先级规则来确定:
● 位宽为 32 位的过滤器,优先级高于位宽为 16 位的过滤器
● 对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式
● 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级
高 |