STM32(F429)启动模式与两种烧录方式
前言
STM32 所有启动逻辑、烧录逻辑的核心根源只有一个:芯片每次上电、硬件复位瞬间,会采样 BOOT0、BOOT1 硬件引脚电平,决定本次开机从哪个内存区域执行代码。 新手最容易混淆的三个问题:
- 为什么有三种启动模式?分别干什么用?
- J-Link/ST-Link 仿真器下载和串口 FlyMcu 下载到底有什么本质区别?
- Keil 搭配 J-Link,下载完成后即使仿真器不拔,部分场景下也需要手动按 Reset 才能运行程序?FlyMcu 烧完能直接跑,但重启又失效?
本文结合工程实操、Keil 配置、J-Link 真实行为、FlyMcu 运行机制,一次性讲透,纠正全网多处实操误区,同时解释你遇到的 J-Link 特殊现象。
一、STM32 三种启动区域(功能完全隔离)
1. 用户 Flash 启动(BOOT0=0,BOOT1 任意)—— 产品正式模式
- 存储属性:非易失性存储,断电程序不丢失,存放用户自己编写的业务代码。
- 核心用途:设备正常运行功能程序,是产品量产唯一标准工作模式。
- 工作逻辑:只要 BOOT0 硬件电平为低,任意上电、硬件复位,芯片都会从 Flash 启动用户程序。
- 定位:该模式是用来「运行程序」,并非专门用来「烧录程序」。
2. 系统存储器启动(BOOT0=1、BOOT1=0)——ISP 下载模式
- 存储属性:ST 出厂一次性固化 Bootloader,只读、不可擦除、不可修改,不属于用户代码区。
- 核心用途:仅用于串口、USB DFU 固件下载,上电默认只运行下载引导程序,不会主动跳转到用户 Flash。
- 工作逻辑:硬件维持
BOOT0=1、BOOT1=0时,每一次硬件复位都会重新进入 ISP 下载界面。 - 定位:此模式下芯片相当于专用下载工具,只接收固件,不执行业务功能。
3. SRAM 启动(BOOT0=1、BOOT1=1)—— 高级调试模式
- 存储属性:片内运行内存,断电所有数据完全丢失,无法存储固件。
- 用途:将代码临时加载至 RAM 运行,减少 Flash 擦写损耗,仅用于底层内核特殊调试。
- 说明:常规开发、固件烧录、产品量产完全不会用到。
二、工程中两种烧录方式完整对比(核心重点)
1. J-Link/ST-Link/DAPLink 仿真器烧录(日常开发首选)
- 对应启动模式:BOOT0=0(Flash 正常运行模式,无需改动拨码 / 跳帽)
- 底层原理:通过 SWD/JTAG 硬件调试总线直接访问芯片内核,绕开所有 Bootloader,直接擦写、写入 Flash 存储区。
- 文件需求:无需手动生成 HEX 文件,Keil 可直接通过仿真器下发编译后的固件。
- 复位运行机制(精准解释你遇到的现象,包含不拔 J-Link 也需手动 Reset 的特殊情况)
- 标准调试流程(点击 Download 后自动进断点)Keil 默认配置下,点击「Download」下载完成,J-Link 下发软件内核复位,CPU 复位后自动暂停在 main 函数断点,直接在线调试,全程不用按开发板 Reset。
- 不拔 J-Link,但下载后不自动运行、需要手动按 Reset 的几种特殊场景(你遇到的情况归属此类)
- 场景 1:Keil 调试配置关闭了「下载后自动复位并运行」选项;
- 场景 2:工程开启了下载后校验 Flash,校验完成后内核保持停机状态,不会自动释放运行;
- 场景 3:J-Link 驱动、调试适配器版本不匹配,软件复位指令下发失效;
- 场景 4:芯片开启了硬件看门狗、低功耗锁死内核,软件复位无法唤醒;
- 场景 5:仅使用 Load 下载,没有进入 Debug 调试会话,软件复位逻辑不会触发。
3.通用结论
- 软件复位依赖 Keil 调试配置与硬件驱动状态,不是 100% 必生效;
- 一旦软件复位失效,哪怕 J-Link 全程连接不拔,也必须手动按下硬件 Reset 按键触发硬件复位,芯片才能正常读取 Flash 程序运行。
- 核心能力:下载速度快、支持断点 / 单步 / 变量寄存器查看、可解除芯片读保护、修复内核卡死状态。
- 适用场景:日常功能迭代、代码调试、工装批量量产烧录。
2. 串口 ISP 烧录(FlyMcu 工具,纯下载无调试)
- 对应启动模式:硬件必须切换为
BOOT0=1、BOOT1=0 - 底层原理:芯片上电运行 ST 原厂固化 Bootloader,通过串口接收上位机固件数据,写入用户主 Flash。
- 前置必备操作(重点)FlyMcu 无法读取 Keil 工程,仅支持
.hex固件文件,需在 Keil 开启输出:
- 点击 Keil 顶部魔术棒图标「Options for Target」;
- 切换至「Output」标签页;
- 勾选
Create HEX File; - 重新编译工程,在工程
Objects文件夹内生成 hex 文件,载入 FlyMcu 即可烧录。
- FlyMcu 真实运行机制(纠正片面教程误区)网上 “烧完必须切回 BOOT0=0 才能运行” 表述不全,实际行为分两种场景:
- 勾选 FlyMcu「编程后执行」:固件写入 Flash 完成后,系统 Bootloader 主动执行一次软件跳转指令,直接跳到 0x08000000 运行用户程序,此时不用切换 BOOT 引脚、不用按复位。
- 关键限制:该软件跳转仅单次临时生效,不会改变硬件 BOOT 引脚电平。一旦断电、按下开发板硬件 Reset,芯片复位瞬间重新读取
BOOT0=1,再次进入 ISP 下载模式,无法自动运行业务代码。
- 区分结论
- 仅临时测试、不重启设备:烧录完成无需改动 BOOT0;
- 要求断电 / 复位后自动运行:烧录结束必须将 BOOT0 拨回 0。
- 优缺点:硬件仅需低成本 USB 转串口模块,无需仿真器,支持设备现场离线升级;下载速率慢,完全不支持代码调试。
- 适用场景:无仿真器应急烧录、现场设备固件升级、简易小批量烧录。
三、启动模式与烧录方式一一对应关系
- BOOT0=0(Flash 启动)设备标准运行模式;适配仿真器下载调试,无需导出 HEX;软件复位受 Keil 配置、驱动、芯片状态影响,失效时无论是否拔仿真器,都需要手动硬件 Reset 才能运行。
- BOOT0=1、BOOT1=0(系统存储器 ISP)FlyMcu 串口烧录专用模式;Keil 需提前生成 HEX 固件;烧录后可软件跳转临时运行,硬件复位 / 断电后失效,长期运行需切换 BOOT0 电平。
- BOOT0=1、BOOT1=1(SRAM 启动)和固件烧录、产品运行无关,仅用于底层特殊调试。
四、标准工程实操流程
流程 1:J-Link 仿真器日常开发调试
- 硬件保持
BOOT0=0,SWD 接口连接 J-Link 与电脑; - 标准调试:Keil 进入 Debug 模式点击 Download,自动软件复位停在断点;
- 特殊失效场景(你当前现象):仅 Load 下载 / 配置异常,软件复位不生效,不拔 J-Link 也需要手动按 Reset 按键,芯片才能运行新程序;
- 调试完成后断开 J-Link,同样需要硬件复位独立运行。
流程 2:FlyMcu 串口完整烧录流程
- Keil 工程配置勾选 Create HEX File,编译生成 hex 固件;
- 硬件拨码切换
BOOT0=1、BOOT1=0,按下 Reset 进入 ISP 下载模式; - FlyMcu 载入 hex 文件,勾选「编程后执行」,点击开始烧录;
- 烧录完成软件自动跳转运行程序(仅本次上电有效);
- 如需断电、复位后稳定自启,将 BOOT0 拨回 0,再次上电 / 复位。
五、核心记忆总结
- Flash 启动:产品正常运行模式,J-Link 调试下载无需 HEX;软件复位依赖工程配置,失效时不拔仿真器也要手动 Reset。
- 系统存储器 ISP 启动:FlyMcu 串口下载专用,必须导出 HEX;烧完可临时运行,硬件复位后失效,长期运行需切换 BOOT0=0。
- SRAM 启动:仅底层特殊调试使用,常规开发无需关注。