STMCU小助手
发布时间:2022-2-25 19:49
|
前言 窗口看门狗(Window watchdog, WWDG),提供了一种在指定时间窗内刷新看门狗的功能。同时 WWDG 提供了一个提前唤醒中断,能够在 WWDG 计数器值降到触发复位的上一个值时触发。实际应用中,可以在此中断被触发时,刷新 WWDG,并记录当前运行信息,以满足运行错误信息记录等功能需求。3 r" i, W W3 p, J; @ 6 A; C: x7 J2 ]! |% F# k; \8 c 问题描述 问题复现平台: 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 问题描述:在应用开发过程中,WWDG 开启后,WWDG 的提前唤醒中断立即被触发,并且微控制器复位。# `5 ?+ s7 B' o- L! k% H0 ^) b 主要实现程序如下所示。4 n% q; { w2 s' R7 R
如流程图所示,在应用程序正常运行时,WWDG 中断不会被触发。当程序跑飞等异常情况出现时,由于未能在及时刷新 WWDG,导致 WWDG 中断事件被触发。在中断服务程序中刷新 WWDG,以免微控制器复位,造成运行信息被破坏,并保存运行信息以供错误分析。0 e5 K8 v9 l& E" a$ s + n8 k: M4 j0 Q9 j; b
3 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 _ ?
其中提前唤醒中断标志 WDGA@WWDG_SR 被置位,意味着提前唤醒中断触发。在中断服务程序中,存在刷新 WWDG 指令。此时计数器值 T=0x7F@WWDG_CR 不在窗口内(W=0x50@WWDG_CFR),而 WWDG 在非窗口中(不允许刷新阶段)重装载计数器值会导致复位,如下图所示。7 v* g( D& P3 d9 F3 _/ y* l/ ?3 E
经过验证,针对这种情况,有两个解决方案。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 _ d. D- q" T4 A# i3 n7 c 配置计数器装载值不大于窗口值。如下所示。0 t8 }% }' ~: j
同时,需要确保唤醒中断的服务程序中存在中断标志位 EWI@WWDG_SR 判断语句,以避免异常。1 Y+ Y4 C6 g, E; y; ^- N' F ^ 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 |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版