CANb标识符过滤

CANb标识符过滤

ID:38119226

大小:157.76 KB

页数:6页

时间:2019-05-27

CANb标识符过滤_第1页
CANb标识符过滤_第2页
CANb标识符过滤_第3页
CANb标识符过滤_第4页
CANb标识符过滤_第5页
资源描述:

《CANb标识符过滤》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、STM32CAN过滤器总结在STM32互联型产品中,CAN1和CAN2分享28个过滤器组,其它STM32F103xx系列产品中有14个过滤器组,用以对接收到的帧进行过滤。每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和CAN_FxR1。这些过滤器相当于关卡,每当收到一条报文时,CAN要先将收到的报文从这些过滤器上"过"一下,能通过的报文是有效报文,收进相关联FIFO(FIFO1或FIFO2),不能通过的是无效报文(不是发给"我"的报文),直接丢弃。(标准CAN的标志长度是11位。扩展格式CAN的

2、标志长度是29。CAN2.0A协议规定CAN控制器必须有一个11位的标识符。CAN2.0B协议中规定CAN控制器的标示符长度可以是11位或29位。STM32同时支持CAN2.0A/CAN2.0B协议。)每组过滤器组有两种工作模式:标识符列表模式和标识符屏蔽位模式。标识符屏蔽位模式:可过滤出一组标识符。此时,这样CAN_FxR0中保存的就是标识符匹配值,CAN_FxR1中保存的是屏蔽码,即CAN_FxR1中如果某一位为1,则CAN_FxR0中相应的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器;CAN_

3、FxR1中为0的位表示CAN_FxR0中的相应位可不必与收到的帧进行匹配。标识符列表模式:可过滤出一个标识。此时CAN_FxR0和CAN_FxR1中的都是要匹配的标识符,收到的帧的标识符必须与其中的一个吻合才能通过过滤。注意:CAN_FilterIdHigh是指高16位CAN_FilterIdLow是低16位应该将需要得到的帧的和过滤器的设置值左对齐起。所有的过滤器是并联的,即一个报文只要通过了一个过滤器,就是算是有效的。按工作模式和宽度,一个过滤器组可以变成以下几中形式之一:(1)1个32位的屏蔽位模式的

4、过滤器。(2)2个32位的列表模式的过滤器。(3)2个16位的屏蔽位模式的过滤器。(4)4个16位的列表模式的过滤器。每组过滤器组有两个32位的寄存器用于存储过滤用的"标准值",分别是FxR1,FxR2。在32位的屏蔽位模式下:有1个过滤器。FxR2用于指定需要关心哪些位,FxR1用于指定这些位的标准值。在32位的列表模式下:有两个过滤器。FxR1指定过滤器0的标准值FxR2指定过滤器1的标准值。收到报文的标识符只有跟FxR1与FxR1其中的一个完全相同时,才算通过。在16位的屏蔽位模式下:有2个过滤器。F

5、xR1配置过滤器0,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值。FxR2配置过滤器1,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值。在16位的列表模式下:有4个过滤器。FxR1的[15-0]位配置过滤器0,FxR1的[31-16]位配置过滤器1。FxR2的[15-0]位配置过滤器2,FxR2的[31-16]位配置过滤器3。STM32的CAN有两个FIFO,分别是FIFO0和FIFO1。为了便于区分,下面FIFO0写作FIFO_0,FIFO1写作FIFO_

6、1。每组过滤器组必须关联且只能关联一个FIFO。复位默认都关联到FIFO_0。所谓“关联”是指假如收到的报文从某个过滤器通过了,那么该报文会被存到该过滤器相连的FIFO。从另一方面来说,每个FIFO都关联了一串的过滤器组,两个FIFO刚好瓜分了所有的过滤器组。每当收到一个报文,CAN就将这个报文先与FIFO_0关联的过滤器比较,如果被匹配,就将此报文放入FIFO_0中。如果不匹配,再将报文与FIFO_1关联的过滤器比较,如果被匹配,该报文就放入FIFO_1中。如果还是不匹配,此报文就被丢弃。每个FIFO的所

7、有过滤器都是并联的,只要通过了其中任何一个过滤器,该报文就有效。如果一个报文既符合FIFO_0的规定,又符合FIFO_1的规定,显然,根据操作顺序,它只会放到FIFO_0中。每个FIFO中只有激活了的过滤器才起作用,换句话说,如果一个FIFO有20个过滤器,但是只激话了5个,那么比较报文时,只拿这5个过滤器作比较。一般要用到某个过滤器时,在初始化阶段就直接将它激活。需要注意的是,每个FIFO必须至少激活一个过滤器,它才有可能收到报文。如果一个过滤器都没有激活,那么是所有报文都报废的。一般的,如果不想用复杂的

8、过滤功能,FIFO可以只激活一组过滤器组,且将它设置成32位的屏蔽位模式,两个标准值寄存器(FxR1,FxR2)都设置成0。这样所有报文均能通过。(STM32提供的例程里就是这么做的!)STM32CAN中,另一个较难理解的就是过滤器编号。过滤器编号用于加速CPU对收到报文的处理。收到一个有效报文时,CAN会将收到的报文以及它所通过的过滤器编号,一起存入接收邮箱中。CPU在处理时,可以根据过滤器编号,快速的知道该报

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。