打印

香水城版主 请进 请教CAN 过滤器设置

[复制链接]
3246|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
03024003|  楼主 | 2009-8-26 12:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//CAN 过滤器初始化
   CAN_FilterInitStructure.CAN_FilterNumber   = 0;
   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 = CAN_FIFO0;
   CAN_FilterInitStructure.CAN_FilterActivation   = ENABLE;
   CAN_FilterInit(&CAN_FilterInitStructure);

           如果我想收标识符是0x18dafa00的帧,设置
           CAN_FilterInitStructure.CAN_FilterIdHigh   = 0x18DA;
   CAN_FilterInitStructure.CAN_FilterIdLow   = 0xFA00;
   CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;
   CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;
           另一个节点发送标识符是0x18dafa00的帧,为什么我收不到呢?
           也许是我没研究明白,还请帮忙
沙发
hanker510| | 2009-8-28 08:49 | 只看该作者
试试看
  CAN_FilterInitStructure.CAN_FilterIdHigh= J1939_REQ_DM1SinglePacket >>13;
  CAN_FilterInitStructure.CAN_FilterIdLow= (u16)((J1939_REQ_DM1SinglePacket &0xFFFF)<<3) |CAN_ID_EXT |CAN_RTR_DATA;

使用特权

评论回复
板凳
jinjing999| | 2009-8-28 13:54 | 只看该作者
我正有这方面问题

使用特权

评论回复
地板
yiyuep| | 2009-9-21 14:03 | 只看该作者
我也想问

使用特权

评论回复
5
sinadz| | 2009-9-21 15:43 | 只看该作者
CAN过滤器是一位一位进行过滤的,你先设置好你需要接收的ID,然后在过滤器里,把要过滤的为置1,不需要过滤的为置0就可以了

使用特权

评论回复
6
majesse| | 2009-10-9 11:43 | 只看该作者
我也有这方面的问题,望各位不吝赐教!

使用特权

评论回复
7
hsbjb| | 2009-10-11 08:55 | 只看该作者
你过滤器设置是对的,会不会是其他设置的问题

使用特权

评论回复
8
yybj| | 2009-10-11 10:49 | 只看该作者
看不出有什么问题

使用特权

评论回复
9
majesse| | 2009-10-14 10:59 | 只看该作者
呵呵,这个问题我终于搞定了,谢谢2楼兄弟的提示。

如果收标识符是0x18dafa00的帧,设置
  CAN_FilterInitStructure.CAN_FilterIdHigh  =(unsigned short)(0x18dafa00 >> 13);
   CAN_FilterInitStructure.CAN_FilterIdLow   = =(unsigned short)(((0x18dafa00 &  0x0000FFFF) << 3) | CAN_ID_EXT | CAN_RTR_DATA);        CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;
   CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

原因在于:
在CAN_Transmit(&TxMessage);  函数中 你配置的ID在此函数中有移位,目的是为了写入32bits的寄存器中,但是在CAN_FilterInit(&CAN_FilterInitStructure); 中,需要滤波的ID没有移位,也就是自己得先移位后在配置。

使用特权

评论回复
10
majesse| | 2009-10-14 11:03 | 只看该作者
大家仔细看看
CAN_Transmit(&TxMessage);
CAN_FilterInit(&CAN_FilterInitStructure);
这两个库函数就明白了为什么滤波器配置老出问题。

使用特权

评论回复
11
mulangic| | 2014-7-21 16:38 | 只看该作者
感谢分享~~

使用特权

评论回复
12
it_yrj| | 2017-7-20 12:50 | 只看该作者
多谢分享

使用特权

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

本版积分规则

21

主题

125

帖子

0

粉丝