硬件复位初始化:CPU复位所有寄存器的值、外设恢复默认状态(如关闭外设时钟)
执行BootROM(厂商芯片流片时固化的一段代码,固化在芯片内部)
├─→ 初始化基础时钟(如切换到HSI内部时钟)
├─→ 初始化必要外设(如Flash控制器、调试串口)
├─→ 检测启动模式(通过BOOT引脚或选项字节,启动Bootloader)
│ ├─→ 从内部Flash(0×08000000)启动:直接跳转至用户程序起始地址
│ └─→ 从系统存储器(System Memory)启动:执行厂商Bootloader(如STM32的USB DFU)
│ └─→ 从RAM启动(0x20000000)
假设从内部Flash启动:加载用户Bootloader(若有)
├─→ 从内部Flash/外部存储介质读取用户Bootloader到RAM或直接执行
├─→ 执行Bootloader的启动代码(.s文件)
│ ├─→ 高级时钟配置(如PLL倍频到主频)
│ ├─→ 外设深度初始化(如以太网、文件系统)
│ ├─→ 固件更新检测(OTA、USB/UART通信)
│ └─→ 跳转至应用程序复位向量(即main()的上级入口)
执行应用程序的启动代码(startup_xxx.s)
├─→ 初始化C语言环境(如复制.data段、清零.bss段)
├─→ 调用库初始化(如ARM的__main)