2025-11-08 05:44:22
STM32复位状态分几种情况看得到,比如上电自动复位、按键手动复位、软件复位这三种最常见。复位后芯片会回到初始工作状态,就像重启电脑那样,所有外设都归零,程序从指定位置重新跑起。这时候看复位原因寄存器就能知道是哪种情况导致的复位,电压异常、代码跑飞、温升过高都可能触发复位。
为什么复位状态有这些区别呢?因为STM32内部有专门监测电压的电路,当电压低于2.0V或者超过3.6V时,系统会自动进入复位模式。比如看复位原因寄存器(地址0x1A000004),低电压复位对应的值是0x20000000,温升过高是0x40000000,非法访问是0x80000000。这些数据在《STM32标准参考手册》第11章有详细说明。软件复位是通过执行特定指令实现的,比如在HAL库里有HAL_NVIC_SystemReset函数,执行后会强制将PC(程序计数器)指向0x00000000地址的中断向量表。硬件复位时,芯片内部的重置电路会把所有外设寄存器清零,堆栈指针SP(Stack Pointer)恢复到0x20000000的默认值,这时候如果看Flash控制寄存器(CR)的值为0x00000000,就能确定是硬件复位了。
本题链接: