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

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

[复制链接]
zero99 发布时间:2016-12-19 10:59
前言0 N4 R: F0 E  T$ U6 [) P
窗口看门狗(Window watchdog, WWDG),提供了一种在指定时间窗内刷新看门狗的功能。同时WWDG提供了一个提前唤醒中断,能够在WWDG计数器值降到触发复位的上一个值时触发。实际应用中,可以在此中断被触发时,刷新WWDG,并记录当前运行信息,以满足运行错误信息记录等功能需求。  `# h" p/ t' j* ~" q) Z5 J5 I* l' v

2 V. n9 F" T: C, H- M; {% s6 U问题描述
) n2 n, k8 \+ Y" s问题复现平台: STM3210E_EVAL板
& b8 x' X+ w; n                       IAR for ARM v7.70.1
( u# \7 n- c1 K) h$ ^0 u问题复现程序: 基于STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples  x- x( y* o, c5 I! ^( }
问题描述:在应用开发过程中,WWDG开启后,WWDG的提前唤醒中断立即被触发,并且微控制器复位。# c4 S$ Q  E6 @6 c  c
7 Z, a; J! e$ s1 p9 Z# V% X" `) J2 ?
主要实现程序如下所示。
3 k% I8 k& ^; t7 e! @0 ^! y
21.jpg ( S/ `8 m& M% m* p
如流程图所示,在应用程序正常运行时,WWDG中断不会被触发。当程序跑飞等异常情况出现时,由于未能在及时刷新WWDG,导致WWDG中断事件被触发。在中断服务程序中刷新WWDG,以免微控制器复位,造成运行信息被破坏,并保存运行信息以供错误分析。$ X7 |9 _# C7 Q' W! Z/ m
22.jpg 3 u) P( ^6 `+ b
- b9 L6 j' r+ a: u, q! d' C' J' }
问题分析
7 N) ?! H6 U! G, k( w利用IAR以及ST-Link V2进行在线调试,在执行完WWDG_Enable(127) 指令后,WWDG寄存器值如下所示。
: ^" d9 ]) t6 Z8 @' a( n: c
23.jpg 7 @2 l: q+ W+ t# c) B" y
其中提前唤醒中断标志WDGA@WWDG_SR被置位,意味着提前唤醒中断触发。在中断服务程序中,存在刷新WWDG指令。此时计数器值T=0x7F@WWDG_CR不在窗口内(W=0x50@WWDG_CFR),而WWDG在非窗口中(不允许刷新阶段)重装载计数器值会导致复位,如下图所示。
* v' K2 R: \! @: X) S2 W; p
' D8 J5 Q$ k+ x  n% j
24.jpg ; |" i5 L7 m/ L/ u" n% V
经过验证,针对这种情况,有两个解决方案。- z( h! e! L) |  e- |3 M% s0 E
解决方案一:
, E5 u0 S) G' d  d在使能WWDG之后清除提前唤醒中断标志位EWI@WWDG_SR,然后使能提前唤醒中断。如下所示。
+ M* |3 Y5 q0 e) q! Q
25.jpg ) w# U, G3 F; N4 Z& Z  U1 M
' g4 O& ^- Z" _; j2 I7 j
解决方案二:
  c; S9 f# Q6 S/ B2 _1 V配置计数器装载值不大于窗口值。如下所示。+ m& o, o( a, z
26.jpg
5 N0 ]3 u+ j' t8 P同时,需要确保唤醒中断的服务程序中存在中断标志位EWI@WWDG_SR判断语句,以避免异常。
" L* s+ p& n) x' f* M+ T7 v2 }  ]' O) ^0 c9 ~% K
总结
: v" |" d: X( uWWDG不仅提供了一种有别于独立看门狗的程序监测方法。同时提前唤醒中断的存在,也为故障信息的保存以及分析,提供了一种途径。但是,需要注意的是窗口看门狗的时钟源来源于PCLK1,在STOP、STANDBY低功耗模式下,WWDG功能被停止。
" j' h$ v! y3 z+ `6 c% M

+ g, p5 Z3 W" x: H
5 ?' B/ V1 c, Q: o5 g

/ V$ Y  v% n! u5 F

- }3 L1 x4 e1 e/ @' V
1 t$ M" s" {4 \  A

1 Q5 ]5 o0 S/ F! S: P! e资料下载
. H; l1 S1 G9 M0 o% W4 m0 T# B! f
. t; ^2 C' {" }0 P4 h* k更多实战经验8 @0 C1 B8 w" [4 E+ U. X9 p
. p/ c) F; I/ p4 U! n
赞 收藏 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 手机版