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

基于STM32F1的CAN通信之IWDG

[复制链接]
攻城狮Melo 发布时间:2023-10-23 20:22
一、IWDG简介
+ j5 ~& N; Z6 D8 c% o, B  [独立看门狗(Independent Watchdog, IWDG),什么是看门狗?字面意思——看门的,有陌生人来,就会叫。实际在嵌入式领域里,看门狗也是这种作用,当软件程序发生故障或者程序跑飞时,看门狗会产生复位信号,复位系统。
- J8 s5 {' K' P. g
/ a2 G" W+ j+ z, ]3 t# ~5 G二、STM32的IWDG  u+ y9 Z. C4 r/ J/ P; q" z
2.1 STM32的IWDG简介
( e! O7 @9 H3 x" r
STM32内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
: B4 b3 b$ P4 |! \7 v' |- q, U9 K1 z/ E  H
IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精 度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。
+ y- L) [9 \% [+ Z

4 Y& |( D' O' W• 自由运行的12位递减计数器0 e* G& |& f, o' I1 C: G
• 时钟由独立的RC振荡器提供(可在停止和待机模式下工作); `: _9 H6 t3 P
• 看门狗被激活后,则在计数器计数至0x000时产生复位# ]( Y6 r! e1 a3 e7 P
: W& h* H' y! W/ |2 G% G/ C0 F
一旦使能IWDG,就无法关闭。只有等到复位之后,才能将IWDG关闭。
$ Z7 N3 C& t" p, K
! z. T7 ?: v. Y' l; [+ H2.2 喂狗
8 M# ~) S+ A) Q+ x通过上面的简介可以知道,独立看门狗实际就是一个12位的递减计数器,当计数器的值递减到0的时候,就会产生复位。但是,如果我们在计数值递减到0之前,重新给计数器赋值,那么就不会再产生复位。这个操作叫做喂狗。4 [8 ?- C# g  e5 ?# R; f. _
! R, p; q6 G7 S6 }0 N. ?$ V1 N

& T3 D7 `1 u' ]  J+ V7 U2.3 IWDG框图
  n5 b) ^# ?5 x: o0 d3 U+ k) X( ~. h5 O
微信图片_20231023202157.png
7 e) k) g! ~# a0 }2 p6 Z) e. a

) T; U7 j0 t+ p* |: C6 n
IWDG框图

( {" h1 u2 j: f: ]! f
/ m/ e: y! ^. e" Z( @
IWDG的框图很好理解,IWDG由一个由独立的RC振荡器提供时钟。经过一个8位的预分频器对时钟信号进行分频。12位递减计数器按照设置好的初始值和输入时钟递减。当递减计数器递减到0时,产生独立看门狗复位。
+ b" j/ V5 @2 x! G) A1 h- c  b: F
1 @; K5 ]8 F& j, y! P3 h% ^; p1 n4 p
在产生复位之前,如果将重装载寄存器传递给递减计数器,那么就会重新开始递减,这叫做喂狗。2 U7 `2 U5 B! z3 L% i1 V

) z/ L1 I5 p# p$ Z8 @( n& U9 u( B键寄存器也叫做关键字寄存器,往该寄存器写入不同的值,有不同的作用- h$ y4 H+ V; J) T' x" b5 g  O
1 e0 s1 Z  S8 m: q
• 写入0x5555——表示允许访问IWDG_PR和IWDG_RLR寄存器& Q/ R$ W8 s& l) ~' k4 ~- |. o
• 写入0xAAAA——将重载寄存器的值传递到递减计数器,也就是喂狗
; o! T- v& s- E8 l/ \• 写入0xCCCC——启动独立看门狗功能+ R. y- \, d  W4 U6 l% Y

  t& t+ t8 Y2 B
中文参考手册中给出了一个时间表, G& N. z3 `8 j. Z- y9 P% \

5 T) _4 `$ Y* ^+ k. W5 l
微信图片_20231023202153.png

+ s( ?1 z+ k6 f3 z) b
IWDG的溢出时间表

, U" w! i" G* q' q
0 V1 l# }  f. I- a: i! C  b

7 V! U8 G' x( r" x; _7 K# c3 ?
时间的计算方法是,时间 = 重装载寄存器值  / (输入时钟频率 / 4 * 2^预分频系数)
5 Y+ A( X& x0 E. `
. E5 }* f% z7 f( t! w. x; V为什么是4 * 2^预分频系数,可以看一下中文参考手册对于预分频寄存器的描述
( z% a! D, T* ?# `# F

- _8 M/ F% i) D( P' [' M
微信图片_20231023202150.png
* w: n" h4 b: ?( p
预分频寄存器描述

$ r* F$ ^$ ^( w' y2 Y- R9 E
1 Z- C6 X/ y; ]! a8 F  ~* Y9 X6 {8 I
7 T, l; i1 y, v3 A5 h
三、IWDG配置步骤# p9 Q2 H, `( G9 }: V8 _
• 开启寄存器访问(允许访问IWDG_PR和IWDG_RLR寄存器)
8 v6 x! K  A/ u/ ?. D1 z• 设置IWDG预分频系数和重装载值) o1 I( l* X3 \: R7 |8 T- x
• 将重装载寄存器的值传递到递减计数器(喂狗)) {; N# g& I* n$ B
• 开启IWDG
! X$ D: J$ l& i& a& `6 B! E% [  n+ ]: ]0 b4 G* v

! r2 t: T/ U! H/ i5 }) F! t四、IWDG配置程序8 X6 U- w2 |6 B4 s. Y1 {
44.1 IWDG初始化程序

+ z7 T6 ^( i  C- c
  1. /*+ i4 s- ~9 v5 y) a( A( l( \( y, a
  2. *==============================================================================
    ) V+ p. @2 N. g3 N
  3. *函数名称:IWDG_Init
    - C+ U; T2 A: [2 [7 e9 B7 f/ h; I
  4. *函数功能:初始化IWDG
    5 a+ k0 i5 a' N& [" ~7 ~" S
  5. *输入参数:pre:预分频系数(0~6);rlr:重装载值(0~0xFFF)( m0 X( j  m( W7 S5 j! |
  6. *返回值:无! p+ o* l! H* _6 M. H
  7. *备  注:独立看门狗复位时间计算公式:t=(4*2^pre*rlr)/40(ms)9 h  z: g# v7 _% J& f6 S
  8. *==============================================================================7 P: Z$ v& P, S  Z$ R# T) ^
  9. */  H5 q, W% k! W; v& f
  10. void IWDG_Init (u8 pre,u16 rlr)" Y% e+ B0 v& N, s* Q) `+ q
  11. {
    $ R# l/ {1 l- c% @8 O: o! S, A
  12.     IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);   // 取消寄存器写保护6 S2 k  S8 ?& O5 E8 M) R* V
  13.     IWDG_SetPrescaler(pre);   // 设置预分频系数 0-6
    ( Q% A* C+ Z3 A# b4 f2 k! U
  14.     IWDG_SetReload(rlr);   // 设置重装载值, j2 W8 e! m6 Z! l1 ]
  15.     IWDG_ReloadCounter();   // 重装载初值2 c  v1 I& J1 x4 h% O
  16.     IWDG_Enable();   // 打开独立看门狗+ E1 e: c% T. k0 U  {, d
  17. }
复制代码

% I9 c: p2 M2 S- C! h, Z
2 c$ W9 x. E, I4.2 喂狗
% Z& K  u% u$ F% ^- `# R& ^: `
  1. /*
    & L- n! G4 }' b, N1 x
  2. *==============================================================================: e. x6 N3 K/ I+ I* s
  3. *函数名称:IWDG_FeedDog
    3 G: i5 `4 ?2 i
  4. *函数功能:喂狗1 |, R( I5 M8 y, v# p( ?
  5. *输入参数:无. C: I4 d' |$ Y- t3 g! E
  6. *返回值:无
    . P! s+ J4 Y2 O( {8 @( M; i
  7. *备  注:无
    ( w& p2 y+ Q- @) C, G
  8. *==============================================================================
    # W& ], R3 M' C1 P) E5 e
  9. */% |5 G' g' m- L% u2 t
  10. void IWDG_FeedDog (void)
    ) ?3 h& p& n: a  I6 L$ p9 S
  11. {5 _- X1 Z1 G& g) @3 _! i
  12.     IWDG_ReloadCounter();   // 重装载初值
    ) \7 W- \# y2 E
  13. }
复制代码
# i1 U5 W& R  C" `) }
五、应用实例

7 [6 v9 a( ?& t- L! l初始化IWDG,配置2s内不及时喂狗就会复位。通过按下按键WK UP喂狗。串口打印复位和喂狗信息。IWDG初始化程序如下  G# U9 h* n% L5 f; @
  1. IWDG_Init(4,1250);   // 看门狗初始化,2s不及时喂狗,复位
复制代码

. _6 ]8 W, P. ^; O( V5 q& smain函数如下
4 f! J' u# B* @5 S$ W  n
  1. u8 gKeyValue = 0;   // 记录按键键值变量
    & V" z9 U0 V8 @; E* k

  2. 7 j" ^% Y1 K/ @* W& S5 |! z" T  r
  3. int main(void)7 `+ ~0 s: {% R4 l8 d, A
  4. {
    8 |1 H# d9 ?1 _* z+ K3 B9 G; {
  5.     Med_Mcu_Iint();   // 系统初始化
    - `/ @7 o; M7 m! e
  6.     printf("复位系统\r\n");
    ; e4 r3 U. ?  {# v7 j
  7.    
    6 p0 |/ }* W) k6 u- Y, E
  8.     while(1), r6 A, l4 Z% j" R5 j% D
  9.   {1 K/ a- k: ?0 V
  10.         gKeyValue = Med_KeyScan();   // 获取按键键值5 r; Z* m0 X, I# {2 E, i! |3 m
  11.         * n8 U9 E' V" U2 Z: Y
  12.         // WK UP按下
    8 s, D# ^+ Z, O) n# i( j  f
  13.         if (gKeyValue == 1), F% f0 F( Q3 F, n* A
  14.         {
    " j3 L% A; A1 p6 L8 X, B, h
  15.             IWDG_FeedDog();   // 喂狗
    ; T/ C" _4 {: H1 d& q' v' `
  16.             printf ("喂狗\r\n");
    4 V* e# V: Z2 O, g% i) k( k
  17.         }. n8 x& ]! B2 w3 r
  18.     }% d+ j! k7 x3 R/ Y# }5 f
  19. }
复制代码

7 ^$ `$ y9 f7 q$ D* A' n. Y8 r效果如下
" a0 Z. `2 c1 B  W8 r8 M4 S0 w1 M
' \) i  E3 M2 M9 A! L( }
微信图片_20231023202147.png
3 Z5 A6 |6 X8 c4 R$ g% o0 |: O
IWDG效果

' n5 F) X0 \: S4 a- s+ v$ \8 P/ e

" l+ |! T$ L8 {  k. p8 p. u3 X
6 P. T& [2 j0 [, x- r
按下WK UP喂狗,不会产生系统复位。. Y9 j' N9 w4 h3 X; X$ Y
0 ]6 q# P) [" W3 |) l+ f/ F
一旦2s内,未按下WK UP,就会产生系统复位。1 G$ j  H2 H* I+ d/ e' q' _0 @

8 N( u; Y8 @: x7 r1 g/ z

/ v2 N, T& |3 v+ N) P转载自: 二土电子$ n" M. n: Y" Q* t/ q8 D
如有侵权请联系删除' ^. }3 [! F1 h
8 m9 F0 [& Y+ B' ]" a
9 g  [$ e$ V: q* P# @! z, m$ `
收藏 评论0 发布时间:2023-10-23 20:22

举报

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