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

【经验分享】STM32开发,使用HAL库函数实现窗口看门狗WWDG功能

[复制链接]
STMCU小助手 发布时间:2022-5-6 09:21
1 概述
) v3 f' L: c& a2 _; e; V- Q1.1 资源概述

' U3 ~, Z) S1 R  M5 z开发板:ST官方NUCLEO-F103RB开发板2 P/ }5 ^/ E- K* T$ G) ?
CUBEMX版本:1.3.0/ }# m$ Q1 F" I9 ?
MDK版本:5.23# ~0 n0 q9 T- \$ z, Y
主控芯片型号:STM32F103RBT61 L7 F& N2 o" S& _
  _2 Q) l! ~5 P9 N0 ]
)N]II$CZSCK(3%G}`IIWNUJ.png
" b4 X# g  x: _+ J3 d* M8 h* r3 m2 O7 {# L# ^0 b) c4 k, b
1.2 引脚资源分配* |2 l7 \% x5 k
! d. C+ |1 \$ i+ I" l# s  l: |
9@FQ1B34$B%Y~3VQ84TN3NH.png . Y+ t5 N  b  h- K* u

& l1 p% `* w: L1.3 窗口看门狗概述  U4 d. u2 r6 W8 a$ r& j6 D
窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。
3 Z. l* _$ {# o5 U" |! h9 v# g! \WWDG主要特性# p+ F$ d( `3 y5 C- a  m
● 可编程的自由运行递减计数器/ B, E6 ^- T  U; j% Y& t
● 条件复位
5 D* }& |( m. _3 D─ 当递减计数器的值小于0x40,(若看门狗被启动)则产生复位。
' c$ y* ?7 L# ?2 X" }: k─ 当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。
* K6 O0 G/ _9 I. B3 K● 如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以被用于重装载计数器以避免WWDG复位。5 N+ T+ s& Z9 I' M- d
$ E$ q) `0 s; O- O5 x$ S+ L
1.4 实现功能0 `6 H5 R$ n. T# P4 Q6 @  s
1、窗口看门狗功能。5 f/ A4 e% U" j& ~  L9 w; f0 L
2、使用HAL的窗口回调函数EWI,在0X40点喂狗。
7 C9 m! r2 v: n  U; q6 x; m6 V3、while(1)设置LED灯闪烁,间隔时间1S。; D% c0 g7 V1 S8 i
4、当及时喂狗,没有窗口看门狗复位产生时,LED会不停的闪烁。
  W9 P% Z$ G- c; B. L8 D, p( x# j: i5、当没有及时喂狗,系统会不停复位,导致LED2灯常亮。3 g8 H' c0 D  c! V1 m. D- h

5 o* S6 S  [3 M$ `5 V- ~/ {$ u: ^* Z2 软件开发! T& `- ?- Y5 t
2.1 CUBEMX配置

* }5 s* B6 F$ u% W* e计数器时钟分频设为8,窗口值设为113,计数器设置为127(最大7位1111111)。计数器的值必须大于窗口值。使能早期唤醒中断。4 g) G/ F2 |# [! B) f/ f. ~5 G, Z+ \

- p+ [* Q. Y$ O! D XW01I9QOXAS{@NCFU)2X.png   u7 p/ A' |! R% j
7 t' R% c) k" A- a* Z5 S! L
2.2 WWDG原理框图和时序图
  [$ @7 W$ K5 a+ h  m  O原理框图如下,三个门电路从左到右分别为与门,或门和与门。
0 q- p2 [2 O( G" y9 f( i2 E PW2CHPLEPGYKRVAUR@CI)]G.png
2 h. N5 b7 H; U6 Z' U" u7 @; D  Q' t! M! `$ w' J; ?
时序图如下,依据CUBEMX的配置可以得到三个点的值
" c0 d7 U% F# E" b( p; r! y5 y# l
PUO)KWT8DPA%7R4_EETR9_H.png
4 N9 v( _8 P' \6 a0 B0 }6 O3 t5 V3 e( W) M9 M" l. I9 G3 i) W( q
最早允许刷新的时间计算3 i5 R; g1 D/ \0 K  @/ B

# b( m* |, S' z' q) A& r9 Y2 b5 p6 h 20200406132043201.png
$ R) [4 z4 @1 \, t+ ^7 m. v
: E+ }0 l/ k" W2 h# U最晚允许刷新时间(超时时间)计算: S3 Z$ d. c5 D$ `
* |2 ?2 c  z4 S: A+ [2 A
20200406131243597.png
( z8 O+ ~. M: T
4 b" x6 h9 h' g. l$ S也就是程序不得早于14.336ms进行刷新,不得晚于65.536ms进行刷新。否则系统将会产生复位。在窗口刷新喂狗示意图如下。" c3 w& e" T0 i  W
6 y. \" T) m, [0 h5 F$ e
4N{CYGC0$P)QPDLRGO80%)4.png
; \  E# B, R3 w6 v6 _' b
" b" H+ ^. w# A$ P3 j# ?3 R! Y' u9 m5 @* I9 j* V, k  j
2.3 程序设计  ]7 ]+ D+ m+ ~& I) ]4 n
在此次试验中,我们并不使用计算得到的时间去执行喂狗操作,我们采用EWI功能函数HAL_WWDG_EarlyWakeupCallback()。这个中断函数在当向下计数器记到0X40时将会生效(产生复位0x3F的上一个状态),我们在此函数中进行喂狗即可。
) ?2 S- u( N3 h7 X" y3 R1、使用CUBEMX生成代码,系统会自动生成WWDG的相关初始化函数;: U$ }! T2 N7 o6 c

9 m+ w0 O: A. U% P8 q0 y! [+ T
  1. MX_WWDG_Init();
复制代码
& y" k: I) m  ]2 x9 g3 p, j
2、将LED灯初始化,亮灯。* J3 h6 d5 s6 o6 K6 |" R5 Y" o. x
5 C7 u' q7 p  a# ~
  1. HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET);// 点亮LED灯
复制代码
( W( p- a1 D! V/ g0 q  O
3、编写while(1)函数,每隔一秒钟闪烁LED灯。  ?8 n* u2 e' _) {6 b& W- t- y

& I# ^) C* z: \0 r: H0 s
  1.   while (1)# n" h5 p& }0 P: c% e" e
  2.   {
    3 g& h7 P) B5 [! C  ^( @* ~
  3.     /* USER CODE END WHILE */
    2 e) z8 p5 F, R- s% G8 S
  4. + v4 i" w/ a7 G
  5.     /* USER CODE BEGIN 3 */9 H9 [% x) Z5 c) U
  6.           + G& e1 y% J3 ]3 C, L
  7.    HAL_Delay(1000);//延时1000ms- W' l* f! c7 F1 d. L
  8.                   ' Y, H2 Z4 n8 U* D2 z
  9.    HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);  //LED翻转
    # v5 A2 d( |& z' b6 Y; T
  10.   }
复制代码
! S3 V+ t. y/ m' t3 I- B5 a5 |/ f
4、编写回调函数EWI。% E" R' x, C7 K  ^( e5 L! Q

: C3 g1 k5 L4 S
  1. void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)//当向下计数器到0X40时,会执行此中断函数
    * {( W" n# V6 X3 x
  2. {
    & {* n, n# p5 ^8 ^) l
  3. HAL_WWDG_Refresh(hwwdg);//喂狗   0 I6 ]$ r1 m, D- [# W2 v
  4. }
复制代码

* [1 I( o! o3 v0 D5 I4 H; q3、实验结果
8 K- a' P0 t8 Q' H( ~+ ]将程序编译后,下载如官方开发板中。单板LED灯每隔1S进行闪烁。5 O9 W+ e- ^! K; w) n

9 W) n4 N" w) E1 c" d+ ~4 W 20200406134353280.gif
3 t  n) [/ r) @: z# L
, @. ~: f6 o' S将喂狗代码注释掉后,再编译下载,LED灯常亮,系统不停复位,
3 F% H# _; c, @+ L8 p5 T8 v
7 `( e6 X0 L* a) J$ J. Q9 H1 } I4G]YS[TSL[F@}TIRCI9PEI.png # g; T- J8 L) K+ w% j% w
- m; p" X' \  o/ v

$ F; E" K% g, Z
赞 收藏 评论0 发布时间:2022-5-6 09:21

举报

0个回答

所属标签

相似技术帖

官网相关资源

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