当前位置: 首页 > news >正文

STM32启动流程

STM32的启动流程是从上电复位到进入用户main()函数的一系列关键初始化过程,它确保了硬件和软件环境正确建立。这个过程主要由硬件自动完成和启动文件(.s汇编文件)引导执行。

一、启动流程核心步骤

整个流程可以概括为以下几个关键阶段,它们紧密衔接,为C语言程序的运行铺平道路:

  1. 上电复位与启动模式选择:芯片上电或复位后,硬件根据BOOT引脚的电平状态,决定将哪个物理存储器(如内部Flash、系统存储器或SRAM)映射到地址0x0000 0000
  2. 初始化栈指针(SP)和程序计数器(PC):CPU从映射后的起始地址0x0000 0000读取第一个字(4字节)作为主栈指针(MSP)的初始值,从0x0000 0004读取第二个字作为复位中断向量的入口地址,并赋值给PC指针,从而跳转到复位中断服务程序。
  3. 执行复位中断服务程序(Reset_Handler):这是启动文件中的核心汇编函数。它首先设置系统时钟(通常通过调用SystemInit()函数),然后初始化.data段(将已初始化的全局变量从Flash拷贝到RAM)和清零.bss段(未初始化的全局变量区)。
  4. 跳转到C语言世界:复位服务程序最后会调用C库函数__main__main函数会完成用户堆栈的最终初始化,然后才调用我们编写的main()函数,至此启动过程结束,用户程序开始执行。

二、启动文件(.s文件)的关键作用

启动文件是上述流程的具体实现者,它用汇编语言编写,是上电后执行的第一段代码。其主要工作包括:

  • 设置堆栈(Stack & Heap):定义栈(用于局部变量、函数调用)和堆(用于动态内存分配)的内存空间及大小。
  • 建立中断向量表:向量表是一个存储着各种中断服务程序入口地址的数组。第一个条目是栈顶地址,第二个条目就是Reset_Handler的地址。
  • 提供弱定义的中断服务程序:为所有中断入口预先定义一个空的或死循环的弱符号函数(如Default_Handler)。如果用户在C代码中定义了同名的中断处理函数,编译器会链接用户定义的强符号函数,从而实现中断的接管。
  • 执行复位程序:包含Reset_Handler函数,完成系统时钟配置和运行环境初始化。

三、三种启动模式详解

STM32通过BOOT0和BOOT1引脚的电平组合选择三种启动模式,这决定了初始向量表被映射到的物理位置:

  • 主闪存存储器启动:最常用的模式。程序存储在内部Flash(地址0x0800 0000),该区域被映射到0x0000 0000。通过JTAG/SWD下载的程序即运行于此。
  • 系统存储器启动:从芯片内置的系统存储区(存储了厂家预置的Bootloader程序)启动。该模式常用于通过串口等接口进行程序烧录(ISP)。
  • 片上SRAM启动:将SRAM(地址0x2000 0000)映射为启动区域。由于SRAM内容掉电丢失,此模式主要用于程序调试。

理解STM32的启动流程对于深入掌握单片机工作原理、进行底层调试、实现Bootloader(IAP)以及操作系统移植都至关重要。

http://www.cnnetsun.cn/news/112269.html

相关文章:

  • HoYo.Gacha专业抽卡分析工具完全使用手册
  • FastMCP高级特性之Composition
  • 安卓手机投屏到电脑的开源软件(scrcpy)
  • 边缘计算开源项目终极指南:让物联网设备秒变智能终端
  • ForensicsTool取证工具完整安装配置指南:快速掌握电子数据取证技能
  • DeepSeek-V3 KV缓存技术:让AI对话像翻书一样流畅
  • SpringBoot进阶教程(八十八)获取图片的宽高
  • PeachPie 1.1.13 发布支持最新PHP 8.5.0
  • 电视也可以玩街机经典游戏,你的客厅,早就该变成这样了!
  • 掌握3个Mock工具,轻松玩转单元测试
  • AutoGen到Microsoft Agent Framework终极迁移指南:从零开始构建现代化AI代理系统
  • 2008-2024年地级市女性奥运冠军数据
  • 2003-2024年上市公司人工智能采纳程度数据+Stata代码
  • 问了 3 个博士,导师不说,但目前最新论文卡人的已经不是知网查重
  • CST设计:可重构超表面宽带窄带可切换吸收与多波束技术
  • ai智能搜索文献:高效精准的学术资源检索新工具与应用研究
  • 英文文献的高效检索与阅读策略研究
  • 万字长文!Agent及其主流框架终极指南(附对比图),好Agent的标准:自己想、自己干、自己复盘!
  • 打造专属问答社区,开源系统助力内容创业新风口
  • Apache Impala为啥TBDS、华为MRS弃用?为什么不能做到无缝切换平缓迁移
  • 从开发到上线:智能Agent的Docker部署全链路实践(含YAML模板)
  • 智能连接与自动化引擎的全能表单系统,重新定义数据收集与业务流程的协同
  • 如何彻底解决企业级数据流程编排难题:Apache DolphinScheduler完整指南
  • 深度学习框架生态竞争格局:从Stable Diffusion WebUI Forge看技术选型逻辑
  • better-sqlite3深度解析:Node.js数据库操作的性能革命
  • 终极AI平台wgai:零门槛构建国产化智能识别系统
  • 基于VUE的企业协同管理系统 [VUE]-计算机毕业设计源码+LW文档
  • 如何快速使用bandcamp-dl:命令行音乐下载工具的完整教程
  • 【Excel VBA 编程】第61讲:两种方法驾驭文本处理猛兽
  • 探索金领冠珍护源初的纯净世界:2025年健康奶粉新篇章