当前位置: 首页 > 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.dtcms.com/a/302510.html

相关文章:

  • 防水医用无人机市场报告:现状、趋势与洞察
  • 无人机喷洒系统技术要点与难点解析
  • Go性能优化深度指南:从原理到实战
  • 机器学习与深度学习评价指标
  • 实战经验总结:如何快速理解一套完整的移动端设计规范
  • 代理 ARP 的三种应用场景:端口隔离、VLAN聚合、单臂路由
  • 在 Windows 系统 下直接使用了 Linux/macOS 的环境变量设置语法 PLATFORM=android
  • IP协议解析:从寻址到路由
  • 企业管理双核心:ERP 系统与 CRM 系统的功能对比
  • 跨境电商更换外模,无实景拍摄,制作商品图
  • 策略路由(PBR技术)
  • Cloudflare CDN 中设置地域限制并返回特定界面
  • Java排序算法之<归并排序>
  • ORA-13516: AWR Operation failed: CATPROC not valid
  • AT89C 系列单片机知识点总结
  • clion解决引入头文件后找不到函数实现:Undefined symbols for architecture x86_64
  • 《LeetCode 热题 100》整整 100 题量大管饱题解套餐 中
  • Ubuntu-安装S7nodave教程
  • Java面试宝典:MySQL事务和事务的隔离级别
  • C++现代Redis客户端库redis-plus-plus详解
  • Redis实战(3)-- 高级数据结构zset
  • Linux应用程序架构与软件包管理
  • 【Linux】基本指令(2)
  • 未提交读的问题
  • 3. Socket 编程 TCP
  • 广播,数据库01 day43
  • JVM垃圾收集算法和垃圾收集器
  • 阿里云通义灵码深度解析:AI编程时代的技术革命与实践探索
  • 基于Hadoop3.3.4+Flink1.17.0+FlinkCDC3.0.0+Iceberg1.5.0整合,实现数仓实时同步mysql数据
  • 如何在 Ubuntu 24.04 或 22.04 Linux 上安装和使用 NoMachine