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

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

[复制链接]
STMCU小助手 发布时间:2022-2-25 19:49
前言
: g' Y3 X  P* B  Y) y窗口看门狗(Window watchdog, WWDG),提供了一种在指定时间窗内刷新看门狗的功能。同时 WWDG 提供了一个提前唤醒中断,能够在 WWDG 计数器值降到触发复位的上一个值时触发。实际应用中,可以在此中断被触发时,刷新 WWDG,并记录当前运行信息,以满足运行错误信息记录等功能需求。
& k/ l$ P$ V( |' @
9 m. A+ |9 V( M! G, q" S1 S问题描述
  b3 _- c. T- ], R5 }8 h问题复现平台: STM3210E_EVAL 板8 G1 m* c6 Z$ b+ {3 T, o$ W1 s  d
                       IAR for ARM v7.70.13 i6 Q, ~. ~4 [5 u* V
问题复现程序: 基于 STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples
  q" e+ X8 ^6 e5 U! `* p问题描述:在应用开发过程中,WWDG 开启后,WWDG 的提前唤醒中断立即被触发,并且微控制器复位。
- c& R; t1 h: |; c% v/ X- _& `主要实现程序如下所示。5 C% a$ K( r+ m! p; P
  1. ……
    3 u9 v) Q, s: G
  2. WWDG_SetPrescaler(WWDG_Prescaler_8);
    : A/ ^/ ~/ o) A% X
  3. WWDG_SetWindowValue(80);
    ; Q9 t" i9 u9 ~. r% B- N
  4. /* 在例程基础上添加,开启窗口看门狗中断 */
    ) `# P" J+ {) v' o# ]
  5. ……5 t, M5 `, ]: b6 l$ g
  6. NVIC_Init(&NVIC_InitStructure);( F$ F/ I% S6 H0 A
  7. WWDG_ClearFlag();, P* u& f% Z/ {! g
  8. WWDG_EnableIT();* B! F" k7 [& ]
  9. WWDG_Enable(127);
    2 H* e2 e3 e+ b) J; T
  10. ……
    ' `, W! ]4 y& V* t. |' L1 w
  11. While(1)( u% v2 P  u" y% `; I0 i( {/ r5 b
  12. {) R  P2 Q( M. _' A* J# ^$ X
  13. ……
    1 ?5 Z5 J7 [. `1 |$ g/ D+ p2 p
  14. WWDG_SetCounter(127);5 ]6 F% Q$ ?$ h( t
  15. ……* a2 ]: \* K- Z& |5 k8 Q
  16. }
复制代码

, n, B7 |( M4 z如流程图所示,在应用程序正常运行时,WWDG 中断不会被触发。当程序跑飞等异常情况出现时,由于未能在及时刷新 WWDG,导致 WWDG 中断事件被触发。在中断服务程序中刷新 WWDG,以免微控制器复位,造成运行信息被破坏,并保存运行信息以供错误分析。2 w, b: u$ m5 A1 j( t6 h8 A

  I' D# b; m% [9 D 9BD)%)FDIY5`E9FAN(}8S1N.png
1 z7 T5 w6 B& O$ Q7 k% ^2 B. |/ o2 B0 Q3 c, k: n* F7 L. W
/ l+ ?' F5 k  I/ a
问题分析3 w/ @7 ^! ]3 Z7 O& C& e. ]
利用 IAR 以及 ST-Link V2 进行在线调试,在执行完 WWDG_Enable(127) 指令后,WWDG 寄存器值如下所示。
! e2 n  }9 p; J* ?/ P2 r6 ]$ \0 N. h2 F
& t1 h! L+ q2 x! x& H BBJ@S8Q%P`MNU50KF4D9P{G.png
7 e1 U0 \! \0 Y0 }! S1 x
/ R( W$ k( n( ~- c$ Z- Y, q其中提前唤醒中断标志 WDGA@WWDG_SR 被置位,意味着提前唤醒中断触发。在中断服务程序中,存在刷新 WWDG 指令。此时计数器值 T=0x7F@WWDG_CR 不在窗口内(W=0x50@WWDG_CFR),而 WWDG 在非窗口中(不允许刷新阶段)重装载计数器值会导致复位,如下图所示。' y5 @; [4 q! M# h8 e
/ U0 Y4 \% I$ Y& F; Q4 q
HU[@GW)6A7XC]L{CZE@T`H3.png ; \. V8 Z: c% T) t3 T" R

% m4 u3 i+ R' k2 ?* B经过验证,针对这种情况,有两个解决方案。
1 ]3 W5 q$ i$ i2 g6 T6 Z解决方案一:4 C" {, ?" X3 p: W6 k1 ]
在使能 WWDG 之后清除提前唤醒中断标志位 EWI@WWDG_SR,然后使能提前唤醒中断。如下所示。
6 h7 F3 `5 a" D
  1. ……
    : Q4 }, k$ m: H$ d& x
  2. WWDG_SetWindowValue(80);
    8 w6 `/ w2 d' o+ g, _& F/ b9 ^8 M  ?
  3. /* 在例程基础上添加,开启窗口看门狗中断 */
    ( [+ W2 O/ t# y# ]7 `
  4. WWDG_Enable(127);
    , ]' u! t& |% b! G6 z) m! z
  5. ……  K# L8 e0 G# {2 i& p8 z1 _
  6. NVIC_Init(&NVIC_InitStructure);# J  w7 Y8 b0 Q
  7. WWDG_ClearFlag();
    * d/ u2 }1 q9 v0 F) W- y% c; w- l
  8. WWDG_EnableIT();2 {  F" C9 h' L
  9. ……
复制代码
( d9 a9 T  h7 g( X- C0 r
解决方案二:
  X8 V7 }0 a6 [3 R2 `# k配置计数器装载值不大于窗口值。如下所示。! C/ R, j3 d# b0 V3 p7 v; d# e
  1. WWDG_SetWindowValue(127);4 ~$ l. P. ?! o
  2. /* 在例程基础上添加,开启窗口看门狗中断 */; Z/ G8 p, |1 U3 [- [7 N8 l$ E# t
  3. ……
    6 {( @# D" E8 `; Z; t8 l
  4. NVIC_Init(&NVIC_InitStructure);
    . \! u; L1 z' r0 H* k: n
  5. WWDG_ClearFlag();) g$ s  t( ~5 w8 f) |7 m
  6. WWDG_EnableIT();" @3 Z; z7 X  `" i( ^3 k
  7. WWDG_Enable(127);8 K- X! e: v6 f0 |0 J$ ?0 e
  8. ……
复制代码
/ w  K. J  O4 t) ?% L2 S) ~% @* k
同时,需要确保唤醒中断的服务程序中存在中断标志位 EWI@WWDG_SR 判断语句,以避免异常。
, F1 D% V  y* }8 R
, B8 ]$ Z1 ]1 l7 s' w- v$ u; z3 R7 ~: s
总结% q; [; c5 ~) ?/ |6 V
WWDG 不仅提供了一种有别于独立看门狗的程序监测方法。同时提前唤醒中断的存在,也为故障信息的保存以及分析,提供了一种途径。但是,需要注意的是窗口看门狗的时钟源来源于 PCLK1,在STOP、STANDBY 低功耗模式下,WWDG 功能被停止。
0 G( ?3 r* C5 g9 j0 ?/ e! y" h, {' D& n. N, O
收藏 评论0 发布时间:2022-2-25 19:49

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版