当前位置: 首页 > 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.lryc.cn/news/603087.html

相关文章:

  • 【学习路线】Android开发2025:从入门到高级架构师
  • Unity_UI_NGUI_锚点组件
  • 【java面试day7】redis分布式锁
  • SpringBoot 发送邮件
  • 五自由度磁悬浮轴承转子不平衡质量的高性能控制策略全解析
  • 算法训练营day34 动态规划② 62.不同路径、63. 不同路径 II、343整数拆分、96.不同的二叉搜索树
  • Java响应式编程
  • ATF 运行时服务
  • ros2的package.xml和rosdep
  • 基于深度学习的医学图像分析:使用3D CNN实现肿瘤检测
  • 第十天:字符菱形
  • 一个Pycharm窗口添加多个项目来满足运行多个项目的需求
  • DDoS攻击防御:从5G到T级防护方案全对比
  • 企业级日志分析系统ELK
  • Python动态规划:从基础到高阶优化的全面指南(3)
  • 历史版本的vscode下载地址
  • 实验-静态路由
  • 智慧工地系统:科技赋能建筑新未来
  • 学习dify:一个开源的 LLM 应用开发平台
  • 【GitHub Workflows 基础(二)】深入理解 on、jobs、steps 的核心语法与执行逻辑
  • 【2025/07/28】GitHub 今日热门项目
  • 【iOS】类和分类的加载过程
  • LNMP架构+wordpress实现动静分离
  • Cacti RCE漏洞复现
  • 四、计算机组成原理——第1章:计算机系统概述
  • 可扩展架构模式——微服务架构最佳实践应该如何去做(方法篇)
  • 《汇编语言:基于X86处理器》第10章 结构和宏(2)
  • linux命令grep的实际应用
  • 在虚拟机ubuntu上修改framebuffer桌面不能显示图像
  • 1.vue体验