打印

stm32can滤波器设置

[复制链接]
3196|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
clz918|  楼主 | 2013-10-28 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CAN_FilterInitStructure.CAN_FilterNumber=0;  

  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;  
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;   

  CAN_FilterInitStructure.CAN_FilterIdHigh=(((u32)0X1000<<3)&0xFFFF0000)>>16;  //要过滤的ID高位
  CAN_FilterInitStructure.CAN_FilterIdLow= (((u32)0X1000<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;//要过滤的ID低位
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xffff;
  
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;    CAN_FilterInit(&CAN_FilterInitStructure);

这是STM32接受0x1000的初始化。假如我想接受0x1000和0x1001两个扩展ID的数应该怎么加上接受0x1001的初始化呢
沙发
clz918|  楼主 | 2013-10-29 11:30 | 只看该作者
怎么没人回答

使用特权

评论回复
板凳
wenshijian| | 2013-10-29 16:47 | 只看该作者
标准答案:
        CAN_FilterInitStructure.CAN_FilterNumber=0;           //过滤器0
        CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdList;  //ID列表模式
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
        CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)318264145<<3)&0xFFFF0000)>>16;
        CAN_FilterInitStructure.CAN_FilterIdLow  = (((u32)318264145<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh=(((u32)318255123<<3)&0xFFFF0000)>>16;
        CAN_FilterInitStructure.CAN_FilterMaskIdLow=(((u32)318255123<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;        //FIFO0
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//DISABLE;//ENABLE;
        CAN_FilterInit(&CAN_FilterInitStructure);

楼主你是不是在做汽车电子的? 我告诉你怎么发CAN数据回去,控制汽车升窗、开关锁、喇叭、闪灯之类的。

使用特权

评论回复
地板
clz918|  楼主 | 2013-10-30 08:56 | 只看该作者
wenshijian 发表于 2013-10-29 16:47
标准答案:
        CAN_FilterInitStructure.CAN_FilterNumber=0;           //过滤器0
        CAN_FilterInitStructure.CAN_Fi ...

非常感谢您的帮助,的确是正确答案。但我还有个疑问,如果要接收的是4个或8个不同ID又该怎么设置呢?CAN_FilterIdHigh,CAN_FilterMaskIdHigh,都已经用完了啊。
我不是做汽车电子的,是做工业控制的,以前都用MODEBUS,现在由于需要,要用CAN

使用特权

评论回复
5
wenshijian| | 2013-10-30 09:58 | 只看该作者
CAN_FilterInitStructure.CAN_FilterNumber=0;           //过滤器0

改这个就行了,不是有4组FIFO嘛,对于扩展帧来说,每组FIFO只能过滤两个ID,4组FIFO最多就只能过滤8个ID。要过滤更多的话,就必须对ID做一些逻辑运算,然后再设置过滤值

使用特权

评论回复
6
clz918|  楼主 | 2013-10-30 10:16 | 只看该作者
非常感谢

使用特权

评论回复
7
yousi2180| | 2013-11-27 15:34 | 只看该作者
wenshijian 发表于 2013-10-30 09:58
CAN_FilterInitStructure.CAN_FilterNumber=0;           //过滤器0

改这个就行了,不是有4组FIFO嘛,对于 ...

专业。

使用特权

评论回复
8
hustergatsby| | 2014-7-20 13:14 | 只看该作者
        CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)318264145<<3)&0xFFFF0000)>>16;
        CAN_FilterInitStructure.CAN_FilterIdLow  = (((u32)318264145<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh=(((u32)318255123<<3)&0xFFFF0000)>>16;
        CAN_FilterInitStructure.CAN_FilterMaskIdLow=(((u32)318255123<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;
想请问一下318264145和318255123是怎么来的???

使用特权

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

本版积分规则

111

主题

336

帖子

3

粉丝