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

STM32启动流程

核心逻辑:上电→硬件加载 MSP→执行 Reset_Handler→初始化环境→进入 main ()

  1. 上电复位
    芯片上电或复位后,硬件自动执行:

    • 程序计数器(PC)被强制设为 0x00000000(中断向量表首地址)。
    • 从向量表第一个条目读取数据,赋值给主堆栈指针(MSP),确定栈顶初始地址(栈用于函数调用和局部变量存储)。
  2. 执行复位中断服务程序
    从向量表第二个条目获取复位中断服务程序(Reset_Handler) 的入口地址,PC 跳转到该程序执行(这是启动的核心步骤)。复位中断服务程序直接按顺序执行以下操作:

    • 配置系统时钟(如 PLL 倍频、总线分频等)。
    • 将 Flash 中存储的全局变量初始值复制到 RAM。
    • 将 RAM 中未初始化的全局变量清零。
  3. C 库初始化
    调用__libc_init_array(),完成全局对象构造、标准库初始化等工作,为 C 语言程序运行做准备。

  4. 进入用户程序
    最终跳转到main()函数,开始执行用户编写的应用代码。

一、 Flas 分区、程序跳转及环境初始化。

        通过以下步骤,可实现从 B 区到 A 区的安全、稳定跳转,保证 A 区程序独立运行。

        嵌入式程序的起始执行逻辑通常遵循 “向量表” 规则,向量表的第一个元素是栈顶地址,第二个元素是复位中断服务程序的入口地址(即程序开始执行的地址)

1. 读取 A 区向量表第一个元素(即0x08005000 A区的栈顶地址),将此作为MSP 寄存器的

http://www.xdnf.cn/news/1205857.html

相关文章:

  • opencv 模块裁剪 按需安装指定模块
  • MCU 中的 PWM(脉冲宽度调制)是什么?
  • 未授权访问复现
  • Python动态规划:从基础到高阶优化的全面指南
  • 未授权访问漏洞靶场(redis,MongoDB,Memcached...)
  • Unity_UI_NGUI_锚点组件
  • 项目如何按时交付?重点关注的几点
  • 【Linux操作系统】简学深悟启示录:Linux环境基础开发工具使用
  • GoLand 项目从 0 到 1:第三天 —— 图数据库版本管理方案调研与中间件部署
  • Dify-14: 工作流API端点
  • 在虚拟机ubuntu上修改framebuffer桌面不能显示图像
  • STM32F4—电源管理器
  • YOLOv11改进:添加SCConv空间和通道重构卷积二次创新C3k2
  • 时间数字转换器TDC的FPGA方案及核心代码
  • 数分思维10:用户增长
  • 小智源码分析——音频部分(二)
  • 机器学习sklearn:决策树的参数、属性、接口
  • mp核心功能
  • S7-200 SMART 通过本体 RS485 口与 DP01 上传 / 下载程序(网口故障)
  • Java项目:基于SSM框架实现的进销存管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】
  • 我从 Web2 转型到 Web3 的 9 条经验总结
  • 架构实战——互联网架构模板(“存储层”技术)
  • fchown/fchownat系统调用及示例
  • 坚鹏:AI智能体培训是知行学成为AI智能体创新应用引领者的基础
  • 3DGRUT: 革命性的3D高斯粒子光线追踪与混合光栅化技术深度解析
  • Item18:让接口容易被正确使用,不易被误用
  • 鱼皮项目简易版 RPC 框架开发(二)
  • JavaScript:10个数组方法/属性
  • ROS2入门之开发环境搭建
  • 【C++】手搓一个STL风格的vector容器