打印

CAN滤波器的疑问

[复制链接]
2313|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
motor666|  楼主 | 2012-5-23 09:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
把CAN滤波器设置成屏蔽位模式 ,为什么还要设置CAN_FilterIdHigh和CAN_FilterIdLow两个参数,这两个参数是在标识符列表模式时起作用的吧,下面的初始化程序去掉这两行行不行?
CAN_FilterInitStructure.CAN_FilterNumber=14;

CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;


CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;

  CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;

CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;


CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;


CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;


CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;


CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;


CAN_FilterInit(&CAN_FilterInitStructure);
沙发
sjnh| | 2012-5-23 14:54 | 只看该作者
屏蔽位:只表示这个位起屏蔽作用, 至于这一位是高过滤还是低过滤需要Filter指定

例如:只要求接收ID15=1的信息,则CAN_FilterIdLow=0x8000; CAN_FilterMaskIdLow=0x8000;
例如:只要求接收ID15=0的信息,则CAN_FilterIdLow=0x0000; CAN_FilterMaskIdLow=0x8000;

使用特权

评论回复
板凳
motor666|  楼主 | 2012-5-23 23:17 | 只看该作者
如此说来,设定CAN_FilterIdLow=0x8000;应该就可以了,为什么还要设定: CAN_FilterMaskIdLow=0x8000;呢

使用特权

评论回复
地板
sjnh| | 2012-5-24 08:08 | 只看该作者
上面我没讲明白,我只用8位表示,这样输入方便,依次类推29位ID码:
如果Filter=0xF0, Mask=0x00,那么可以收到0xF0-0xFF共16个ID的信息。
还是Filter=0xF0, Mask=0xFF,那么只能收到0xF0这一个ID信息。
还是Filter=0xF0, Mask=0xF8,那么可以收到0xF8-0xFF共8个ID的信息。
还是Filter=0xF0, Mask=0xFC,那么可以收到0xFC-0xFF共4个ID的信息。
也就是说,Mask对应位=1时,接收到的信息ID对应位必须=Filter的对应位才能确认处理
               Mask对应位=0时,Filter对应位=1时,接收到的信息ID对应位必须=1才能确认处理
                                          Filter对应位=0时,接收到的信息ID对应位=0,=1都能确认处理

使用特权

评论回复
5
airwill| | 2012-5-24 09:08 | 只看该作者
CAN 的过滤器有两组过滤方式, 说起来真的好长一段话呢.
不如仔细去看看 STM32 的 datasheet 上的说明, 那里说得很详细了

使用特权

评论回复
6
motor666|  楼主 | 2012-5-24 21:19 | 只看该作者
sjnh讲得很明白,我理解是这样:过滤器有Filter和Mask两个组成的,两个都要事先指定。

使用特权

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

本版积分规则

174

主题

420

帖子

1

粉丝