OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2527|回复: 4

CAN数据筛选器规则设置疑问

[复制链接]

14

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2019-4-10
在线时间
30 小时
发表于 2019-7-30 18:59:54 | 显示全部楼层 |阅读模式
1金钱
QQ截图20190730185509.png TxMessage.StdId=0x12;// 标准标识符
刚接触CAN 想只通过该ID的数据,这样设置对吗?请懂得大神指点一下啊

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

34

主题

388

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4090
金钱
4090
注册时间
2012-10-21
在线时间
642 小时
发表于 2019-7-30 18:59:55 | 显示全部楼层
22.png
用这个软件算
STM32 CAN滤波器.rar (224.1 KB, 下载次数: 26)
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-7-30 21:14:38 | 显示全部楼层
感觉不太对最少应该是0xf...开头吧 你的0x567怎么来的呀
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-8-15
在线时间
0 小时
发表于 2019-8-15 14:48:27 | 显示全部楼层
有两种方式进行配置:
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-8-15
在线时间
0 小时
发表于 2019-8-15 15:06:26 | 显示全部楼层
根据实际实验,标准模式下,列出以下有两种工作模式的设置方法(屏蔽位模式、标识符模式),验证都能正常工作:

*假设希望通过CANID为0x0576的信息,滤波部分的配置如下:

方法一:使用屏蔽位模式 (该模式可通过多个CANID号)
CAN_FilterInitStructure.CAN_FilterNumber              = 0;                                                        // CAN1滤波号选择0
CAN_FilterInitStructure.CAN_FilterMode                  = CAN_FilterMode_IdMask;                  // 屏蔽位模式
CAN_FilterInitStructure.CAN_FilterScale                   = CAN_FilterScale_32bit;                        // 选择32位滤波器
CAN_FilterInitStructure.CAN_FilterIdHigh                  = ((0x0576<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterIdLow                  = ((0x0576<<21)|CAN_ID_STD|CAN_RTR_DATA)&0xffff;         
CAN_FilterInitStructure.CAN_FilterMaskIdHigh        = 0xFFFF;                                                // 完全匹配
CAN_FilterInitStructure.CAN_FilterMaskIdLow         = 0xFFFF;                                                // 完全匹配
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;                                        // Specifies the FIFO (0 or 1) which will be assigned to the filter.

*假设希望通过CANID为0x0576,0x0577的信息,滤波部分的配置如下:

方法二:使用标识符模式 (该模式可通过两个CANID号)
CAN_FilterInitStructure.CAN_FilterNumber              = 0;                                                        // CAN1滤波号选择0
CAN_FilterInitStructure.CAN_FilterMode                  = CAN_FilterMode_IdList;                     // 标识符模式
CAN_FilterInitStructure.CAN_FilterScale                   = CAN_FilterScale_32bit;                        // 选择32位滤波器
CAN_FilterInitStructure.CAN_FilterIdHigh                  = ((0x0576<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterIdLow                  = 0x0000;         
CAN_FilterInitStructure.CAN_FilterMaskIdHigh        = ((0x0577<<21)&0xffff0000)>>16;
CAN_FilterInitStructure.CAN_FilterMaskIdLow         = 0x0000;                                                // 完全匹配
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;                                        // Specifies the FIFO (0 or 1) which will be assigned to the filter.

备注:测试结果两者均能工作,第一种模式中断会一直进入,尚未有时间排查,模式二有本标识符的信号过来即进入中断,正常,希望对大家有用。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 14:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表