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

【经验分享】窗口看门狗启动时异常复位问题

[复制链接]
STMCU小助手 发布时间:2022-2-25 19:49
前言
5 A0 |1 E& g6 s- o窗口看门狗(Window watchdog, WWDG),提供了一种在指定时间窗内刷新看门狗的功能。同时 WWDG 提供了一个提前唤醒中断,能够在 WWDG 计数器值降到触发复位的上一个值时触发。实际应用中,可以在此中断被触发时,刷新 WWDG,并记录当前运行信息,以满足运行错误信息记录等功能需求。3 r" i, W  W3 p, J; @
6 A; C: x7 J2 ]! |% F# k; \8 c
问题描述
' T8 c4 }6 t; D/ p6 m问题复现平台: STM3210E_EVAL 板3 B$ D3 Q1 u' z  S8 Q7 D" H: |6 S: h
                       IAR for ARM v7.70.1$ f. N  @* u2 d+ c: T
问题复现程序: 基于 STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples
2 a% F! k7 `1 P7 R2 `" ]问题描述:在应用开发过程中,WWDG 开启后,WWDG 的提前唤醒中断立即被触发,并且微控制器复位。# `5 ?+ s7 B' o- L! k% H0 ^) b
主要实现程序如下所示。4 n% q; {  w2 s' R7 R
  1. ……9 [3 P0 ~# Q) m; w$ k* b
  2. WWDG_SetPrescaler(WWDG_Prescaler_8);, a* B# a' Q" E, c/ O& Z1 r
  3. WWDG_SetWindowValue(80);# {9 c% K2 y/ x- n/ D% ^7 h- {
  4. /* 在例程基础上添加,开启窗口看门狗中断 */; E. H5 n0 Q0 B& J! e  m) e
  5. ……
    & ~! X* U) w: z
  6. NVIC_Init(&NVIC_InitStructure);5 {' _' [% q/ f" Z7 S" J0 n
  7. WWDG_ClearFlag();% v4 [& v1 \0 D3 `! d7 F  t, ~# F
  8. WWDG_EnableIT();" e9 w# u4 K- G
  9. WWDG_Enable(127);+ T: J9 C  D7 Q  \' l, X
  10. ……
    + ^9 R& m  {0 i: ?
  11. While(1)6 f# z" v$ v) C  h2 _. _& g
  12. {0 N0 R" K) X. r. G/ J1 g, J9 V1 ?
  13. ……8 k" n5 A, X% v( s: h' ^: ?2 p
  14. WWDG_SetCounter(127);8 q  x5 N' n6 o* e: I) e0 |
  15. ……9 v* |# i8 ~3 Y& D- v' d  t( R
  16. }
复制代码

; g4 d  f( A$ b% S) P" {9 I如流程图所示,在应用程序正常运行时,WWDG 中断不会被触发。当程序跑飞等异常情况出现时,由于未能在及时刷新 WWDG,导致 WWDG 中断事件被触发。在中断服务程序中刷新 WWDG,以免微控制器复位,造成运行信息被破坏,并保存运行信息以供错误分析。0 e5 K8 v9 l& E" a$ s
+ n8 k: M4 j0 Q9 j; b
9BD)%)FDIY5`E9FAN(}8S1N.png 8 d- C( J# g' @7 a6 m1 M

/ v. s8 S- Q& P# K2 u. K3 l. c/ R3 S' n- [& b6 G0 J
问题分析4 a% Z9 T% K- h" b4 n
利用 IAR 以及 ST-Link V2 进行在线调试,在执行完 WWDG_Enable(127) 指令后,WWDG 寄存器值如下所示。. Q/ |, o& e! f, ]9 d
% l. f, S3 }' w' Q! n7 _  ?
BBJ@S8Q%P`MNU50KF4D9P{G.png
7 V& X# ^" C) B9 H- x8 S) n
' v' @9 b! W/ w6 [/ y* G其中提前唤醒中断标志 WDGA@WWDG_SR 被置位,意味着提前唤醒中断触发。在中断服务程序中,存在刷新 WWDG 指令。此时计数器值 T=0x7F@WWDG_CR 不在窗口内(W=0x50@WWDG_CFR),而 WWDG 在非窗口中(不允许刷新阶段)重装载计数器值会导致复位,如下图所示。7 v* g( D& P3 d9 F3 _/ y* l/ ?3 E

4 C" P& [* f; k7 h HU[@GW)6A7XC]L{CZE@T`H3.png ( }5 n% M8 ?% _! o* ]5 o( ^* P

, y+ c6 R# x- a2 x经过验证,针对这种情况,有两个解决方案。3 S+ T* Z5 d) A, o- _: I7 l  W
解决方案一:, |. }) r& P& V) R. D/ f
在使能 WWDG 之后清除提前唤醒中断标志位 EWI@WWDG_SR,然后使能提前唤醒中断。如下所示。7 o8 N/ b3 \0 ]9 O8 l; M& k* V
  1. ……! s7 u! |5 ]+ h3 D7 n8 K+ e
  2. WWDG_SetWindowValue(80);
    + C* s& J1 W$ Q$ Q" K- X
  3. /* 在例程基础上添加,开启窗口看门狗中断 */7 E4 v# x6 s1 f
  4. WWDG_Enable(127);
    ' R% \! E  k8 |3 C  b
  5. ……9 h/ ^$ W; o0 e+ E0 I5 j
  6. NVIC_Init(&NVIC_InitStructure);
    - N$ l7 k  O" w& }# ~
  7. WWDG_ClearFlag();$ ~; c' x/ h* c& q; z" r  S6 G# V/ Y; B- D
  8. WWDG_EnableIT();
    " p# Y; X& x. j/ ?" Z/ V/ `, [
  9. ……
复制代码
, g& C/ f1 M% @. [. w
解决方案二:1 _  d. D- q" T4 A# i3 n7 c
配置计数器装载值不大于窗口值。如下所示。0 t8 }% }' ~: j
  1. WWDG_SetWindowValue(127);1 t! z9 x' ~2 o# [3 U0 n
  2. /* 在例程基础上添加,开启窗口看门狗中断 */
    7 ]) Q1 B, q1 }% S) j
  3. ……) g: [8 \/ }! f& O* k
  4. NVIC_Init(&NVIC_InitStructure);
    # F; j+ L8 i$ @7 b6 H+ y! G8 ]) J
  5. WWDG_ClearFlag();3 `& W+ F, @/ [
  6. WWDG_EnableIT();* z8 V1 y( i- x+ m0 [
  7. WWDG_Enable(127);: {7 Y2 G" m+ b3 _+ W
  8. ……
复制代码

- j, M8 n0 T6 x同时,需要确保唤醒中断的服务程序中存在中断标志位 EWI@WWDG_SR 判断语句,以避免异常。1 Y+ Y4 C6 g, E; y; ^- N' F  ^

2 z! l1 y5 U1 Z# |  y: [3 ^/ g4 U5 q+ ?  E
总结8 ]! b7 v5 e, l5 U) P
WWDG 不仅提供了一种有别于独立看门狗的程序监测方法。同时提前唤醒中断的存在,也为故障信息的保存以及分析,提供了一种途径。但是,需要注意的是窗口看门狗的时钟源来源于 PCLK1,在STOP、STANDBY 低功耗模式下,WWDG 功能被停止。" J; q7 {5 w% e8 k
, P" c: l) \. t- W
赞 收藏 评论0 发布时间:2022-2-25 19:49

举报

0个回答

所属标签

相似技术帖

官网相关资源

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