你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8单片机CAN滤波器的设置

[复制链接]
STMCU小助手 发布时间:2022-9-10 18:14
今天和大家分享一下CAN滤波器相关的内容,滤波器主要用来设置CAN的接收ID,当CAN总线上所挂接的节点较多,数据量较大的话,对单节点的接收判断可能造成较大的压力、占用较多的资源。为了解决这个问题,可以通过设置滤波器实现只接收特定ID。ST系列单片机的滤波器设置非常绕,很容易把自己绕晕了,下面以STM8为例和大家分享一下。4 d2 L, S/ E* M) `

$ I. s  O4 m+ w; e
前言在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符的值决定软件是否需要该报文;如果需要,就拷贝到RAM里;如果不需要,报文就被丢弃且无需软件的干预。为满足这一需求,beCAN为应用程序提供了个可配置的、位宽可变的6个(0-5)过滤器组,用于只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由软件进行过滤,从而占用一定的CPU资源。
% @0 ^) N$ }: W+ C# _- n
) V' q6 g$ r9 k& G- R  S
2 k3 W: S+ F& @7 Q  Q
滤波器设置! |' n7 l1 F0 n7 ]& }0 K
滤波器设置包括下面几个寄存器: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)设置滤波宽度,
; v0 D' J7 z. z

6 f9 `9 o5 U/ F. l

4 }$ h5 u% K* C) t8 ]/ a6 R
微信图片_20220910181222.jpg
* v; y9 k$ e. r3 w$ X
* F/ b1 R+ |9 w! h' s

# M- k: \% R9 Y就32位滤波器设置进行解读,CAN报文分为标准帧和扩展帧,标准帧ID11位,扩展帧29位,ID与滤波配置映射关系如上表所示,如滤波模式设置可知可以分为两个ID或者一个ID+Mask。当需要过滤某一段ID时,使用ID+Mask模式,当过滤具体ID时直接使用ID模式即可。/ m4 E, }0 o# x9 t. k: G: Z7 P
如果我的扩展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格式中
0 @  g$ Z7 [: x8 r3 x
  Y1 |! X3 a8 V5 A% D! i! N
微信图片_20220910181217.jpg
0 k' Q1 r4 U: _0 y) c
7 @+ @3 \9 X2 H$ o% @- ?

/ d- O0 G: x9 ?9 g2 i' VRTR位我们设置为0表示数据帧,IDE位设置为1表示扩展ID,因为我们的ID是29位的,所以RTR = 0;IDE = 1;0 T8 ?8 x$ C  L' V: {1 q5 z
在滤波器中填充如下:5 r8 Q7 l+ T. ^7 k- O: r& l
) X3 [) ?0 w. b; J( ^  n! w

6 w( j2 b2 }# j3 Q
微信图片_20220910181214.jpg

* \9 e6 Y$ P; A, J3 W' }4 |
, y! j3 t2 E4 W" J. ?5 b% z
% e* c. O6 j& I3 o
如果要关心到具体的某一个比特位置;如果要过滤让它只接收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 ;所以填入到:
7 s$ [; \* R/ J3 a7 {6 u$ n' v( N6 m9 v* R5 G

5 B; @* }3 _* q2 F( N) u4 C4 z
微信图片_20220910181210.jpg

  a. ?  x' W' V, n% K$ U3 Q, [0 D7 N: I# g6 L- ]6 C( u6 `& m

- O9 v) q! V' V4 A+ X$ s8 R8 w, nCAN_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
" i( I7 F% q9 Z* y
# z& j9 {: }% b$ ^* ~
3 @; w3 t- K1 X
微信图片_20220910181206.jpg

* A+ @+ C3 u1 Y& o+ @" l. O' M

/ ^- I9 c7 O8 h, W% @+ S4 C16位配置模式也经常使用,如CAN网络管理中往往涉及到网络管理ID-0x4xx,因此需要利用ID和Mask模式,其余的采用ID模式,可以建立滤波器设置寄存器数组.
- J6 n3 f! u: V' W
  1. 0x400网段,0x330,0x320
    + ^: f5 z6 i/ i( ^: g
  2. 0x400: 展开 0000 0100 0000 0000,采用标准帧数据帧格式
    8 ~! o! u2 [$ N( r) ]. i+ G5 h
  3. 0x330: 展开 0000 0011 0011 0000
    + u9 A' S/ B' ]( |
  4. 0x320: 展开 0000 0011 0010 00005 n& q* W- x3 ]
  5. CAN_F0R1: 100 0000 0  0x80
    * @( J$ q& N- X9 T3 A
  6. CAN_F0R2: 000 00 000  0x00
    4 N8 F* |% _3 p3 h  t  `
  7. CAN_F0R3: 111 0000 0  0xE0
    4 f' y( C9 b; U& u# [6 l5 ~4 @
  8. CAN_F0R4: 00000000   0x00
    $ B  K3 ~2 S3 A1 `- [8 A
  9. CAN_F0R5: 011 0011 0  0x66
      v' T/ g. M2 B- d+ o: u
  10. CAN_F0R6: 00000000    0x005 k6 N" d! W0 D
  11. CAN_F0R7: 011 0010 0   0x64
    0 C& [! V1 y4 [
  12. CAN_F0R8: 00000000    0x00' p+ p3 }6 Z  J8 g
  13. FSC00 = 0; FSC01 = 1; FMH0 = 1; FML0 = 0; FACT0 = 1;
复制代码

0 |; I7 N0 P+ h7 T
微信图片_20220910181202.jpg
6 u; b7 {! L8 V. n$ p3 z3 N" S
6 |: o# ?# f! i7 T8 F. w5 D 微信图片_20220910181157.jpg
, s# K! Y/ P+ K- i  [9 z3 C4 q' E, q( S3 Y
+ k+ F  t! b5 B8 ~
在以往的项目中用过多个品牌的单片机,包括国产的,一直感觉ST的滤波器设置比较麻烦,每次用到的时候都要花较长时间去回忆。+ |0 F' H/ M" S1 p

* |: d" _0 S# ^9 Y4 o
赞 收藏 评论0 发布时间:2022-9-10 18:14

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版