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

基于STM32的经验分享之CAN控制器原理与配置

[复制链接]
攻城狮Melo 发布时间:2023-3-21 21:41
一、CAN控制器简介7 N- F) |) P# b6 e& F1 k
" v  m; M- g% O  r! c: ?
STM32自带了基本扩展CAN外设,又称bxCAN,bxCAN的特点如下:0 Z9 w/ t$ @9 L; R% Z
1、支持CAN协议2.0A和2.0B主动模式" d% i" n5 U6 b3 x0 G# E
2、波特率最高达1Mbps; L. u, @" _& _: k8 ^; ?
3、支持时间触发通信
6 z- r2 \, H  ]' y: ~: j4、具有3个发送邮箱, W- A* M: s" N; w0 ]- ~% l* t  T
5、具有3级深度的2个接收FIFO. A. ~+ `" M$ {9 ~. Q- {9 d
6、可变的筛选器组(也称过滤器组,最多28个)/ _. S' n3 F3 A' i

( g1 _; A' v# R1 I8 n CAN控制器简介-模式1 ^" f9 E+ y" R' @6 t
工作模式) I( X. ~- J! i
1)初始化模式(INRQ=1,SLEEP=0)
7 F) s; F. d. U$ V# I2)正常模式(INRQ=0,SLEEP=0)! @6 U. H/ L5 E
3)睡眠模式(SLEEP=1)
9 J# J' k- z$ j( M/ r2 y
通过CAN_MCR寄存器控制INRQ和SLEEP* i" d0 x1 @4 C% M; a! L# N7 u
测试模式& w+ P1 R5 M  D4 d+ V1 W
1)静默模式(LBKM=0,SILM=1)7 n8 g1 x% g: E/ j3 T
(静默模式下bxCAN可以接收CANRX但是不会发送任何CANTX,可以监控总线上的数据)# u* z$ Q% Z6 d' V
2)环回模式(LBKM=1,SILM=0)
0 @+ I) u1 k  @2 M(环回模式下bxCAN可以发送CANTX但是不会接收任何CANRX。它发送的数据,发送与接收会形成一个环路,从而达到自发自收的作用,可以自己检测发送的数据是否发送出去)% p! q  `/ j# F7 b: a
3)环回静默模式(LBKM=1,SILM=1)
) o! }+ X# S$ T# b8 j(不管总线上如何都不影响,自发自收,“闭关锁国”): \! p1 Q& g6 x8 D0 x
通过CAN_BTR寄存器控制LBKM和SILM
/ E0 a9 c  \2 ~. W9 L- e- a& Z
0 o* S8 i2 J, r; J0 k- u 标识符筛选器  o8 E$ H! P, g+ a+ K
1、CAN的标识符不表示目的地址而是表示发送优先级。接收节点根据标识符的值来决定是否接收对应消息。' Y* Y0 L) N7 X; k
2、STM32 CAN控制器提供了28个可配置的筛选器组,可以降低CPU处理CAN通信的开销。
! S! l! c2 z" I' v/ b3、STM32 CAN控制器每个筛选器组由2个32位寄存器组成(CAN_FxR1和CAN_FxR2,x=0~27)。根据位宽不同,每个筛选器组可提供:1个32位筛选器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位;2个16位筛选器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位/ }+ ]6 V. m( u+ Z/ ]; w
4、筛选器可配置为:屏蔽位模式和标识符列表模式。在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟筛选器标识符相同。
5 a/ r5 o: ^  t5 _% b

3 X  L% u" I1 @5 K8 L2 p; q通过CAN_FM1R和CAN_FS1R可配置筛选器的位宽和模式
4 Y$ S* L% K5 w+ L

/ {, U* M# E) k" I! `
ef78eb2b71bf4a48a7fd4b2fecb3409e.jpg
6 {" a5 c' B4 @* |' x
  u. q- i" D- V/ V( _2 f

  _0 r) y* @. n7 @+ L$ m4 I  O1、为了过滤出一组标识符,应该设置筛选器组工作在屏蔽位模式。, j6 j9 P& a! f
2、为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式
7 z/ N5 F4 o9 `. Q3、应用程序不用的筛选器组,应该保持在禁用状态(通过CAN_FA1R设置)。
- r  ]& ?/ o  P5 ~- O  c* ]2 ?筛选器组中的每个筛选器,都被编号为(筛选器编号)从0开始,到某个最大数值,取决于筛选器组的模式和位宽的设置。
& k' K3 a/ c1 [9 o" L4、通过CAN_FFA1R的设置,可以将筛选器组关联到FIFO0/FIFO1$ ?" h& K, j$ U) r

; I5 E2 v$ f! L; A! T2 rCAN发送流程:/ P( {+ n3 T' ]; Y* L

: g2 j) y0 k: E. E0 Y9 u5 d
f7af5fe7fce04aff9dbef09a79d8c88a.jpg ) ^6 I  w/ F3 `+ Q5 L0 F

2 Q* L- c7 Y3 w. U7 ~9 F2 W3 w2 K程序选择1个空置的邮箱(TME=1)—>设置标识符(ID),数据长度和发送数据—>设置CAN_TIxR的TXRQ位为1,请求发送—>邮箱挂号(等待成为最高优先级)—>预定发送(等待总线空闲)—>发送—>邮箱空置
. F% \) m1 U8 B: p7 G+ w2 g
4 L" o' u+ Q3 l
挂号期间和预定期间如果不想发送了可以ABRQ=1强制停止发送,发送的时候如果发送失败会进行再次发送尝试,当尝试次数达到最大时就会停止发送。4 ]/ A2 H& n/ z. u. [2 J. g
0 ~" b2 M! G7 N2 e6 s5 s: d/ ^/ p

/ I' `& r9 k2 E1 y& o4 a1 P# v! V% SCAN发送流程:* w- m( s$ i' M8 \8 e$ f6 R# v& T0 s

7 s; D6 P5 e5 c4 W' j& F8 F9 x
c5f1832615ca4bd0ba117b8f3fc47543.jpg
! T. z6 V! w+ H" w2 V, b8 v

: {/ G5 G8 C, g6 jFIFO空—>收到有效报文—>挂号_1(存入FIFO的一个邮箱。这个由硬件控制我们不需要理会)3 U" K  _7 v5 p  }

8 g5 ^0 m7 q8 \" h  c8 N—>收到有效报文—>挂号_2—>收到有效报文—>挂号_3—>收到有效报文—>溢出。
/ ^1 b5 Q6 \* Q) v4 A9 q% f/ y" i4 M- p' J* M
CAN收到的有效报文,存储在3级邮箱深度的FIFO中。FIFO接收到的报文数,我们可以通过查询CAN_RFxR的FMP寄存器来得到,只要FMP不为0,我们就可以从FIFO读出收到的报文。, H% J; @% B; G4 A% p! r5 {

( [- F# F  f2 z+ v$ E9 V报文FIFO具有锁定功能(由CAN_MCR,RFLM位控制),锁定后,新数据将丢弃,不锁定则新数据将代替老数据。  v5 u" [* p, v; v
! h. j4 O5 y$ E4 M/ }
~~STM32的CAN位时序,如下图所示:~~5 Y2 y0 d: ~2 U2 O
# P, F; n* d8 s/ y; G  E0 F, h1 N
398d7cadc08542a58266e60d7b1a9026.jpg
/ }  X( ^$ w- ?- j/ Q
3 x  ]4 m) M4 R5 e7 N(STM32的CAN将传播时间段和相位缓冲时间段1合并为时间段1)
3 q2 I4 J* [. F% ^; M5 M7 ]* @! \
, {4 f" U# D4 n! cSTM32F407,设TS1=6、TS2=5、BRP=5,波特率=42000/[(7+6+1)*6]=500Kps。% [3 k3 e1 t7 h2 r2 w: d* j4 g

; U& Q+ |* r) ?6 B9 @4 n
& U* O: {6 J3 ~" u. W% j3 T
二、CAN控制器--寄存器简介
+ ~& o  U* U- ]# ^" i+ O- t- _/ Y

' S' r4 \; u8 h9 Y! E
a0f05929b11e49458f73736cd4e507b8.jpg
! P- _+ r2 t: P" X/ c  f4 c" K
" w, `3 v' z+ q2 b- P9 M+ w CAN主控制寄存器(CAN_MCR)0 H1 ^+ E8 E' ~  [, d( G
: k+ a, Z+ m& Y5 |$ i* o' t
48142c9ad27740378eabcd794e21b1e0.jpg
. w$ {. I1 |9 H1 I( T8 n

& C$ u2 x  Y' C1 P+ j" f6 h( n% yINRQ位:设置INRQ=0,可使CAN从初始化模式进入正常工作模式。设置INRQ=1,可使CAN从正常工作模式进入初始化模式。
5 o# B; s. w# W+ R8 C8 `& H5 v2 C/ M* e$ h% c: Y8 ^' u+ W( \; s
CAN初始化时,先设置INRQ=1,进入初始化模式,进行初始化(尤其是CAN_BTR的设置,该寄存器必须在CAN正常工作之前设置),之后再设置INRQ=0进入正常工作模式。
4 Y% b, j7 J8 l9 m3 R5 w
  a2 ]5 r5 W( J( y- T
CAN位时序寄存器(CAN_BTR)6 J/ E" ^' p  s* K* N: |' M

) l; o+ N, }" E5 N' t$ ]# ^% g
c5c35be6358c413e9b58e27ee1fbd616.jpg ! q8 o: e) F# O' a* X
8 t4 u% Y! W6 w$ t) Q: Y

# o9 Q# u) m: G7 k% ?) w. @" wCAN接收FIFO寄存器(CAN_RF0R/CAN_RF1R)  p4 `) F& ?+ P5 A% c8 H9 B

& g6 \3 d+ `/ ]9 s" R+ l
4da30d99b5cd4719bba6422723ca7d76.jpg
; P! M6 }6 V$ H9 u3 x% u2 a$ u
- ~3 i0 U/ u4 i3 M' _: U' L; u9 iCAN_RF0R用于控制FIFO0;CAN_RF1R用于FIFO1控制。+ r6 q5 L1 v3 N( U* t

7 I! j5 M4 M8 ~( {( oCAN发送邮箱标识符寄存器(CAN_TIxR)(x=0~2)/ E# u% X# s! J

. @" |% g- T- H* k3 A6 K
8db56047549949be922d0bb75ab20afc.jpg
; L1 I/ y4 t; y% J8 |- j. S
- y0 W  q; K5 a8 M6 c3 y+ B
CAN发送邮箱数据长度和时间戳寄存器(CAN_TDTxR)(x=0~2)
; V) V/ p: n5 P" Q5 A& W7 h& w7 q  f* J# y
fb33380a7d444ac78aa53c87582acb19.jpg
. H5 y' k/ S! l' m
  s- N$ D' p/ I, D0 _. ]2 w  {CAN发送邮箱数据寄存器(CAN_TDLxR/CAN_TDHxR)(x=0~2)
: @; n. i8 ]/ p- l/ n, C8 N
& l2 G# N: e" V8 z; `1 @& @
b71d9dd1da35446f951c60a656f3dcc0.jpg 3 u" @) p- w# A

: w9 u) B/ f) Z: K& R图为CAN_TDLxR寄存器的描述,用于存储低4个字节的数据。CAN_TDHxR寄存器与之类似,用于存储高4个字节的数据。要发送的数据就是存储在这两个寄存器。
3 S" ]8 L( \' X6 r) @& s% l. \9 f; e$ H% I" K& c7 j! D: p
+ i2 V' u$ ^" P1 e1 U9 k9 K) n6 z/ Y( N
CAN接收FIFO邮箱标识符寄存器(CAN_RIxR)(x=0/1), M6 r2 `# `- ~5 l
4 L& J/ d3 F" Q& O& j6 |
c8d44acce479495a83dc7b26b315c760.jpg
, a5 D& G4 Q, A" m, L
3 K( l% ]4 r$ _. A4 _CAN接收FIFO邮箱数据长度和时间戳寄存器(CAN_RDTxR)(x=0/1)
+ Z5 X2 ^5 A4 X! J) D4 `( \/ p8 L1 c7 ~9 M, ~) j7 q9 e. j& O
48d3529655a64ed4ba03f4192e100d8d.jpg
9 E! A2 h3 G6 x4 C" dCAN筛选器模式寄存器(CAN_FM1R)5 c- y$ g- F7 i! B! N
: c) E, f: y/ {- D2 P( A0 L
77cc47b02c6f455fb3cfeb0e426fe5f1.jpg
7 F" c+ u3 J$ G" H$ v* j' c- n' O4 ]; ~- M4 D4 f
该寄存器设置筛选器的工作模式,必须再CAN_FMR寄存器FINIT=1时配置。
3 E$ R/ R# R! y8 V# }0 ]  D

; s( z' Q3 ~# }6 T* x9 @CAN筛选器尺度寄存器(CAN_FS1R)
" u' a) Z. e2 U0 d# T  V1 H. ^" i- h8 X, K- I& E$ E7 s' Z
12cceb49089b44e6bc7dcad194605d5c.jpg
4 A1 m3 [- F& O9 ~8 ^8 T; b0 }8 I* }2 r0 _
2 S* [9 ]* |6 S# l9 m* z* i: }5 @
该寄存器用于设置筛选器的位宽,必须在CAN_FMR寄存器FINIT=1时配置。
4 W& A) V1 }) q7 ~( K6 X
* a3 F- }$ c- k. K- {CAN筛选器FIFO关联寄存器(CAN_FFA1R)( h/ `: v) A# S! J5 m, l- r) A9 t+ {
) X4 s; E" @' ^) Z' P
caaa8198119e4182bdfcdd33d898cbc1.jpg
, g) v; S' J# n( h& e0 S  y, Y, R- G/ l) `3 n
该寄存器设置报文通过筛选器组之后,被存入的FIFO,如果对应位为0,则存储到FIFO0;如果为1,则存放到FIFO1。该寄存器只能在过滤器处于初始化模式(CAN_FMR寄存器的FINIT=1)下配置。
- p* w' i: S& V+ e* j8 B! V0 u5 c  ?0 L& y$ P- V
. ]* [/ C8 Y8 b% Z5 X+ l; N
CAN筛选器激活寄存器(CAN_FA1R)
% b9 C% [( D5 M2 X: L6 z( M+ s' K  L1 w* e+ D
8b95c073f5364f32b222afafcaa40319.jpg % X  ?! q6 H! O% a
# `4 q3 m3 U! ^4 l
该寄存器用于设置筛选器组的开启和关闭。对应位置1,即开启对应的筛选器组;置0则关闭该筛选器组。
5 A2 x+ ~; N9 X" K, j5 H% d3 \
) o3 d+ `, W4 p# o$ q" Y
CAN筛选器组i寄存器x(CAN_FiRx)(i=0~27,x=1/2)
3 X8 [* s% P0 [3 M/ X* _  t: k

. p# f; _4 T. x/ r+ Q
11ac5d2269c34ea994d95424a46dbe4f.jpg
$ ^" S9 N2 R4 s% b/ n, G' N- @; _% B* V8 o- Q4 M* C6 w
每个筛选器组的CAN_FiRx都由2个32位寄存器构成,即:CAN_FiR1和CAN_FiR2。根据过滤器位宽和模式的不同设置,这两个寄存器的功能也不尽相同。% T! ]4 S3 J7 ]5 y% X+ A2 J

; S7 s" _3 X& q  v# t

. p8 T: s5 m: p2 z& D8 h3 G三、初始化流程
) W8 Q* D, j  k1、配置相关引脚的复用功能,使能CAN时钟。$ e+ h1 }7 m4 @9 A
要用CAN,先要使能CAN的时钟,CAN的时钟通过APB1ENR的第25位来设置。其次要设置CAN的相关引脚为复用输出,这里我们需要设置PA1为上拉输入(CAN_RX引脚)PA12为复用输出(CAN_TX1引脚),并使能PA口的时钟。9 v& R$ F- l8 m- Y+ A( L& ~9 W6 u
2 ]( c( w. Z7 @0 f0 ?
2、设置CAN工作模式及波特率等。( J  ~' {; K; F: S' X
通过先设置CAN_MCR寄存器的INRQ位,让CAN进入初始化模式,然后设置CAN_MCR的其它相关控制位。再通过CAN_BTR设置波特率和工作模式(正常模式/环回模式)等信息。最后设置INRQ为0,退出初始化模式。: V: D8 @3 w: {
" {8 Q0 V+ p0 N7 d+ ~
3、设置滤波器。
" _6 T7 h, _$ d例:使用筛选器组0,并工作在32位标识符屏蔽位模式下。先设置CAN_FMR的FINIT位,进入初始化模式,然后设置筛选器组0的工作模式以及标识符ID和屏蔽位。最后激活筛选器,并退出初始化模式。9 [1 \1 ^7 D" C8 J0 {2 A1 O
————————————————
8 q. O& H5 B2 K+ y. i7 ~+ k版权声明:三只树懒: n. ?: y' f& U* G2 N6 y

% ?3 A8 q! V% {% X( l如有侵权请联系删除
) D4 _# a6 V$ c7 d0 P& m! E+ A# e% @8 W  v" c" I: Y/ k5 b  B

( J' O3 O5 D) K* r2 c2 t& p& R& G% S5 s# Q
收藏 评论0 发布时间:2023-3-21 21:41

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版