在 STM32 中,复位(Reset)是系统重启的一种机制。不同的复位方式对 寄存器和SRAM 的影响不同,以下是详细分析:
一、STM32 的复位类型及影响
1. 系统复位(System Reset)
1、触发方式:
1、外部复位引脚(NRST)拉低。
2、看门狗超时(IWDG、WWDG)。
3、上电复位(Power-on Reset, POR)。
4、软件复位(通过 NVIC_SystemReset()函数进行复位)。
2、复位行为:
1、重置所有寄存器(包括CPU内核寄存器,外设寄存器,堆栈指针)
2、SRAM 内容被保留(未被清零),但某些外设状态会被重置,static声明的变量会随着程序复位被初始化。
3、向量表重新加载(从 Flash 起始地址 `0x08000000` 读取初始堆栈指针和复位向量)
2. 电源复位(Power Reset)
1、触发方式:
电源电压低于阈值后触发。
2、复位行为:
1、与系统复位类似,但会重置更多电源管理相关的寄存器
2、SRAM 内容可能丢失**(取决于供电稳定性)。
二、复位后的初始化流程
1、复位向量执行
从 Flash 地址 0x08000000 读取初始堆栈指针(MSP),从 0x08000004 读取复位向量,跳转到 Reset_Handler。
2、C 运行时初始化
.data 段(已初始化的全局变量)从 Flash 拷贝到 SRAM,.bss 段(未初始化的全局变量)清零,注意:此过程不会清零所有 SRAM,仅初始化特定段。
3、用户代码执行
main() 函数开始运行,重新初始化外设和堆栈。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/DearJULY/article/details/148409381
|