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

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

[复制链接]
zero99 发布时间:2016-12-19 10:59
前言7 m6 x6 Y7 p. B! `
窗口看门狗(Window watchdog, WWDG),提供了一种在指定时间窗内刷新看门狗的功能。同时WWDG提供了一个提前唤醒中断,能够在WWDG计数器值降到触发复位的上一个值时触发。实际应用中,可以在此中断被触发时,刷新WWDG,并记录当前运行信息,以满足运行错误信息记录等功能需求。/ l# w2 S1 v( l; J% L3 H1 `

/ u$ i3 q4 G$ V- c问题描述0 g- h* j% Y+ H( n# r
问题复现平台: STM3210E_EVAL板
: g% @/ u; q7 b' ~4 u9 a+ Q0 ]                       IAR for ARM v7.70.1/ j4 T# V. t0 ~5 v7 j
问题复现程序: 基于STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples
  j/ Z7 X- q- d; ^; b- ?  w, g& `问题描述:在应用开发过程中,WWDG开启后,WWDG的提前唤醒中断立即被触发,并且微控制器复位。0 k! R& r( C2 m

. J' T) ?# k. T/ F/ _主要实现程序如下所示。 % W. z7 D1 x. r1 \3 {; P/ T; H
21.jpg
) {2 g7 u7 s+ b' f( }* g  \: Q如流程图所示,在应用程序正常运行时,WWDG中断不会被触发。当程序跑飞等异常情况出现时,由于未能在及时刷新WWDG,导致WWDG中断事件被触发。在中断服务程序中刷新WWDG,以免微控制器复位,造成运行信息被破坏,并保存运行信息以供错误分析。, E9 Y$ R% }9 ^, z2 U$ h" b
22.jpg
+ U" i- r, l5 p3 D  l
5 m1 u  n6 H* m问题分析5 Q3 o+ e4 _& V
利用IAR以及ST-Link V2进行在线调试,在执行完WWDG_Enable(127) 指令后,WWDG寄存器值如下所示。
& C! ^& k5 t: Q2 L0 H
23.jpg 1 F5 o/ ^) W% v6 Z  `- ]/ S# L; `: A% K  b
其中提前唤醒中断标志WDGA@WWDG_SR被置位,意味着提前唤醒中断触发。在中断服务程序中,存在刷新WWDG指令。此时计数器值T=0x7F@WWDG_CR不在窗口内(W=0x50@WWDG_CFR),而WWDG在非窗口中(不允许刷新阶段)重装载计数器值会导致复位,如下图所示。
% Z2 O8 w. c" r

3 h1 P! Z; v, o& S' k1 f
24.jpg
1 {' ~; n! u& T) P6 ]/ w9 H经过验证,针对这种情况,有两个解决方案。
  i/ }. I, C# h9 }( P- _4 s解决方案一:
1 f& }1 ^5 o/ q( q在使能WWDG之后清除提前唤醒中断标志位EWI@WWDG_SR,然后使能提前唤醒中断。如下所示。
$ G: s( W. [% {+ P
25.jpg ! y3 Z! I' ?6 U% _, a2 @
. `4 L4 h+ s* ~! p
解决方案二:# K) c& q& i6 \7 V' ]# D" [! ?
配置计数器装载值不大于窗口值。如下所示。
9 }0 p" _, s: d6 k, X
26.jpg
% }9 a* }' Y! |( q9 A) E' a同时,需要确保唤醒中断的服务程序中存在中断标志位EWI@WWDG_SR判断语句,以避免异常。& m9 P4 Q0 R; [7 E; y
0 J/ I0 p0 r. z2 ?0 @' ]
总结
# n' m- Z) i, W$ Q/ B$ fWWDG不仅提供了一种有别于独立看门狗的程序监测方法。同时提前唤醒中断的存在,也为故障信息的保存以及分析,提供了一种途径。但是,需要注意的是窗口看门狗的时钟源来源于PCLK1,在STOP、STANDBY低功耗模式下,WWDG功能被停止。
) z8 t9 `3 v( j

" O5 Q4 }4 h5 {0 R& _# E/ W
$ n% w3 {0 l9 D* i3 }

' G& S6 p8 w  b) _( Q% f

+ s8 c1 `* J1 |# o7 n
+ e* H, ]5 Z$ ~% z( }

  j- f$ B0 Z. t4 X+ E资料下载
+ N" B8 ^4 a3 r  Z. L* O* {  r; h2 A5 k0 l8 s) m7 F2 o
更多实战经验
" S9 ?% D* @; \. N" y) X$ l! p7 D4 u/ d( m: b
收藏 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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版