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

STM32学习笔记 | 引起电源和系统异常复位的原因

[复制链接]
STMCU小助手 发布时间:2021-3-10 13:03
STM32学习笔记 | 引起电源和系统异常复位的原因

$ k! f# z- w" m1 C9 @0 X3 F' E, v
每一块处理器都有复位的功能,不同处理器复位的类型可能有差异,引起复位的原因也可能有多种。

+ ~7 @: T# m/ y
STM32的复位功能非常强大,可通过软件、硬件和一些事件触发系统复位,而且通过其复位状态标志可分析复位原因。该部分位于STM32的RCC(Reset andClock Control)模块。

3 Y$ ~  N; [& f5 ]$ P
STM32 复位介绍

# F: o  y4 p4 b, Y2 t
对于STM32来说,复位通常分为三种类型:系统复位、电源复位和备份域复位。本文结合STM32F4描述系统和电源复位的内容。
* L- T* H% V1 _
1. 系统复位
除了RCC的复位标志和备份域中的寄存器外,系统复位会将其它全部寄存器都复位为复位值。
产生系统复位事件:
※       NRST 引脚低电平
※       窗口看门狗计数结束
※       独立看门狗计数结束
※       软件复位
※       低功耗管理复位
/ e+ l% q, P  i% x; u$ U+ D7 Z
2. 电源复位
除备份域内的寄存器以外,电源复位会将其它全部寄存器设置为复位值。
产生电源复位条件:
※       上电/掉电复位或欠压复位
※       在退出待机模式时
注:备份域具有特定的复位,其复位仅作用于备份域本身(本文暂不讲述备份域复位)。

1 N  Y9 z/ [0 ]6 n; q3 ^; }
3. 复位电路简图
2.1.png
由上图可以看出来,NRST引脚、看门狗等各种事件最终都能引起系统复位。

6 I5 L% u+ Q2 Z+ v
STM32 内核和系统复位

$ S# [8 r* ]( g! r# t/ p9 S
上一章节站在STM32整体层面讲述了产生复位的多种事件,本章节进一步描述STM32的内核和系统复位。
STM32由内核(如:Cortex-M4)和各种片内外设(如UART)资源组成,其中软件复位可指定是内核复位还是系统复位。
2.2.jpg
(图片来源网络)

3 d0 d: c2 D7 b( f( P
1. 内核复位
在Cortex-M内核文档中大概有这样的描述:通过设置 NVIC 中应用程序中断与复位控制寄存器(AIRCR)的VECTRESET 位,可只复位处理器内核而不复位其它片上设施。
也就是说,这样操作只复位Cortex-M内核,不会复位UART这些片内外设。
内核复位函数(参考内核代码修改而来):
  1. void NVIC_CoreReset(void)( L" N% S' T  C7 J/ K% L6 C
  2. {% I" F( i3 n% h1 M" d- G
  3.   __DSB();
    / g' I; d5 B% s
  4.   SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)      |
    % t5 F) u. x' [- M* u% ^* y
  5.                  (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
    ! ]: T/ j% v: [/ y' ~# I, s
  6.                  SCB_AIRCR_VECTRESET_Msk);       //置位 VECTRESET
    7 Y9 Y7 L. `  B
  7.   __DSB();( c% }7 J. G; ?
  8.   while(1) { __NOP(); }* K/ l$ ~( F' c2 O/ P
  9. }
复制代码

8 S/ \$ k  K! ]! S1 r2 I9 C" n8 G$ g. Y
2. 系统复位
软件复位中的系统复位操作的寄存器位(SYSRESETREQ)不同,复位的对象为整个芯片(除后备区域)。
系统复位函数:
  1. void NVIC_SysReset(void)
    " K' w- `3 j+ i: c/ D, B0 e4 A
  2. {/ s6 T. a0 I1 W9 [0 S; A2 L( I9 Z
  3.   __DSB();/ N- l1 v: ^0 D- W# j
  4.   SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)      | + Y2 _" y" ]# `" R* U* k
  5.                  (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | * M+ U+ z4 {* Q. O: i( Z  q
  6.                  SCB_AIRCR_SYSRESETREQ_Msk);     //置位 SYSRESETREQ  z, @% ~6 h- U1 c' R
  7.   __DSB();
    " `2 L5 Q1 Y  q7 h* ?/ k- F
  8.   while(1) { __NOP(); }3 j* G& L3 _9 T' \& W4 q+ Y
  9. }
复制代码

. t! E* r6 {& b0 @0 X7 S
STM32 复位来源

; R0 s5 f/ }& D; ~
为了方便软件工程师调试和查找(复位)问题,STM32设计有个状态寄存器保存了各种复位来源的状态。
如下图所示(具体请查阅参考手册):

% L8 o( L' q, U' y# c
2.3.jpg
! ?* y. g$ y" s2 T* X3 b& ?5 D
STM32 引起异常复位的原因
5 q4 Y7 c: N+ [! H6 F: i
上面讲述了引起复位的事件有多种,本章节将结合实际应用,描述常见引起复位的原因及解决办法。

! ~% u3 E& ~9 H' ]8 o. k4 n
原因一:NRST引脚电平被拉低引起复位
有些特殊环境,特别是大型工厂,外界或内部会使电源产生干扰信号,使STM32的NRST引脚电平被拉低,从而导致系统复位。
分析原因:NRST引脚电平拉低20us就会引起系统复位,电源上一个纹波,或者外部静电都会引起电源被拉低20us。
解决办法:电源滤波、使用隔离电源、添加屏蔽措施等。
( Y1 w7 u1 }: Q! l, S6 f
原因二:欠压引起复位
有些产品在设计之初没有综合计算负载(与STM32同电源),因负载过大,使其欠压,从而导致复位。
分析原因:STM32除了上电和掉电复位之外,绝大部分STM32还有一个欠压复位,当电源电压 (VDD) 降至所选 VBOR 阈值以下时,芯片将复位。
解决办法:选择负载更大的电源、通过软件配置合理的欠压值VBOR。
6 x& x# E' N: V8 W# w) X" s
原因三:数字、模拟电源地压差引起复位
有工程师将VSS 和 VSSA之间使用一个几欧,甚至几十欧的电阻连接,有时候(有大电流经过地线)就会因为电源地的压差导致芯片(电源)复位。
分析原因:我们比较关注 VDD 和 VDDA 的关系,但忽略了 VSSA 和 VSS 压差需要小于 50mV这一点(具体可以看数据手册)。如果有大电流的情况,则会引起电源地存在压差。
解决办法:尽量使用完全连接地的方式处理,比如0欧电阻,或者隔离电源。
- ?1 o# W( }! {$ N$ E0 w( M6 Q
原因四:看门狗超时喂狗引起复位
有不少工程师设计低功耗产品时,使用了看门狗,但是他们往往忘记了芯片睡眠模式不能停止喂狗,从而导致看门狗复位。
分析原因:STM32进入睡眠之后,看门狗依然继续在工作,如果不及时喂狗,芯片会产生看门狗复位。
解决办法:进入睡眠之前设置更长的喂狗时间,同时不定期唤醒芯片进行喂狗。
) G% q: g6 V% _  i5 X: O, `5 y! y$ j
复盘一下

, h: G, M3 w9 M% S
▼复位通常分为:系统复位、电源复位和备份域复位;
▼STM32软件复位分:内核和系统复位;
▼STM32复位来源:状态寄存器保存复位来源状态;
▼常见复位问题:NRST被拉低、欠压、压差、看门狗超时喂狗等;
) X7 b! H& U* }0 S8 Z
文章出处: STM32

) L+ i; J- S# S: K

8 J6 {9 x+ U* g  k: ?. N+ [  {; r
赞 收藏 评论0 发布时间:2021-3-10 13:03

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版