Advertisement

STM32 CAN过滤器设计与实现的学习记录

阅读量:

最近查阅了STM32 CAN通讯中标识符过滤器的配置,发现其中存在诸多需要注意的细节。尤其是在使用ST库函数时,若过滤器处于屏蔽模式,并将屏蔽位设置为1,意味着对应标识符的每一位都必须完全匹配才能通过,这一点需要格外谨慎。

以一个实例来说明:假设过滤器长度为32位,工作模式为屏蔽模式,若要发送的标识符为0x1314,则其二进制表示为:0000 0000 0000 0000 0001 0011 0001 0100。

一、当过滤器完全无效时,所有接收到的标识符均可通过。

CAN_Filter寄存器内容:xxxx xxxx xxxxxxxx xxxx xxxx xxxx xxxx
CAN_FilterMask寄存器内容:0000 0000 0000 0011 1111 1111 1111 111

由于此时CAN_FilterMask寄存器的所有位均为零,表示对所有位都不关心。因此接收的数据ID(即标识符)无需与CAN_Filter寄存器中的任何一位进行匹配。

二、当过滤器完全有效时,则需根据MASK寄存器中指定的位进行比较。

部分匹配情况:

CAN_Filter寄存器内容:xxxx xxxx xxxxxxxx xxxx xxxxxxxx xxxx
CAN_FilterMask寄存器内容:xxx x x x x x x x x xx xx xx xx xx xx

全部评论 (0)

还没有任何评论哟~