CAN筛选器之ID配置

 目录

列表模式

16位列表模式

32位列表模式

掩码模式

16位掩码模式

32位掩码模式


       初次理解,如有错误,请多多指教,欢迎交流!

         CAN通信的ID有标准ID和扩展ID,其有四种模式,即列表模式和掩码模式(两种模式的区别网上资源较多,此处不做具体区别,其主要却别是列表模式下的ID较为具体(每一位都是明确的),而掩码ID),其中列表模式和掩码模式各有16位宽和32位宽。可能说的不够准确,如下图:

 下面说明下四种ID的寄存器的配置。

备注:1、标准ID有10位,扩展ID是29位。

2、位宽为16的ID,是没有扩展ID的。

列表模式

16位列表模式

1 StdId =0x6af;              
2  
3  
4 0x6af:            0110 1010 1111
5 0x6af<<5:    1101 0101 1110 0000   

32位列表模式

 1 StdId =0x6af;              
 2 ExtId =0x1803f601;
 3 
 4 
 5 0x6af:            0110 1010 1111
 6 0x6af<<5:    1101 0101 1110 0000    (高16)
 7 
 8              0000 0000 0000 0000
 9            | 0000 0000 0000 0000     (低16) 
10 其中低16位等价于 0 | CAN_Id_Standard
11 因为#define CAN_Id_Standard   ((uint32_t)0x00000000) 
12 ----------------------------------------------------------------
13 0x1803f601:                    0001 1000 0000 0011 1111 0110 0000 0001
14 0x1803f601<<3:                 1100 0000 0001 1111 1011 0000 0000 1000 
15 (0x1803f601<<3)>>16:           0000 0000 0000 0000 1100 0000 0001 1111   
16 (0x1803f601<<3)>>16 & 0xffff:  0000 0000 0000 0000 1100 0000 0001 1111    (高16(取低16位))
17 
18 
19 0x1803f601<<3:                   1100 0000 0001 1111 1011 0000 0000 1000 
20 
21 0x1803f601<<3 & 0xffff:          1100 0000 0001 1111 1011 0000 0000 1000   
22 (ExtId<<3)&0xffff | CAN_ID_EXT: 1100 0000 0001 1111 1011 0000 0000 1100  (低16(取低16位)
23 其中 #define CAN_Id_Extended   ((uint32_t)0x00000004) 

掩码模式

16位掩码模式

 1 StdId =0x6af;              
 2 
 3 
 4 0x6af:            0110 1010 1111
 5 0x6af<<5:    1101 0101 1110 0000   
 6 
 7 mask:         1111 1111 1111 1111
 8 筛选后:      1101 0101 1110 0000 
 9   
10 mask中某一位为1时,必须一致,举例如下
11 验证码: 0110 0001 1100
12 掩码:   1100 0011 1010
13 则筛选后的ID为:01xx xx01 1x0x (其中x可以为1或者0),则ID在100 0001 1000 ~ 111 1101 1101范围内的ID都会被筛选。

32位掩码模式

 


参考博客:

 (4条消息) 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结_bonson2004的博客-CSDN博客

posted @ 2022-01-22 10:48  千样野心  阅读(1169)  评论(0)    收藏  举报