打印
[应用相关]

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

[复制链接]
76|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Haizangwang|  楼主 | 2025-6-9 19:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        在 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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

147

帖子

0

粉丝