EDA365电子论坛网

标题: 软件启动模式导致 IWatchDog 失效 [打印本页]

作者: lilino    时间: 2019-12-27 10:05
标题: 软件启动模式导致 IWatchDog 失效
问题:
& [  F, c( H" A, b# T4 k" B该问题由某客户提出,发生在 STM32F103VET6 器件上。据其工程师讲述:其产品中使用了 STM32,已量产。在发给其客户的产品中,部分出现不开机现象。其工程师在现场测试后发现 STM32 的 HSE 没有起振。通过拉低 NRST 管脚对 SMT32 复位后,HSE 起振且系统恢复正常工作。于是怀疑 STM32 的HSE 的缺陷导致了其不起振。
/ p# I/ Y& T% d* g& \( B: k; x7 {0 b, ?6 @8 ]1 a9 z6 s$ x
调研:
( T- D* e2 S" ~, E( V' J. L, q检查其硬件电路设计的 HSE 部分,在原理图及 PCB 中匀未发现错误。检查 STM32 的供电情况,VDD、VDDA、VBAT、Vref+、Vref-、VSS、VSSA 未发现异常。检查 BOOT0 管脚的设置,未发现异常。检查 NRST 的外围电路,未发现异常。对其产品重新上电,可以正常起动、工作。检查软件计,发现其 IWatchDog 的启动模式为软件启动。于是,要求其工程师将其改为硬件起动模式,然后对此前出现异常的产品更新程序后重新测试。经过一段时间的观察后,发现其不再重现先前的问题。+ J8 `& q6 _0 d  P" R! Q0 ~

+ W, y/ A4 ~  N1 @! M* Z: v- }( v3 U- y# L' w) a% d5 p. f! s
结论:6 T8 Q* ~5 J3 v1 a; K
猜测 STM32 在运行中受到了连续的干扰。在程序跑飞之后,由于 IWatchDog 溢出而引起STM32 复位。复位之后干扰依然存在,程序再次跑飞。由于设置了软件启动模式,导致IWatchDog 此时尚未开始工作,从而不能再次复位 STM32。于是,干扰过后,STM32 不能自行恢复到正常的工作状态。而HSE 不起振则是由于软件未来得及对 HSE 开启而表现出的一个现象。
' Q7 n# x2 w. a
9 `3 ?8 I# S$ ?" M处理:
% @5 S4 l8 G% c- c2 B; y2 c$ z将 IWatchDog 的启动模改为硬件启动,可以保障 STM32 在干扰过后能够自行的恢复到正常的工作状态。
5 B: ?  @+ b- ?9 E% ?$ Q+ p# a  A. ?
建议:: Z- ^: b$ o2 G* F2 R5 z
STM32 的 IWatchDog 设有两种启动模式,一种是软件启动模式,另一种是硬件启动模式。在软件启动模式下,IWatchDog 在复位之后暂时是关闭的,直到软件对其开启之后才开始工作。而在硬件启动模式下,在复位结束时,IWatchDog 已经开始工作,无须软件干预。于是,同硬件启动模相比,软件启动模式在时间上多了一个“不安全窗口”,如图(二)所示:
, G+ ]9 T* F; r  j. m
9 x7 B6 ^; ]1 q; Q# Q( p' F' d& [$ y, k& x) N% W# v
如果 STM32 在“不安全窗口”内受到干扰而跑飞,那么系统是无法自恢复的。所以,要使 IWatchDog 有效的工作,硬件启动模式是必须的选择。通常,在编程器的操作界面上会有相关的选项,以供使用者选择用哪种启动模式来启动 IWatchDog。虽然用户程序也可以通过对 STM32 的 Option Bytes 进行设置来实现两种启动模式的选择,但不建议这样做,因为这需要相关的软件具有严谨控制逻辑,处理不当会留下安全隐患
' Y0 d: N1 P9 o5 p6 |( U
' l- K5 M) c" C* }
: y% s# l5 K6 Y1 Z
+ v* O0 i) m* B3 x
- r* M1 o0 X( {- Y
$ M( Y) R+ i9 |# X' G# ~1 j

作者: wiusuiwj    时间: 2019-12-27 18:36
还真没想过




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2