以STM8为例的CAN滤波器内容

前言在can协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符的值决定软件是否需要该报文;如果需要,就拷贝到ram里;如果不需要,报文就被丢弃且无需软件的干预。为满足这一需求,becan为应用程序提供了个可配置的、位宽可变的6个(0-5)过滤器组,用于只接收那些软件需要的报文。硬件过滤的做法节省了cpu开销,否则就必须由软件进行过滤,从而占用一定的cpu资源。
滤波器设置滤波器设置包括下面几个寄存器:can滤波模式寄存器1 (can_fmr1)和can滤波模式寄存器2(can_fmr2)、can滤波配置寄存器1 (can_fcr1)、can滤波配置寄存器2 (can_fcr2)和can滤波配置寄存器3 (can_fcr3),can滤波组i寄存器x (can_firx) (i = 0 。。 5, x = 1 。。 8)。
滤波模式寄存器用于设置滤波器为标识符列表模式和掩码模式,滤波配置寄存器用于开启或关闭滤波器和滤波器的宽度设置,滤波组用于具体滤波设置。6个可配置的位宽可变的过滤器组,通过fscx0(x=1..6)和fscx1(x=1..6)设置滤波宽度,
就32位滤波器设置进行解读,can报文分为标准帧和扩展帧,标准帧id11位,扩展帧29位,id与滤波配置映射关系如上表所示,如滤波模式设置可知可以分为两个id或者一个id+mask。当需要过滤某一段id时,使用id+mask模式,当过滤具体id时直接使用id模式即可。如果我的扩展id是0x12345678 ;想只接收0x12xxxxxx的标识符号,该如何设置滤波器,此处采用32位滤波器0进行滤波配置,因此fsc00 = 1;fsc01 = 1;fmh0 = 0;fml0 = 0;扩展id为0x12345678 (0001,0010,0011,0100,0101,0110,0111,1000)将扩展帧id填入can帧id格式中
rtr位我们设置为0表示数据帧,ide位设置为1表示扩展id,因为我们的id是29位的,所以rtr = 0;ide = 1;
如果要关心到具体的某一个比特位置;如果要过滤让它只接收0x12xxxxxx的表示符号;这时候要根据它实际在identify中的位置去修改idmask ; 前八个比特,对应的就是黄色和绿色的部分,所以其他的颜色,可以都填0表示不需要关心,则这里填入:1 1 1 1 ,1 x x x,我们这里填0xf8 ;can_f0r1 = 0x91; can_f0r2 = 0x00; can_f0r3 = 0x00; can_f0r4 = 0x00;can_f0r5 = 0x91; can_f0r6 = 0x00; can_f0r7 = 0x00; can_f0r8 = 0x00;同理,对于下面的配置是只接收标准id= 0x321(0011,0010,0001)的id(也是32位过滤器),因为也是数据帧,所以rtr = 0,标准的id,所以ide = 0 ;
can_f0r1 = 0x64; can_f0r2 = 0x20; can_f0r3 = 0x00; can_f0r4 = 0x00;can_f0r5 = 0xff; can_f0r6 = 0xe0; can_f0r7 = 0x00; can_f0r8 = 0x00;
设置过滤器0只接收id为0x1828a0ef和0x1828a0ee的数据帧。(工作在标识符列表模式)首先我们把这两个id写成二进制:0x1828a0ef:0001 1000 0010 1000 1010 0000 1110 11110x1828a0ee:0001 1000 0010 1000 1010 0000 1110 1110然后我们将0x1828a0ef
二进制的格数据组成如上图mapping所示的格式can_fxr1:1100 0001 0xc1can _fxr2:0100 1001 0x49 //这里有个rtr位我们设置为0表示数据帧,ide位设置为1表示扩展id,can _fxr3:0100 0001 0x41can _fxr4:1101 1110 0xde
这时我们工作在标识符列表模式,identifier/mask的寄存器相当于identifier使用。
再将0x1828a0ee二进制的格数据组成如上图mapping所示的格式can _fxr5:1100 0001 0xc1can _fxr6:0100 1001 0x49 //这里有个rtr位我们设置为零表示数据帧,ide设置为1表示扩展idcan _fxr7:0100 0001 0x41can _fxr8:1101 1100 0xdc
16位配置模式也经常使用,如can网络管理中往往涉及到网络管理id-0x4xx,因此需要利用id和mask模式,其余的采用id模式,可以建立滤波器设置寄存器数组。
0x400网段,0x330,0x3200x400:
展开 0000 0100 0000 0000,采用标准帧数据帧格式0x330: 展开 0000 0011 0011 00000x320:
展开 0000 0011 0010 0000can_f0r1: 100 0000 0 0x80can_f0r2: 000 00 000 0x00can_f0r3:
111 0000 0 0xe0can_f0r4:
00000000 0x00can_f0r5: 011 0011 0 0x66can_f0r6: 00000000 0x00can_f0r7: 011 0010 0 0x64can_f0r8: 00000000 0x00fsc00 = 0; fsc01 = 1; fmh0 = 1; fml0 = 0; fact0 = 1;
在以往的项目中用过多个品牌的单片机,包括国产的,一直感觉st的滤波器设置比较麻烦,每次用到的时候都要花较长时间去回忆。


研究团队开发出人造光感受器恢复盲鼠视力
CANopen协议编码器
USB型温湿度记录仪的典型应用案例分析
PLC编程语言如何选择
气体传输法兰预前保护治理——避免法兰密封垫片泄漏及外腐蚀
以STM8为例的CAN滤波器内容
湿式格子型球磨机轴承位磨损后有效的维修方法
如何在层堆栈管理器中定义单层板?
三大运营商的携号转网即将到来,未来我们携号转网的日子不远了
区块链技术开发入门需要知道什么
高速风筒吹风机应用方案——吹风机PCBA方案设计
如何制作由蓝牙控制的RGBLED立方体
人工智能领域近期的蓬勃发展基于哪三个重要因素
预算3000元左右:一加5、小米6、努比亚Z17、荣耀9和荣耀V9都是不错的选择
mysql中replace的用法
音频常见的三种接口
苹果电视上市几成定局:颠覆智能电视认知
沃尔玛开了一家智慧零售门店 并非无人超市
如何使用信号发生器RWC2010C进行专项测试
人工智能和物联网是共生技术,会是数字业务价值创造新平台的基础