003、STM32启动流程详解-从flash启动

preview
需积分: 0 10 下载量 42 浏览量 更新于2023-03-05 收藏 228KB DOCX 举报
STM32系列微控制器是基于ARM Cortex-M内核的32位微处理器,广泛应用在嵌入式系统设计中。本文将详细解析STM32的启动流程,特别关注从Flash启动的过程。 1. **STM32启动流程概述** STM32的启动流程包括上电复位、启动模式选择、加载引导程序、执行初始化代码、运行应用程序等步骤。启动模式的选择通常由BOOT0和BOOT1引脚的状态决定,这两个引脚的电平组合决定了是通过Flash、SRAM还是外部存储器启动。 2. **Flash启动** - **默认启动方式**:在BOOT0为高电平,BOOT1为任意电平时,STM32会从Flash的默认地址0x08000000开始执行程序。这是最常见的启动模式,也是大多数应用的首选。 - **Bootloader位置**:通常情况下,Bootloader被烧录在Flash的前几个扇区,其主要任务是加载应用程序到内存并执行。 3. **上电复位和启动模式选择** - **上电复位(POR)**:当电源刚接入时,STM32会经历一个上电复位过程,所有寄存器复位到预设值,系统从预定义的启动地址开始执行。 - **启动模式**:BOOT0和BOOT1引脚的设置可以改变启动模式。例如,当BOOT0为低电平,BOOT1为高电平时,STM32将从SRAM启动,这在进行系统更新或调试时很有用。 4. **引导加载程序(Bootloader)** - **Bootloader的作用**:Bootloader是系统启动后的第一段代码,它负责加载应用程序到RAM并跳转到应用程序的入口点执行。在Flash启动模式下,Bootloader通常负责校验Flash中的应用程序,并处理固件更新。 - **自举加载程序的实现**:Bootloader可以是制造商预烧录的,也可以由开发者根据需求定制。常见的Bootloader有HAL(硬件抽象层)库提供的标准Bootloader,或者用户开发的定制Bootloader,如DFU(设备固件升级)或UART(通用异步收发传输器)升级方式。 5. **初始化过程** - **系统时钟配置**:Bootloader执行后,首先进行系统时钟的配置,因为所有的外设操作和处理器速度都依赖于时钟系统。 - **内存映射**:确定Flash、SRAM以及其他存储区域的地址空间分配。 - **外设初始化**:初始化GPIO、串口、定时器等外设,为应用程序的运行做好准备。 - **堆栈设置**:设置堆栈指针SP,以确保中断服务例程和子函数调用的正常工作。 6. **应用程序执行** - **跳转到应用程序**:Bootloader完成初始化后,会跳转到应用程序的入口点,通常是位于Flash的 `_start` 或 `main` 函数。 - **应用程序运行**:从这里开始,STM32将按照应用程序的逻辑执行,执行用户编写的功能代码。 总结,STM32从Flash启动的流程涉及到多个步骤,从上电复位到Bootloader执行,再到应用程序的运行,每个环节都至关重要。理解这个流程对于开发和调试STM32应用至关重要,有助于我们更好地控制系统的启动行为和优化性能。