STM32启动过程概述

1. STM32启动过程概述

STM32 微控制器的启动过程是指从上电或复位开始,到系统开始执行用户程序的整个过程。这个过程包括了硬件初始化、引导加载程序 (Bootloader) 执行、系统时钟配置、外设初始化等步骤。

2. STM32 启动的基本流程

  1. 上电或复位

    • STM32 芯片的启动过程是从芯片上电或复位信号触发开始的。此时,处理器会从预设的复位向量地址开始执行代码。STM32 通常会有一个硬件复位管理模块(RCC、SysTick、NVIC 等)来处理复位。
  2. 复位向量和启动代码

    • STM32 在上电或复位时,会从 向量表(位于内存的地址 0x000000000x08000000)开始执行指令。这个向量表包含了中断服务程序(ISR)和复位处理程序(Reset_Handler)。
    • 复位向量指向的是 startup.s 汇编文件中的 _start 函数,它负责执行一些最基础的初始化操作。
  3. 设置堆栈指针

    • 复位后,STM32 会初始化堆栈指针(SP),使其指向栈顶(通常位于 SRAM 的末尾),从而为后续的中断和函数调用做好准备。
  4. BSS 和数据段初始化

    • 在启动过程中,startup.s 文件会进行静态变量的初始化。所有未初始化的全局变量会被清零(BSS 段),而已初始化的全局变量会从 Flash 区域拷贝到 SRAM 中(Data
### STM32微控制器启动过程详解 STM32 是基于 ARM Cortex-M 架构的微控制器系列,其启动过程涉及硬件初始化和软件执行两个主要阶段。以下是关于 STM32 启动过程的具体描述: #### 1. 上电复位与 Boot 模式选择 当 STM32 微控制器上电或发生复位事件时,内部硬件电路会自动进入复位状态。此时,微控制器的核心寄存器被设置为其默认值,同时系统会选择从哪个存储区域加载初始指令。 Boot 模式的选择由引脚 `BOOT0` 和 `BOOT1` 的组合决定[^1]。具体来说: - 如果 `BOOT0=0` 并且 `BOOT1=x`,则设备将从 Flash 存储器启动。 - 如果 `BOOT0=1` 并且 `BOOT1=0`,则设备将从 System Memory 启动。 - 如果 `BOOT0=1` 并且 `BOOT1=1`,则设备将从 SRAM 启动。 这种模式的选择允许开发者灵活地指定不同的启动源,例如运行预置的 bootloader 或者调试代码。 #### 2. 系统时钟配置 在完成 Boot 模式选择之后,STM32 进一步初始化系统时钟。默认情况下,微控制器会在复位后使用内部 RC 振荡器 (HSI) 作为系统时钟源。随后,可以通过修改 RCC(Reset and Clock Control)寄存器来切换至外部晶振 (HSE),并启用 PLL 来提高主频以达到最佳性能[^1]。 #### 3. 堆栈指针初始化 一旦选择了正确的时钟源,堆栈指针 (`SP`) 就会被初始化为链接器文件中定义的位置。该地址位于向量表的第一个条目处,而向量表本身通常驻留在闪存起始位置或者重新映射后的 RAM 地址范围内[^1]。 #### 4. 跳转到主函数入口点 紧接着,在向量表中的第二个条目保存着 Reset Handler 函数的地址。CPU 控制权转移至此函数,标志着正式进入了用户编写的程序逻辑部分。一般而言,Reset Handler 定义了一系列必要的低级初始化操作,比如 GPIO 设置、外设使能以及中断优先级分配等[^3]。 ```c void Reset_Handler(void) { // 初始化堆栈和其他环境变量 __initialize_hardware(); // 调用 C 库初始化例程 _SystemInit(); // 开始执行 main() 函数 main(); } ``` 以上即构成了整个 STM32 微控制器完整的启动流程概述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值