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

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

[复制链接]
zero99 发布时间:2016-12-19 10:59
前言: h$ j+ }4 L5 @: L& P
窗口看门狗(Window watchdog, WWDG),提供了一种在指定时间窗内刷新看门狗的功能。同时WWDG提供了一个提前唤醒中断,能够在WWDG计数器值降到触发复位的上一个值时触发。实际应用中,可以在此中断被触发时,刷新WWDG,并记录当前运行信息,以满足运行错误信息记录等功能需求。
8 b# b; }" Q( U+ Y5 e7 }: p3 L( M  ^5 j
问题描述
# L2 `! D; P4 Y$ k2 N问题复现平台: STM3210E_EVAL板! \5 ~7 }! j- c
                       IAR for ARM v7.70.12 X  H! K( `- F' G" S# ?
问题复现程序: 基于STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples
8 [; T' f' x7 i& E% S/ _$ y问题描述:在应用开发过程中,WWDG开启后,WWDG的提前唤醒中断立即被触发,并且微控制器复位。
2 H! u8 f9 k( v6 Q6 d6 t% ]: g5 k! ~- M" f4 N
主要实现程序如下所示。 $ k+ X) ~; J( ^7 h' Y/ ^8 c
21.jpg 2 _3 F3 t- M. A5 s
如流程图所示,在应用程序正常运行时,WWDG中断不会被触发。当程序跑飞等异常情况出现时,由于未能在及时刷新WWDG,导致WWDG中断事件被触发。在中断服务程序中刷新WWDG,以免微控制器复位,造成运行信息被破坏,并保存运行信息以供错误分析。/ ~3 o: }# @6 x+ n# [& V
22.jpg
9 j3 M3 O3 }/ i8 `- W
8 [4 T9 U2 P( B问题分析
4 l( l" g# M% R# P, @* p5 t利用IAR以及ST-Link V2进行在线调试,在执行完WWDG_Enable(127) 指令后,WWDG寄存器值如下所示。
, y) r9 X7 O0 m0 B3 ^3 }$ a
23.jpg
4 H9 z0 f, A* y& o其中提前唤醒中断标志WDGA@WWDG_SR被置位,意味着提前唤醒中断触发。在中断服务程序中,存在刷新WWDG指令。此时计数器值T=0x7F@WWDG_CR不在窗口内(W=0x50@WWDG_CFR),而WWDG在非窗口中(不允许刷新阶段)重装载计数器值会导致复位,如下图所示。

, E( i! U- U; j
4 X( s+ d6 e& g5 Y$ d
24.jpg 7 U8 V/ t6 \. ~% _" x. G- K, f
经过验证,针对这种情况,有两个解决方案。5 _4 G9 |4 F* m: u1 k. M* j
解决方案一:
" M  x7 n+ a8 S1 ?3 _* K' U1 T在使能WWDG之后清除提前唤醒中断标志位EWI@WWDG_SR,然后使能提前唤醒中断。如下所示。
5 Y- n! h4 \8 X9 r
25.jpg
3 g7 S" z, B8 h- D0 W
1 H- C7 b. t2 D" h/ ]' Y, X) q& W解决方案二:
6 }7 K2 [6 ?7 g" a配置计数器装载值不大于窗口值。如下所示。
2 ^. z4 P* U& j$ B, k' X: s) S
26.jpg
' y* ^+ ^( n" p2 O# k( W% i4 e! R同时,需要确保唤醒中断的服务程序中存在中断标志位EWI@WWDG_SR判断语句,以避免异常。
9 ^( `5 d; Z% L3 a% I8 ]3 G" d! r/ t/ R  t  m" v4 [
总结
) F1 `* k6 b7 Z% U5 K1 C& i) Q0 WWWDG不仅提供了一种有别于独立看门狗的程序监测方法。同时提前唤醒中断的存在,也为故障信息的保存以及分析,提供了一种途径。但是,需要注意的是窗口看门狗的时钟源来源于PCLK1,在STOP、STANDBY低功耗模式下,WWDG功能被停止。
' R: O3 B8 M: a. q4 Q! A

- `& E  w, C+ X% C. E6 z4 J! R, O' k& c

! h! W9 u0 ?. p8 G+ x5 q
& i; u+ k  |1 i, {* C+ C
8 {/ w% D0 R* j5 O9 o! o9 s
+ y- M4 `9 ~1 J- p$ B9 h. k# {

4 R3 W2 \$ L. {+ m' P+ \! m资料下载
! E5 Y* ?6 i& j% h& i: M
, a( h* y% l& {9 \2 t9 F更多实战经验
+ F4 l9 n' J! U  d1 x. k6 j
# @8 h4 [, I5 c
赞 收藏 2 评论6 发布时间:2016-12-19 10:59

举报

6个回答
lzts 回答时间:2016-12-19 11:03:14
占位,学习了.
leo121_3006061 回答时间:2016-12-19 13:06:02
感谢分享
jackten 回答时间:2016-12-19 13:12:04
谢谢分享                           
西奥伟 回答时间:2019-6-26 15:04:24
学习了
西奥伟 回答时间:2019-6-26 15:05:33
配置计数器装载值W能够配置成0x7f吗??
zhy233090130 回答时间:2019-7-24 20:58:15
您好!我用的片子是STM32F030同样出现此问题,用STLINK仿真发现WWDG初始化未完成就复位了,请问有例程可以发我学习一下吗,谢谢!
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版