尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

STM32 Bootloader 与启动模式详解

STM32 Bootloader 与启动模式详解
📅 发布时间:2026/7/9 11:09:55

三种启动模式

F407 通过BOOT0和BOOT1两个引脚选择启动方式:

BOOT0BOOT1启动位置说明
0任意Flash(0x08000000)正常启动,运行你的程序
10System Memory(0x1FFF0000)出厂 Bootloader,串口 ISP 下载
11SRAM(0x20000000)调试用,掉电丢失

平时 BOOT0 = 0,程序从 Flash 启动。这是最常用的模式。

启动位置做了什么

芯片读向量表的前两个值:栈顶地址 + PC 指针。所以:

  • Flash 启动:读 0x08000000 → 取 MSP,读 0x08000004 → 取 PC

  • System Memory 启动:读 0x1FFF0000 → 取 MSP,读 0x1FFF0004 → 取 PC(进入出厂 Bootloader)

  • SRAM 启动:读 0x20000000 → 取 MSP,读 0x20000004 → 取 PC

出厂 Bootloader 是什么

STM32 出厂时,在 System Memory 区域固化了一段不可擦除的程序,它支持:

接口引脚
USART1(常用)PA9/PA10
USART2PD5/PD6
USB DFUPA11/PA12
CAN2PB5(RX)/ PB6(TX)

进入条件:BOOT0=1, BOOT1=0 → 上电/复位 → 芯片从 System Memory 启动 → 检测串口信号(必须在特定时间内收到 0x7F 字节)→ 进入 ISP 模式。

这就是为什么做串口 ISP 下载时要复位 + 点击"开始编程"——bootloader 只在启动后短暂几毫秒内监听串口信号。

自己写一个 Bootloader

如果你要实现 IAP(In-Application Programming),就需要自己写一个 bootloader:

Flash 布局: 0x08000000 ─── Bootloader(~16KB 就够) 0x08004000 ─── App(用户程序)

Bootloader 代码(精简版):

#define APP_ADDR 0x08004000 #define APP_STACK *(volatile uint32_t *)APP_ADDR #define APP_RESET *(volatile uint32_t *)(APP_ADDR + 4) ​ void JumpToApp(void) { // 1. 关全局中断 __disable_irq(); ​ // 2. 复位所有外设 HAL_DeInit(); ​ // 3. 关 SysTick SysTick->CTRL = 0; ​ // 4. 设置向量表偏移 SCB->VTOR = APP_ADDR; ​ // 5. 设置栈顶指针 __set_MSP(APP_STACK); ​ // 6. 跳转到 app 的复位向量 void (*app_main)(void) = (void (*)(void))APP_RESET; app_main(); }

App 工程需要修改链接脚本,把起始地址改为 0x08004000。修改 APP 起始地址需手动编辑 .ld 链接脚本(CubeMX 的 Project Manager → Linker Settings 仅可查看路径,不能在 GUI 中直接修改 Flash 起始地址)。

在代码中也要设置向量表偏移:

// app 的 main 函数最开头加 SCB->VTOR = 0x08004000;

常见问题

写了 Bootloader,但跳转到 App 后死机了?

  1. App 的向量表偏移设了吗?SCB->VTOR = APP_ADDR

  2. App 的链接脚本改了 Flash 起始地址吗?

  3. 跳转前关中断了吗?

  4. App 的 SRAM 起始地址和 Bootloader 冲突了吗?

最简单验证方法:先不写 Bootloader,直接把 App 烧到 0x08000000 测试能不能跑。能跑说明 App 本身没问题,问题在跳转上。

相关新闻

  • 盈启鲲鹏门店无人值守直播
  • 终极直播录制工具:5步轻松实现多平台直播录制完整指南
  • MIFARE Classic Tool:Android平台上的RFID标签深度管理解决方案

最新新闻

  • 计算机毕业设计之克拉玛依职业技术学院信息工程系网站
  • 如何用Mermaid图表编辑器5分钟创建专业流程图:免费在线工具完全指南
  • 经典游戏兼容性修复终极指南:从系统适配到性能优化的完整解决方案
  • 《意识不是代码,而是一场物理风暴:用“意识流漩涡模型”破解主观体验的终极难题》
  • 微信H5视频自动播放失败?从踩坑到完美解决方案
  • JS 中 var、let、const 的核心区别

日新闻

  • SQL 查询语句的标准逻辑执行顺序(即语义处理顺序),它与实际书写顺序不同,但决定了数据库如何解析和执行查询
  • ORB-SLAM2 重定位模块深度解析:从 BoW 候选帧到 PnP 优化的 6 步流程
  • 罗技鼠标宏压枪脚本终极指南:从原理到实战的完整解析

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号