硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6659|回复: 1
收起左侧

[CAN/FDCAN] STM32H7的CAN FD外设三种过滤方式:范围过滤器,专用ID的过滤器,经典位屏蔽过滤器

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-3-17 09:08:07 | 显示全部楼层 |阅读模式
CAN总线的标识符过滤器很重要。
过滤器是用于接收的,发送的时候无需设置过滤器,这点一定要整明白。根据发送端发送来的帧数据,通过标识符过滤器就可以设置仅接收需要接收的帧数据有效降低CPU多余的处理时间。





FDCAN外设可以配置两套验收滤波器:一套用于标准标识符,一种是扩展标识符,用于存储或拒绝接收到的消息。128个过滤元素可以配置用来配置128个11bit标准ID和64个过滤元素可以用来配置64个29bit扩展ID。11位过滤器部分的起始地址通过FDCAN_SIDFC寄存器中的FLSSA [13:0]位进行配置,并且通过FDCAN_XIDFC寄存器中的FLESA [13:0]配置29位滤波器部分。下图显示了CAN消息RAM的一部分,其中包含过滤器元件的数量及其开始位置地址。



可以将这些过滤器分配给Rx FIFO 0/1或专用的Rx buffers。 FDCAN执行接受过滤,它总是从过滤器元素#0开始,然后遍历过滤器列表以找到匹配项元素。验收过滤在第一个匹配元素处停止,而随后的过滤元素不在针对此消息进行了检索。因此,配置过滤器元素的顺序对过滤性能有很重要的影响。用户选择启用或禁用每个过滤器元素,并可以配置每个元素以接受或拒绝过滤。每个过滤器元素可以配置为:

(1)范围过滤器(Range filter):该过滤器匹配标识符在两个ID定义的范围内的所有消息。
(2)专用ID的过滤器(Filter for dedicated IDs):可以将过滤器配置为匹配一个或两个特定的标识符。
(3)经典位屏蔽过滤器(Classic bit mask filter):通过对接收到的标识符的位进行屏蔽来匹配标识符组。第一个ID配置为消息ID过滤器,第二个ID为过滤器屏蔽。过滤器屏蔽的每个零位屏蔽已配置的ID过滤器的相应位位置。

注:如果所有位均等于1,则仅当接收到的消息ID和消息ID过滤器相同时,才会发生匹配。 如果所有掩码位均等于0,所有消息ID均匹配。

高优先级消息

当收到高优先级消息时,FDCAN可以通知用户。 此通知可用于监视传入的高优先级消息的状态并启用对这些元素的快速访问。FDCAN在消息过滤器的帮助下检测到高优先级消息。 过滤器元素提供以下内容与高优先级邮件相关的设置:

(1)设置优先级并在过滤器匹配的情况下存储在FIFO 0/1中:如果此消息过滤器匹配,则FDCAN通知高优先级消息到达的信息,并将元素存储在Rx FIFO 0/1中。
(2)如果过滤器匹配,则设置优先级:如果此消息过滤器匹配,则FDCAN会通知有关高优先级的信息消息到达,但不存储元素。

接收过滤流程图:


举例说明:
为了说明可以使用的不同类型的过滤器以及每种类型的结果,我们假设用户想要配置FDCAN:

(1)拒绝所有标识符在[0x16到0x20]范围内的消息
(2)接受所有标识符等于0x15或0x120的消息,并将它们存储在FIFO 1中
(3)接受标识符等于0x130的消息并将其存储在Rx缓冲区索引4中
(4)接受具有与以下内容相对应的标识符的消息:
–bit[10..6] = 0b111 00
–bit[5..4] = 不管,任意值
–bit[3..0] = 0b00000

在这种情况下,必须将过滤器配置为经典位屏蔽过滤器,因为可接受的标识符对应于0b11100XX0000(其中x可以是0或1中的任何值)。 可接受的标识符是:
– 0b111 0000 0000(0x700)
– 0b111 0001 0000(0x710)
– 0b111 0010 0000(0x720)
– 0b111 0011 0000(0x730)

基本过滤器ID可以是0x700、0x710、0x720、0x730中的任何值。 屏蔽过滤器ID等于0b111 1100 1111(0x7CF)。下表介绍了标准11位消息ID过滤器的不同配置,如上面的例子。 每个标准过滤器元素包含:

(1)SFT位(标准过滤器类型)
(2)SFEC位(标准过滤器元素配置)。
(3)SFID1位(标准过滤器ID1)
(4)SFID2位(标准过滤器ID2)



第一个过滤器配置为拒绝ID为[0x16 ... 0x20]范围内的消息。
第二个过滤器配置为将ID等于双ID 0x15或0x120的消息存储在Rx FIFO 1中。
第三过滤器被配置为将ID等于0x130的消息存储在Rx缓冲区索引4中。

注意:如果将SFEC配置为“存储到"Rx buffer”,则将忽略SFT的配置。 验收过滤器停在第一次匹配。 因此,筛选器的顺序很重要。本示例以与用户配置扩展过滤器相同的方式配置标准过滤器(请参阅产品数据表以了解更多详细信息)。FDCAN的众多过滤器可能性允许在硬件中进行复杂的消息过滤,这使得软件过滤冗余并节省CPU资源。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 5 天前 | 显示全部楼层
多谢楼主的文档,看完之后,理解滤波的细节
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 14:59 , Processed in 0.236704 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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