单片机
返回首页

STM32启动流程深度解析

2025-09-19 来源:cnblogs

启动流程

1.上电复位
2.系统初始化
3.跳转到 main 函数

启动入口:

  • cpu被清空,程序从0x00000000开始运行

  • 0x00000000存放的是reset_handler的入口地址

  • 0x00000000的实际位置会变,根据不同的启动模式决定

  • 启动模式分为:

  • flash启动:常用的启动方式,0x00000000被映射到0x0800000

  • sram启动:用于调试

  • 系统闪存启动:用于烧录程序,跑的是系统自带的bootloader

  • 初始化中断向量表

  • 0x00000000存放的是中断向量表的起始位置

  • 中断向量表的前4个字节是 _initial_sp, 表示 主栈指针(MSP) 的初始地址,用来设置堆栈指针(SP)

    Stack_Size      EQU     0x00000400
    
                    AREA    STACK, NOINIT, READWRITE, ALIGN=3
    Stack_Mem       SPACE   Stack_Size
    __initial_sp

    其中_initial_sp是一个标号,代表栈+堆,即栈顶

  • 然后从下一个地址(0x08000004)读取复位处理程序的地址(Reset_Handler),并跳转到那里执行

    ; Reset handler
    Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
     IMPORT  __main
     IMPORT  SystemInit
                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

    Reset_Handler中主要:

  • 调用了systemInit,配置系统时钟等硬件。

  • 进入了_main函数,复制数据,跳转用户main函数

  • SystemInit 是 ST 库提供的函数,负责初始化时钟、外设等,比如设置系统时钟为 72MHz。
    __main 是 C 运行时库的入口,它会初始化全局变量(复制 .data 段到 SRAM,清零 .bss 段),然后跳转到用户写的 main 函数,至此头文件初始化完成。
    stm32 ram和flash分布


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 便携式混音器

  • 18W乙类音频放大器

  • 6晶体管H桥

  • USB LED调光器

  • USB自供电声卡

  • AVR LCD温度计—LM35

    相关电子头条文章