打印
[STM32F1]

STM32 过滤器同时设置两个过滤器组,应该怎样设置

[复制链接]
1825|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yang5223536|  楼主 | 2015-12-1 13:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        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 位的过滤器
● 对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式
● 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级
沙发
embed_chip| | 2015-12-8 14:16 | 只看该作者
试一下 mask mode? 另外看看这个对你是否有用?
bbs.armfly.com/simple/?t14449.htm

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

23

帖子

0

粉丝