STM32系统启动流程概述

目录

1. 上电与复位

2. 复位中断处理

3. 系统初始化

4. 配置外设

5. C++全局对象构造

6. 运行C/C++应用程序

7. 多种启动模式


STM32系统启动流程概述如下:

1. 上电与复位

  - 当STM32微控制器上电或发生复位时,CPU从固定的复位向量地址(对于大多数STM32型号,通常是0x08000000)开始执行代码。

2. 复位中断处理

  - 复位向量地址处的代码是由STM32官方提供的或用户自定义的启动代码,通常位于汇编源文件(例如`startup_stm32f103xe.s`)。这段代码主要负责初始化堆栈指针(SP)和程序计数器(PC),并跳转至C语言环境下的初始化函数。

3. 系统初始化

  - 启动代码继续执行必要的最低层硬件初始化,包括:
     - 设置中断向量表。
     - 配置内部高速时钟(HCLK)、低速时钟(LSI/LSE)以及系统时钟(SYSCLK)。
     - 初始化NVIC(Nested Vectored Interrupt Controller)。
     - 初始化堆栈(Stack)。
     - 初始化静态存储区(.data段)的内容,将 flash 中已经初始化的数据拷贝到相应的 SRAM 区域。
     - 清零未初始化的数据段(.bss段)。

4. 配置外设

 - 如果使用的是HAL库或标准库,此时还会进一步配置通用外设如GPIO、USART、TIM等。

5. C++全局对象构造

  - 若项目中使用了C++,则在此阶段会执行全局对象的构造函数。

6. 运行C/C++应用程序

 - 完成所有基本初始化之后,启动代码会调用`main()`函数,标志着C/C++应用程序正式开始执行。

7. 多种启动模式

  - STM32允许用户通过BOOT引脚或其他配置寄存器设置不同的启动模式:
     - **主闪存(Main Flash)**:默认情况下,从内置闪存中加载并执行程序。
     - **系统存储器(System Memory)**:用于特定的引导加载程序或通过串行通信接口(如UART或USB DFU)更新固件。
     - **SRAM**:可以从SRAM启动,通常用于调试或固件更新后的临时执行。

总之,STM32启动流程的核心目标是从硬件层面初始化微控制器,并最终跳转至用户应用程序的主体部分,即`main()`函数开始执行。这个过程中涉及了大量的底层硬件初始化以及可能的固件加载操作,以确保微控制器能够在安全稳定的环境中运行应用程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值