5424|10

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

香水城版主请进请教CAN过滤器设置 [复制链接]

//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的帧,为什么我收不到呢?
           也许是我没研究明白,还请帮忙
此帖出自stm32/stm8论坛

最新回复

学习了,正在研究中  详情 回复 发表于 2016-7-21 21:23
点赞 关注
 

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
试试看
  CAN_FilterInitStructure.CAN_FilterIdHigh= J1939_REQ_DM1SinglePacket >>13;
  CAN_FilterInitStructure.CAN_FilterIdLow= (u16)((J1939_REQ_DM1SinglePacket &0xFFFF)<<3) |CAN_ID_EXT |CAN_RTR_DATA;
此帖出自stm32/stm8论坛
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 我正有这方面问题
此帖出自stm32/stm8论坛
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 我也想问
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 CAN过滤器是一位一位进行过滤的,你先设置好你需要接收的ID,然后在过滤器里,把要过滤的为置1,不需要过滤的为置0就可以了
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 我也有这方面的问题,望各位不吝赐教!
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 你过滤器设置是对的,会不会是其他设置的问题
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 看不出有什么问题
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
呵呵,这个问题我终于搞定了,谢谢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没有移位,也就是自己得先移位后在配置。
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

10
 
大家仔细看看
CAN_Transmit(&TxMessage);
CAN_FilterInit(&CAN_FilterInitStructure);
这两个库函数就明白了为什么滤波器配置老出问题。
此帖出自stm32/stm8论坛
 
 
 

回复

25

帖子

1

TA的资源

一粒金砂(中级)

11
 
学习了,正在研究中
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表