STM32 CAN通讯过滤器使用总结及代码分析

一、简介

在 CAN 协议中,消息的标识符与节点地址无关,但与消息内容有关。因此,发送器将消息广播给所有接收器。在接收到消息时,接收器节点会根据标识符的值来确定软件是否需要该消息。如果需要,该消息将复制到 SRAM 中。如果不需要,则必须在无软件干预的情况下丢弃该消息。

二、详细各概念

2.1 筛选器组

bxCAN 控制器为应用程序提供了 28 个可配置且可调整的筛选器组 (CAN1和CAN2分享28个过滤器组27-0)。在互联型产品中,bxCAN 控制器为应用程序提供了 14 个可配置且可调整的筛选器组 (13-0),以便仅接收软件需要的消息。此硬件筛选功能可以节省软件筛选所需的 CPU 资源。每个筛选器组 x 均包含两个 32 位寄存器,分别是 CAN_FxR0 和 CAN_FxR1。

sFilterConfig.BankNumber = n;

此句代码针对双CAN的STM32产品,配置CAN2可使用的过滤器组的起始编号,n取值范围为0~28。从编号为n的过滤器组到编号为27的过滤器组分配给CAN2使用。如果此句配置不在代码中明确写出来,默认值就是14. 即硬件默认将编号为14起往后的过滤器组分配给CAN2使用。

(配置为32位模式则一个屏蔽要占用两个过滤器组,如下图231)

2.2 过滤器的过滤模式

        STM32提供两种过滤模式供用户设置:屏蔽位模式和标识符列表模式。

2.2.1 屏蔽位模式

为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。
在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。

2.2.2 标识符列表模式

为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。
在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符相同。

2.3 过滤器的位宽

        每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过滤器组可提供:
        ●1个32位过滤器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位
        ●2个16位过滤器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位

2.4 过滤器组的过滤模式和位宽设置

        过滤器组可以通过相应的CAN_FMR寄存器(CAN过滤器主控寄存器)配置。但是不是什么时候都可以直接配置,在配置一个过滤器组前,必须通过清除CAN_FAR寄存器(CAN过滤器激活寄存器)的FACT位,把它设置为禁用状态。然后才能设置或设置过滤器组的配置。

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值