|
每一块处理器都有复位的功能,不同处理器复位的类型可能有差异,引起复位的原因也可能有多种。 , D" J" [: G# B) g9 K4 B 今天是第3篇分享,《STM32学习笔记》之引起电源和系统异常复位的原因。 - X" i, }, r( m$ M STM32的复位功能非常强大,可通过软件、硬件和一些事件触发系统复位,而且通过其复位状态标志可分析复位原因。该部分位于STM32的RCC(Reset andClock Control)模块。 3 D/ Y/ T$ H/ f& J6 U' E STM32 复位介绍 9 {; x$ L3 g T3 E2 {" h* g 对于STM32来说,复位通常分为三种类型:系统复位、电源复位和备份域复位。本文结合STM32F4描述系统和电源复位的内容。 & D c$ F8 F/ |- Z 1. 系统复位 除了RCC的复位标志和备份域中的寄存器外,系统复位会将其它全部寄存器都复位为复位值。 产生系统复位事件: · NRST 引脚低电平 · 窗口看门狗计数结束 · 独立看门狗计数结束 · 软件复位 · 低功耗管理复位 : o0 ]5 y9 {0 Z( H0 h& ~) p4 g 2. 电源复位 除备份域内的寄存器以外,电源复位会将其它全部寄存器设置为复位值。 3 e4 Z+ A# |1 o0 W2 s 产生电源复位条件: · 上电/掉电复位或欠压复位 · 在退出待机模式时 / y) }$ @4 s3 N7 L; \* |; R8 g 注:备份域具有特定的复位,其复位仅作用于备份域本身(本文暂不讲述备份域复位)。 3. 复位电路简图 3 m5 R& v8 A! x" t2 @9 q
由上图可以看出来,NRST引脚、看门狗等各种事件最终都能引起系统复位。 STM32 内核和系统复位 上章节站在STM32整体层面讲述了产生复位的多种事件,本章节进一步描述STM32的内核和系统复位。 STM32由内核(如:Cortex-M4)和各种片内外设(如UART)资源组成,其中软件复位可指定是内核复位还是系统复位。
1. 内核复位 在Cortex-M内核文档中大概有这样的描述:通过设置 NVIC 中应用程序中断与复位控制寄存器(AIRCR)的VECTRESET 位,可只复位处理器内核而不复位其它片上设施。 也就是说,这样操作只复位Cortex-M内核,不会复位UART这些片内外设。 内核复位函数(参考内核代码修改而来): void NVIC_CoreReset(void) { __DSB(); SCB->AIRCR = ((0x5FA <<SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR &SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_VECTRESET_Msk); //置位 VECTRESET __DSB(); while(1) { __NOP(); } } & T9 i! z% x' x) T 2. 系统复位 软件复位中的系统复位操作的寄存器位(SYSRESETREQ)不同,复位的对象为整个芯片(除后备区域)。 系统复位函数: void NVIC_SysReset(void) { __DSB(); SCB->AIRCR = ((0x5FA <<SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR &SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); //置位 SYSRESETREQ __DSB(); while(1) { __NOP(); } } " |9 U6 t/ s# f% V8 J* j+ ^ STM32 复位来源 2 x& m6 c; q0 B S# k- h 为了方便软件工程师调试和查找(复位)问题,STM32设计有个状态寄存器保存了各种复位来源的状态。 如下图所示(具体请查阅参考手册): ( K& @& [) j9 r" C8 z; y( Q4 n
STM32 引起异常复位的原因 z5 y* y# r% D& R 上面讲述了引起复位的事件有多种,本章节将结合实际应用,描述常见引起复位的原因及解决办法。 8 ^, p) w! ^- o1 u- ] 原因一:NRST引脚电平被拉低引起复位 有些特殊环境,特别是大型工厂,外界或内部会使电源产生干扰信号,使STM32的NRST引脚电平被拉低,从而导致系统复位。 分析原因:NRST引脚电平拉低20us就会引起系统复位,电源上一个纹波,或者外部静电都会引起电源被拉低20us。 解决办法:电源滤波、使用隔离电源、添加屏蔽措施等。 原因二:欠压引起复位 有些产品在设计之初没有综合计算负载(与STM32同电源),因负载过大,使其欠压,从而导致复位。 分析原因:STM32除了上电和掉电复位之外,绝大部分STM32还有一个欠压复位,当电源电压 (VDD) 降至所选 VBOR 阈值以下时,芯片将复位。 解决办法:选择负载更大的电源、通过软件配置合理的欠压值VBOR。 . X. z7 o# d6 v) f4 X+ S& {4 S 原因三:数字、模拟电源地压差引起复位 有工程师将VSS 和 VSSA之间使用一个几欧,甚至几十欧的电阻连接,有时候(有大电流经过地线)就会因为电源地的压差导致芯片(电源)复位。 分析原因:我们比较关注 VDD 和VDDA 的关系,但忽略了 VSSA 和 VSS 压差需要小于 50mV这一点(具体可以看数据手册)。如果有大电流的情况,则会引起电源地存在压差。 解决办法:尽量使用完全连接地的方式处理,比如0欧电阻,或者隔离电源。 原因四:看门狗超时喂狗引起复位 有不少工程师设计低功耗产品时,使用了看门狗,但是他们往往忘记了芯片睡眠模式不能停止喂狗,从而导致看门狗复位。 分析原因:STM32进入睡眠之后,看门狗依然继续在工作,如果不及时喂狗,芯片会产生看门狗复位。 解决办法:进入睡眠之前设置更长的喂狗时间,同时不定期唤醒芯片进行喂狗。 9 A, Z4 g+ R7 x% T |
| 学习了 |
应用方案篇:典型系统架构与各行业落地场景
器件详解篇:STPMIC1L 与 STPMIC2L 硬件规格与差异对比
总览篇:面向 STM32MP 平台,专用集成 PMIC 解决嵌入式电源设计痛点
《STM32学习笔记》之电源管理及低功耗设计要点
ST × MathWorks 重构先进 BMS 开发全流程
【DIY-STM32N6570-DK-MINI板子功耗测试】
意法半导体推出STM32微处理器专用高集成度电源管理芯片
开源一个F334的多功能数控电源,基于HAL库编写,手头有一...
基于STM32F334的BUCK同步降压数字电源设计
基于STM32F334的数字电源
微信公众号
手机版