------------------------------------------------------------------------------------------------ —————————————————————————————————————— 01-STM32 之 CAN -CAN ID 过滤器分析 STM32 之 CAN ---CAN ID 过滤器分析 1 前言在 CAN 协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此, 发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时, 根据标识符(CAN ID) 的值决定软件是否需要该报文; 如果需要, 就拷贝到 SRAM 里; 如果不需要, 报文就被丢弃且无需软件的干预。为满足这一需求, bxCAN 为应用程序提供了 14 个位宽可变的、可配置的过滤器组(13~0) ,以便只接收那些软件需要的报文。硬件过滤的做法节省了 CPU 开销,否则就必须由软件过滤从而占用一定的 CPU 开销。每个过滤器组x由2个32 位寄存器, CAN_FxR 0和 CAN_FxR 1 组成。为了让大家了解 STM32 的 bxCAN 的接收过滤机制,首先大家需要了解几个概念。 2 几个重要的概念 过滤器组 STM32 总共提供 14 个过滤器组来处理 CAN 接收过滤问题, 每个过滤器组包含两个 32 位寄存器 CAN_FxR0 和 CAN_FxR1 组成, 在设置为屏蔽位模式下, 其中一个作为标识符寄存器, 另一个作为屏蔽码寄存器。过滤器组中的每个过滤器,编号( 叫做过滤器号)从0 开始,到某个最大数值( 这时最大值并非 13, 而是取决于 14 个过滤器组的模------------------------------------------------------------------------------------------------ ——————————————————————————————————————式和位宽的设置, 当全部配置为位宽为 16, 且为标识符列表模式时, 最大编号为 14*4-1=55 )。 过滤器的过滤模式 STM32 提供两种过滤模式供用户设置: 屏蔽位模式和标识符列表模式。 屏蔽位模式为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。在屏蔽位模式下, 标识符寄存器和屏蔽寄存器一起, 指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。 2 . 标识符列表模式为了过滤出一个标识符, 应该设置过滤器组工作在标识符列表模式。在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此, 不是采用一个标识符加一个屏蔽位的方式, 而是使用 2 个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符相同。 过滤器的位宽每个过滤器组的位宽都可以独立配置, 以满足应用程序的不同需求。根据位宽的不同,每个过滤器组可提供: ●1个 32 位过滤器, 包括: STDID[10:0] 、 EXTID[17:0] 、 IDE 和 RTR 位●2个 16 位过滤器,包括: STDID[10:0] 、 IDE 、 RTR 和 EXTID[17:15] 位 过滤器组的过滤模式和位宽设置------------------------------------------------------------------------------------------------ ——————————————————————————————————————过滤器组可以通过相应的 CAN_FMR 寄存器( CAN 过滤器主控寄存器)配置。但是不是什么时候都可以直接配置, 在配置一个过滤器组前,必须通过清除 CAN_FAR 寄存器( CAN 过滤器激活寄存器)的 FACT 位,把它设置为禁用状态。然后才能设置或设置过滤器组的配置。? 通过设置 CAN_FS1R ( CAN 过滤器位宽寄存器) 的相应 FSCx 位, 可以配置一个过滤器组的位宽。? 通过 CAN_FM1R ( CAN 过滤器模式寄存器)的 FBMx 位,可以配置对应的屏蔽/ 标识符寄存器的标识符列表模式或屏蔽位模式。( 见后续 节) 应用程序不用的过滤器组,应该保持在禁用状态。关于过滤器配置,可参见下图:图1 过滤器匹配序号一旦收到的报文被存入 FIFO , 就可被应用程序访问。通常情况下, 报文中的数据被拷贝到 SRAM 中;为了把数据拷贝到合适的位置,应用程序需要根据报文的标识符来辨别不同的数据。 bxCAN 提供了过滤器匹配序号,以简化这一辨别过程。根据过滤器优先级规则, 过滤器匹配序号
01-STM32之CAN -CAN ID过滤器分析 来自淘豆网m.daumloan.com转载请标明出处.