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

基于STM32F1的CAN通信之IWDG

[复制链接]
攻城狮Melo 发布时间:2023-10-23 20:22
一、IWDG简介
' R+ G. E# I1 ~8 O' ^4 n, e独立看门狗(Independent Watchdog, IWDG),什么是看门狗?字面意思——看门的,有陌生人来,就会叫。实际在嵌入式领域里,看门狗也是这种作用,当软件程序发生故障或者程序跑飞时,看门狗会产生复位信号,复位系统。' X' [5 k, Z$ c8 A" w0 M6 u
: y+ I# g6 k) k* ^" P# \
二、STM32的IWDG
2 H% [' M" N/ d: e% U, H2.1 STM32的IWDG简介

% @; B/ P; v$ eSTM32内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。2 q: O: v9 m) Q
! P0 J2 |/ }6 U. B/ q4 M2 I* w
IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精 度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。
% `. x( n$ S5 C, U$ A

- W4 g9 X9 F% X4 ]. r• 自由运行的12位递减计数器5 P; j  ^  N! r3 @, u$ u! t
• 时钟由独立的RC振荡器提供(可在停止和待机模式下工作)  N# N6 s) |8 T1 G- h
• 看门狗被激活后,则在计数器计数至0x000时产生复位8 ^9 z. p& J( s& D5 ?/ R# E4 \

/ h& \7 G; p* k# K一旦使能IWDG,就无法关闭。只有等到复位之后,才能将IWDG关闭。
, z! [  G# ?6 N3 x( O7 f' Z  _
: Q$ T9 g# o  d2.2 喂狗
6 V. f$ D& Y3 z/ J0 n9 k/ K通过上面的简介可以知道,独立看门狗实际就是一个12位的递减计数器,当计数器的值递减到0的时候,就会产生复位。但是,如果我们在计数值递减到0之前,重新给计数器赋值,那么就不会再产生复位。这个操作叫做喂狗。
* I- H( n0 @$ R- R1 ~0 O
6 V* `4 b7 ~; n( x: \% V. q
( g+ j3 d1 y* A& Y6 K# G
2.3 IWDG框图$ M/ U0 m- v: C' H6 Z, [; Z
( h7 }- T6 h# X' {
微信图片_20231023202157.png
" X! t5 l) k. g

7 o4 ?+ k/ d2 s; K) `, }
IWDG框图

  N8 x; I3 w+ v9 H4 h6 K

+ h& X5 B9 E* g) w  X, y! @
IWDG的框图很好理解,IWDG由一个由独立的RC振荡器提供时钟。经过一个8位的预分频器对时钟信号进行分频。12位递减计数器按照设置好的初始值和输入时钟递减。当递减计数器递减到0时,产生独立看门狗复位。
& Y# H$ S0 o. L+ a/ C

3 u2 z$ K, L) p9 {在产生复位之前,如果将重装载寄存器传递给递减计数器,那么就会重新开始递减,这叫做喂狗。
( ]) R( h8 c$ H. ~5 I: l' ^

  @' W7 d( H, x0 z5 ?, T  R键寄存器也叫做关键字寄存器,往该寄存器写入不同的值,有不同的作用
* x) G' n3 t) E
8 z; T2 h7 w0 o% R8 S; Z• 写入0x5555——表示允许访问IWDG_PR和IWDG_RLR寄存器3 j6 ?7 i4 b8 w
• 写入0xAAAA——将重载寄存器的值传递到递减计数器,也就是喂狗
; w7 W! F# X1 l2 C; `6 M# t7 q• 写入0xCCCC——启动独立看门狗功能( i# U9 Y! I% [( t

$ K2 T9 x1 w4 J4 u4 O  ^
中文参考手册中给出了一个时间表6 q; h: d0 M( g; I- F% M' b4 @
7 v+ b3 l7 t  d8 J: z+ e
微信图片_20231023202153.png

1 w% W8 o" f9 R, s, J# c- N$ z
IWDG的溢出时间表

" P8 o( P/ y3 |3 ]
& G8 Z# F' S2 U( l8 L

0 R! `% d/ N: l+ x4 A8 C
时间的计算方法是,时间 = 重装载寄存器值  / (输入时钟频率 / 4 * 2^预分频系数)% y1 B4 d8 f7 z

/ _3 P! \, I) G为什么是4 * 2^预分频系数,可以看一下中文参考手册对于预分频寄存器的描述
( B2 u7 k# v  ~6 k  Z  P. P, A- X

4 X' B6 q1 m& z& o; b7 B
微信图片_20231023202150.png

- |. _1 U9 P' L8 h* ]# e
预分频寄存器描述

5 v/ z: {5 r: @

( a+ o+ h% B8 a" e* V3 z  o8 O' j' n
# e- U  o' {5 c7 V
三、IWDG配置步骤: Y  T& w9 v- V
• 开启寄存器访问(允许访问IWDG_PR和IWDG_RLR寄存器); D* ]4 s( {  c
• 设置IWDG预分频系数和重装载值$ C0 l; d6 {* y( _( ~4 ^( r. x' I
• 将重装载寄存器的值传递到递减计数器(喂狗)9 q5 i' ?1 l( k3 K
• 开启IWDG
+ U6 \2 d& Z& t" x
) U1 G$ m4 k) a+ p& C: S, V
/ ?; b+ ~4 h" H! {; G  _, f
四、IWDG配置程序
, V6 Q8 {2 X; p" `1 t/ N4 V44.1 IWDG初始化程序
0 l9 r4 S1 H; H" u# x
  1. /*/ n+ y* T$ M2 g3 j! G$ \& Q' Z
  2. *==============================================================================
    ( [. ?4 e' i8 P- t0 |8 b: N
  3. *函数名称:IWDG_Init6 H4 [4 h3 l0 j6 v7 R
  4. *函数功能:初始化IWDG) x4 e1 E; x& @3 ^6 o
  5. *输入参数:pre:预分频系数(0~6);rlr:重装载值(0~0xFFF)' b; U; C. M% `; x
  6. *返回值:无
    , ]/ Z) I7 p  W3 ~& L: a- e
  7. *备  注:独立看门狗复位时间计算公式:t=(4*2^pre*rlr)/40(ms)6 b2 K7 }: a" S( I7 W7 i9 G
  8. *==============================================================================
    , J6 R& Q% `2 t, z
  9. */
    " l6 T) G" ^1 v
  10. void IWDG_Init (u8 pre,u16 rlr)& A$ {+ D) Z% {1 `- E+ P
  11. {' {, l+ i* B4 l+ h1 I: T
  12.     IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);   // 取消寄存器写保护
      {' L8 b6 \$ A& D
  13.     IWDG_SetPrescaler(pre);   // 设置预分频系数 0-62 v9 \4 r7 L( g. f
  14.     IWDG_SetReload(rlr);   // 设置重装载值
    3 `2 \$ p) M" S0 W5 J: r
  15.     IWDG_ReloadCounter();   // 重装载初值/ q) N% a! `3 S* o1 k1 @
  16.     IWDG_Enable();   // 打开独立看门狗
    9 Z; Y5 f3 L7 d- A' _3 T
  17. }
复制代码

( H. ]' D; Q9 b1 D, o5 u) x9 M. C5 n. J2 }/ z! J
4.2 喂狗* t% |: A4 P( z
  1. /*
    ' _; z. {4 p4 y7 \) z3 v$ }+ J2 z
  2. *==============================================================================' ^# U: {& C+ K2 ^% I' n
  3. *函数名称:IWDG_FeedDog# c7 E8 @0 S$ m. g  [# C
  4. *函数功能:喂狗
    % C" [, _: x# Z1 ~1 X- v
  5. *输入参数:无1 b( l! a4 T9 h5 S/ f$ Z1 i
  6. *返回值:无
    ' ?9 f6 O! A; }2 p
  7. *备  注:无
    3 I7 ^( G; j0 Q7 i6 b0 O- l
  8. *==============================================================================0 ^7 W2 A$ `5 c5 f6 |
  9. */: z7 Q/ ~/ c! M0 q# F  Y1 I
  10. void IWDG_FeedDog (void)
    0 O7 v) K& Z. F. B# R2 y( E
  11. {
    5 I* v* ~8 U1 S; W
  12.     IWDG_ReloadCounter();   // 重装载初值
    . p4 l6 H. @. m
  13. }
复制代码
4 Z' p7 b0 o' Z4 Y% B" C
五、应用实例
) {" r, o' f( h. @3 A% ?$ A
初始化IWDG,配置2s内不及时喂狗就会复位。通过按下按键WK UP喂狗。串口打印复位和喂狗信息。IWDG初始化程序如下
9 s2 i" c$ _! t. B* D: q6 w
  1. IWDG_Init(4,1250);   // 看门狗初始化,2s不及时喂狗,复位
复制代码

, d5 F2 O; [) T- @2 R1 ~8 ]( x8 ymain函数如下9 l+ ]) ?# k& C8 f2 q0 z2 N
  1. u8 gKeyValue = 0;   // 记录按键键值变量
    + p. u6 ?6 H9 e7 H- k7 c7 a) u

  2. + ]3 a/ b$ y. @9 Y1 u7 v, o7 ]
  3. int main(void)! _9 [& I" N* u  m
  4. {
    8 _/ b2 O& ^, R- e! j
  5.     Med_Mcu_Iint();   // 系统初始化
    4 p* L7 \! V( L# g% @
  6.     printf("复位系统\r\n");
    5 F3 F# K- S6 L& y2 H
  7.    
    2 X2 P/ h" i' N7 B9 t
  8.     while(1)
    ' x  }" R2 ?0 Y' M
  9.   {
    / X8 @5 l8 L8 T; @  h
  10.         gKeyValue = Med_KeyScan();   // 获取按键键值
    ( `$ ?0 b  |0 e9 d; u! p
  11.         
    7 B5 M" {6 W7 F/ e
  12.         // WK UP按下) O4 ^% V6 K4 p+ ]* X
  13.         if (gKeyValue == 1)
    # ]0 s: ~8 p* Z# f# K0 N* I% X
  14.         {' N+ o+ b' r6 ~7 T. k
  15.             IWDG_FeedDog();   // 喂狗( N1 v6 R1 @4 V. V
  16.             printf ("喂狗\r\n");5 ?5 d) q. `" L0 m$ Z
  17.         }; ~" k% D4 j, Z6 I& Q7 n. y
  18.     }
    ) R7 |3 D( L! E6 S  e
  19. }
复制代码

1 A8 l5 E2 F& M  h' e  t& b2 _' x效果如下* ~: l; f& V/ m( j" N5 @
) T) w8 Z, b) [* }9 N! q2 R- W
微信图片_20231023202147.png
6 ?+ m) {6 m% R( P
IWDG效果
1 u6 ]1 d2 @) U$ l( F

" Q/ B/ O+ L5 b1 S) L. p" D1 l
- k( U5 Y+ r' z! x  n# L: j0 M" }' L0 D
按下WK UP喂狗,不会产生系统复位。
2 X; ^! [7 d9 A5 m, L. b. E% Y9 j5 a7 j4 w
一旦2s内,未按下WK UP,就会产生系统复位。
! D9 x' Y! @$ `* u" G5 q5 k; _7 v( J8 ^
! c' d' w  B# ]

7 ]+ ?9 X0 j- v9 Q( L' Q) H, g- d4 y转载自: 二土电子/ c& k2 V3 K; s9 D  E
如有侵权请联系删除
( d9 Q" R/ o+ N1 a, |; b+ ^+ {1 W. F0 Q# f; L; V8 a6 L

; J8 I( ]! s# s1 z+ N3 y! |
收藏 评论0 发布时间:2023-10-23 20:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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