Haizangwang 发表于 2025-6-9 19:19

STM32单片机复位方法和对比分析

      在 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

小岛西岸来信 发表于 2025-7-4 19:55

主要是这两种吧
硬件复位:通过 NRST 引脚低电平触发,或看门狗溢出强制复位。
软件复位:配置 RCC 寄存器触发系统复位,或 IWDG/WWDG 触发复位。
页: [1]
查看完整版本: STM32单片机复位方法和对比分析