OpenEdv-开源电子网

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

关于CAN的过滤器匹配序号问题

[复制链接]

30

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2013-11-14
在线时间
7 小时
发表于 2014-2-17 14:34:02 | 显示全部楼层 |阅读模式


请教原子大神,我现在需要得到接收到的报文的过滤器匹配号(哪个过滤器传过来的),怎么把这个数据读出来呢,放在我设定的一个变量里面??没有发现程序例子中关于这个寄存器的描述??
学海无涯,回不了头!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2013-9-28
在线时间
0 小时
发表于 2014-2-17 14:41:09 | 显示全部楼层
回复 支持 反对

使用道具 举报

30

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2013-11-14
在线时间
7 小时
 楼主| 发表于 2014-2-17 14:57:15 | 显示全部楼层
还有这个匹配号的值是怎么回事啊??怎么计算出来的匹配号呢??
学海无涯,回不了头!!
回复 支持 反对

使用道具 举报

30

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2013-11-14
在线时间
7 小时
 楼主| 发表于 2014-2-17 14:58:10 | 显示全部楼层
回复【2楼】tao19940223:
---------------------------------
有几个过滤器组,如果直接读的话有点麻烦
学海无涯,回不了头!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-2-17 16:05:29 | 显示全部楼层
回复【3楼】电子小手:
---------------------------------
这个不是计算出来的,是stm32的can设计成这样,你直接去读的...
不用你设置
CAN接收到匹配的数据帧时,就通过这里,告诉你这一帧是通过的哪个过滤器...
从而判断帧信息。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

30

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2013-11-14
在线时间
7 小时
 楼主| 发表于 2014-2-18 16:55:02 | 显示全部楼层
我看到说明上写的编号是有弹性的,就比如我的过滤器0,1,2,3都是关联到FIFO0的,0,1,2,3设置成屏蔽标示符模式,0,1,3,为32位宽,,2设置成16位宽,那么过滤器的编号分别是多少呢??不知道怎么理解说明书上的那个例子,大神求教啊,纠结很久了。。。。。。。。


学海无涯,回不了头!!
回复 支持 反对

使用道具 举报

30

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2013-11-14
在线时间
7 小时
 楼主| 发表于 2014-2-19 09:40:27 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
我看到说明上写的编号是有弹性的,就比如我的过滤器0,1,2,3都是关联到FIFO0的,0,1,2,3设置成屏蔽标示符模式,0,1,3,为32位宽,,2设置成16位宽,那么过滤器的编号分别是多少呢??不知道怎么理解说明书上的那个例子,大神求教啊,纠结很久了。。。。。。。。
学海无涯,回不了头!!
回复 支持 反对

使用道具 举报

30

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2013-11-14
在线时间
7 小时
 楼主| 发表于 2014-2-19 10:52:06 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
还有就是:我是在FIFO0中关联了0到3的过滤器组,在接收方,得到过滤器编号,现在是只要我发送的数据的ID一改变,刚开始的两个帧的数据还是从没改变时的数据通过的过滤器组进入(这个时候过滤器编号和没改变ID时候的编号是一样的,第三帧之后的就改变成另一个值),求指教啊。。。。不晓得为什么
学海无涯,回不了头!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-2-19 14:14:19 | 显示全部楼层
回复【8楼】电子小手:
---------------------------------
我也不晓得了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-10-15
在线时间
6 小时
发表于 2020-8-11 15:19:56 | 显示全部楼层
本帖最后由 luoxin1 于 2020-8-11 15:21 编辑


今天我也遇到这个问题 不知道题主解决没 我应该是搞明白了 写下来 让后续遇到这个问题的人有个帮助
首先,关于过滤器匹配序号,如上图32位的标识符列表模式是包含2个过滤器的,32位的屏蔽位模式包含1个,同理16位标识符列表模式和屏蔽位模式分别包含4个和2个,所以得按照这个相加。注意过滤器的优先级问题。这个可参考手册。举个例子:若标准ID为0x12,过滤器0为32位的屏蔽位模式不匹配,过滤器1为32位的列表模式不匹配,过滤器2为16位的屏蔽位模式不匹配,过滤器3为16位的标识符列表模式且低位的ID匹配。则FMI=3+1+1=5;(3为过滤器3匹配,加两个1是因为过滤器1和2都多了一个过滤器)。

此外,如果没有按照顺序配置过滤器,如只配置了过滤器5和7为2位的屏蔽位模式,若过滤器7匹配,那么FMI=7+6=13.加6的原因是0-4,6一共6个过滤器未配置。

最后一点,我也遇到了发送第三帧FMI才改变的情况,是由于在库函数下接受函数每次会对RFOF和RF1F释放,我之前在主函数读寄存器的值就会有这个问题。因此,想要解决也很简单,只要在接受结构体里每次把FMI的值先保存下来就好
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 06:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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