STM32 单片机启动过程全解析:从上电到主函数的旅程

article/2025/9/5 8:25:21

一、为什么要理解启动过程?

STM32 的启动过程就像一台精密仪器的开机自检,它确保所有系统部件按既定方式初始化,才能顺利运行我们的应用代码。对初学者而言,理解启动过程能帮助解决常见“程序跑飞”“不进 main”“下载后无反应”等问题;而对资深开发者,则有助于进行裸机编程、启动优化、Bootloader 设计等工作。


二、STM32 启动流程概览

STM32 的启动过程大致可以划分为以下几个阶段:

 

上电 / 复位     ↓启动模式选择(BOOT 引脚)     ↓向量表定位(读取复位向量)     ↓跳转至启动代码(如 startup_stm32f10x.s)     ↓C/C++ 运行时初始化(.data/.bss/init)     ↓调用 main 函数

图片


 


三、详细流程剖析

1. 上电与复位阶段

STM32 上电后,首先进入 复位状态,这是一种硬件初始化状态,保证芯片的稳定性。复位的方式包括:

  • 上电复位

  • 手动按下 NRST 引脚

  • 软件复位(通过 SCB->AIRCR)

接下来,芯片会读取一个叫做 启动引脚(BOOT0 和 BOOT1) 的组合,用于选择芯片从哪个存储介质启动。

2. 启动模式选择

STM32 支持三种启动模式(以 STM32F103 为例):

BOOT1

BOOT0

启动模式

X

0

从主 Flash 启动

0

1

从系统内置 Bootloader 启动

1

1

从 SRAM 启动

大多数应用情况下,设置为 主 Flash 启动(BOOT0 = 0),也就是我们的应用程序所在位置。

✅ Tips:学习 Bootloader 时,可以手动将 BOOT0 设置为 1,进入 ISP 模式。

3. 读取向量表 & 跳转

无论从哪启动,STM32 都会从特定地址读取 向量表。向量表是中断和异常的入口地址表,前两个条目尤为关键:

  • 地址 0x0000 0000(或其他起始地址):初始主堆栈指针(MSP)

  • 地址 0x0000 0004:复位中断向量(即程序入口地址)

芯片读取这两个值,并进行如下动作:

MSP ← *(0x00000000)PC  ← *(0x00000004)

STM32 会自动把 MSP 设置为初值,然后跳转到复位处理函数,通常是 Reset_Handler()

4. 执行启动文件 startup_xxx.s

Reset_Handler 并不是直接跳到 main(),而是执行一个启动汇编文件,如 startup_stm32f10x.s。它的职责包括:

  • 初始化堆栈指针

  • 初始化中断向量表

  • 调用 SystemInit()(时钟、Flash 等初始化)

  • 初始化数据段(.data)和清零 BSS 段(.bss

  • 最后调用 main()

简化伪代码如下:

​​​​​​​

Reset_Handler:    bl  SystemInit         ; 初始化系统时钟    bl  __libc_init_array  ; C 运行时库初始化    bl  main               ; 跳转到 main 函数


四、C/C++ 运行时初始化详解

在调用 main() 之前,C/C++ 编译器需要做一些关键准备:

✅ .data 段初始化

.data 段是已初始化的全局变量,例如:

int a = 5;  // 存储在 .data

这部分变量的值最初存储在 Flash,需要搬运到 RAM 才能读写。启动文件会将其从 ROM 拷贝到 RAM。

✅ .bss 段清零

.bss 段用于存储未初始化的全局变量,例如:

int b;  // 存储在 .bss,自动清零

启动代码会将 .bss 区域置为 0。

✅ C++ 构造函数支持

如果使用 C++,启动代码还会调用全局构造函数,这是通过 __libc_init_array() 实现的。


五、然后才是我们的 main() 函数

至此,所有底层初始化完成,CPU 跳转到 C 程序的入口 main() 函数,正式交给开发者写业务逻辑。

int main(void){    // 用户应用代码    while (1) {        // 主循环    }}


 


六、动手实践建议(面向初学者)

如果你是 STM32 小白,不妨通过以下步骤深入理解:

  1. 查看启动汇编文件:打开 startup_xxx.s 文件,理解 Reset_Handler 的流程。

  2. 在 SystemInit() 加断点:跟踪是否进入主时钟配置流程。

  3. 使用 map 文件分析段分布:看 .data.bss.text 的地址和大小。

  4. 学习如何修改向量表位置:通过 SCB->VTOR 改变中断表地址。

  5. 尝试裸机启动:不依赖 HAL 库,手动初始化堆栈、中断、系统时钟。


七、总结

STM32 的启动过程虽然隐藏在 HAL 库和 IDE 的自动生成之下,但正是这一套流程,支撑了嵌入式程序的稳定运行。掌握它,不仅有助于开发排错、理解底层逻辑,更是从“会用”到“精通” STM32 的必经之路。


http://www.hkcw.cn/article/FYhcRkRWnn.shtml

相关文章

2022 RoboCom 世界机器人开发者大赛(睿抗 caip) -高职组(国赛)解题报告 | 科学家

前言 题解 2022 RoboCom 世界机器人开发者大赛(睿抗 caip) -高职组&#xff08;国赛&#xff09;。 最后一题还考验能力&#xff0c;需要找到合适的剪枝。 RC-v1 智能管家 分值: 20分 签到题&#xff0c;map的简单实用 #include <bits/stdc.h>using namespace std;int…

typora插件下载链接和导入说明

1.引言 先看插件效果&#xff0c;本插件自带了历史文件tab切换、引用图片管理、思维导图、文档大纲、图排优化、文件模板、夜间模式等很多功能&#xff0c;插件的下载链接在本文最后。 2.安装插件 typora-0.9.98 之前的版本不推荐使用 插件解压为plugin文件夹&#xff0c;并移…

深化生态协同,宁盾身份域管完成与拓波软件兼容互认证

在信创产业蓬勃发展的浪潮下&#xff0c;行业生态的兼容适配决定了信创产品是否好用。近日&#xff0c;宁盾身份域管与拓波软件 TurboEX 邮件系统完成兼容互认证。测试结果显示宁盾身份域管&#xff08;信创版&#xff09;与 TurboEX 邮件服务器软件相互良好兼容&#xff0c;运…

Socket 编程 TCP

目录 1. TCP socket API 详解 1.1 socket 1.2 bind 1.3 listen 1.4 accept 1.5 read&&write 1.6 connect 1.7 recv 1.8 send 1.9 popen 1.10 fgets 2. EchoServer 3. 多线程远程命令执行 4. 引入线程池版本翻译 5. 验证TCP - windows作为client访问Linu…

SmolVLM2: The Smollest Video Model Ever(七)

编写测试代码与评价指标 现在的数据集里面只涉及tool的分类和手术phase的分类&#xff0c;所以编写的评价指标还是那些通用的&#xff0c;但是&#xff1a; predicted_labels:[The current surgical phase is CalotTriangleDissection, Grasper, Hook tool exists., The curre…

Cancer Cell丨肺癌早期干预新突破,TIM-3靶点或成关键

2025年5月8日&#xff0c;Cancer Cell 在线发表了一篇来自美国MD安德森癌症中心的研究文章Spatial and multiomics analysis of human and mouse lung adenocarcinoma precursors reveals TIM-3 as a putative target for precancer interception。作者整合了空间蛋白组、转录组…

全志V853挂载sd卡

参考文章:https://blog.csdn.net/weixin_59351001/article/details/127102440 1、插上sd卡 fdisk -l2、挂载SD卡到开发板 mount /dev/mmcblk1p1 /mnt/sdcard挂载失败(如下报错),需要格式化SD卡再进行挂载

性能测试-jmeter实战1

课程&#xff1a;B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战1 为什么需要性能测试呢&#xff1f;性能测试的作用&#xff1f;性能测试体系性能测试基础性能测试工具性能监控…

PABD 2025:大数据与智慧城市管理的融合之道

会议简介 2025年公共管理与大数据国际会议&#xff08;ICPMBD 2025&#xff09;确实在海口举办。本次会议将围绕公共管理与大数据的深度融合、数据分析在公共管理中的应用、大数据驱动的政策制定与优化等议题展开深入研讨。参会者将有机会聆听前沿学术报告&#xff0c;分享研究…

DL00924-基于深度学习YOLOv11的工程车辆目标检测含数据集

文末有代码完整出处 &#x1f697; 基于深度学习YOLOv11的工程车辆目标检测——引领智能识别新潮流&#xff01; &#x1f680; 随着人工智能技术的飞速发展&#xff0c; 目标检测 已经在各个领域取得了显著突破&#xff0c;尤其是在 工程车辆识别 这一关键技术上。今天&#…

Java 对接 Office 365 邮箱全攻略:OAuth2 认证 + JDK8 兼容 + Spring Boot 集成(2025 版)

&#x1f6a8; 重要通知&#xff1a;微软强制 OAuth2&#xff0c;传统认证已失效&#xff01; 2023 年 10 月起&#xff0c;Office 365 全面禁用用户名 密码认证&#xff0c;Java 开发者必须通过OAuth 2.0实现邮件发送。本文针对 CSDN 技术栈&#xff0c;提供从 Azure AD 配置…

秒杀/高并发解决方案+落地实现

前面我们防止超卖 是通过到数据库查询和到数据库抢购,来完成的, 代码如下:如果在短时间内,大量抢购冲击 DB, 造成洪峰, 容易压垮数据库解决方案:使用 Redis 完成预减库存,如果没有库存了,直接返回,减小对 DB 的压力。图示:Redis 的预减,已经存在了原子性,就是一条一条…

Baklib企业知识激活解决方案

Baklib知识中台构建路径 Baklib通过模块化架构设计与智能数据治理双轮驱动&#xff0c;为企业构建知识中台提供标准化实施路径。首先基于自然语言处理&#xff08;NLP&#xff09;技术实现非结构化文档的语义解析&#xff0c;打通CRM、ERP等业务系统间的数据孤岛&#xff1b;随…

【Gemini 深度研究】人形机器人:最新开发方案与未来展望 (2024-2025)

Gemini根据深度研究报告自动生成的html网页录屏 人形机器人&#xff1a;最新开发方案与未来展望 (2024-2025) I. 执行摘要 2024年至2025年&#xff0c;人形机器人正处于从科研探索向实际应用转型的关键时期&#xff0c;其作为通用型机器人的潜力日益显现。这一转变主要得益于具…

【动态规划:斐波那契数列模型】第 N 个泰波那契数

1、第 N 个泰波那契数&#xff08;easy&#xff09; 1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下&#xff1a; ​ T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2。给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 示例 1&#xff1a; …

秋招Day11 - JVM - JVM调优

性能监控的命令行工具&#xff1f; 操作系统层面&#xff1a; 我用过top来查看cpu和内存的使用情况使用过vmstat查看过虚拟内存的统计信息使用过iostat查看过系统的io情况使用过netstat查看过系统的网络信息 JDK自带的命令层面&#xff0c;我使用过&#xff1a; jmap -heap…

ChatGPT Plus/Pro 订阅教程(支持支付宝)

订阅 ChatGPT Plus GPT-4 最简单&#xff0c;成功率最高的方案 1. 登录 chat.openai.com 依次点击 Login &#xff0c;输入邮箱和密码 2. 点击升级 Upgrade 登录自己的 OpenAI 帐户后&#xff0c;点击左下角的 Upgrade to Plus&#xff0c;在弹窗中选择 Upgrade plan。 如果…

【深度学习】12. VIT与GPT 模型与语言生成:从 GPT-1 到 GPT4

VIT与GPT 模型与语言生成&#xff1a;从 GPT-1 到 GPT4 本教程将介绍 GPT 系列模型的发展历程、结构原理、训练方式以及人类反馈强化学习&#xff08;RLHF&#xff09;对生成对齐的改进。内容涵盖 GPT-1、GPT-2、GPT-3、GPT-3.5&#xff08;InstructGPT&#xff09;、ChatGPT …

笔试模拟 day14

观前提醒&#xff1a; 笔试所有系列文章均是记录本人的笔试题思路与代码&#xff0c;从中得到的启发和从别人题解的学习到的地方&#xff0c;所以关于题目的解答&#xff0c;只是以本人能读懂为目标&#xff0c;如果大家觉得看不懂&#xff0c;那是正常的。如果对本文的某些知…

基于照片环境信息的AI定位技术:从原理到实战的深度解析

基于照片环境信息的AI定位技术&#xff1a;从原理到实战的深度解析 摘要 本文聚焦基于照片环境信息的AI定位技术&#xff0c;系统梳理其核心原理、技术实现路径及行业应用场景。结合多模态融合、深度学习优化等前沿技术&#xff0c;分析如何通过AI训练提升定位精度&#xff0c…