STM32(F429)启动模式与两种烧录方式

发布时间:2026/10/30 12:32:59
STM32(F429)启动模式与两种烧录方式

前言

STM32 所有启动逻辑、烧录逻辑的核心根源只有一个:芯片每次上电、硬件复位瞬间,会采样 BOOT0、BOOT1 硬件引脚电平,决定本次开机从哪个内存区域执行代码。 新手最容易混淆的三个问题:

  1. 为什么有三种启动模式?分别干什么用?
  2. J-Link/ST-Link 仿真器下载和串口 FlyMcu 下载到底有什么本质区别?
  3. 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 的特殊情况)
  1. 标准调试流程(点击 Download 后自动进断点)Keil 默认配置下,点击「Download」下载完成,J-Link 下发软件内核复位,CPU 复位后自动暂停在 main 函数断点,直接在线调试,全程不用按开发板 Reset。
  2. 不拔 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 开启输出:
  1. 点击 Keil 顶部魔术棒图标「Options for Target」;
  2. 切换至「Output」标签页;
  3. 勾选Create HEX File;
  4. 重新编译工程,在工程Objects文件夹内生成 hex 文件,载入 FlyMcu 即可烧录。
  • FlyMcu 真实运行机制(纠正片面教程误区)网上 “烧完必须切回 BOOT0=0 才能运行” 表述不全,实际行为分两种场景:
  1. 勾选 FlyMcu「编程后执行」:固件写入 Flash 完成后,系统 Bootloader 主动执行一次软件跳转指令,直接跳到 0x08000000 运行用户程序,此时不用切换 BOOT 引脚、不用按复位。
  2. 关键限制:该软件跳转仅单次临时生效,不会改变硬件 BOOT 引脚电平。一旦断电、按下开发板硬件 Reset,芯片复位瞬间重新读取BOOT0=1,再次进入 ISP 下载模式,无法自动运行业务代码。
  • 区分结论
    • 仅临时测试、不重启设备:烧录完成无需改动 BOOT0;
    • 要求断电 / 复位后自动运行:烧录结束必须将 BOOT0 拨回 0。
  • 优缺点:硬件仅需低成本 USB 转串口模块,无需仿真器,支持设备现场离线升级;下载速率慢,完全不支持代码调试。
  • 适用场景:无仿真器应急烧录、现场设备固件升级、简易小批量烧录。

三、启动模式与烧录方式一一对应关系

  1. BOOT0=0(Flash 启动)设备标准运行模式;适配仿真器下载调试,无需导出 HEX;软件复位受 Keil 配置、驱动、芯片状态影响,失效时无论是否拔仿真器,都需要手动硬件 Reset 才能运行。
  2. BOOT0=1、BOOT1=0(系统存储器 ISP)FlyMcu 串口烧录专用模式;Keil 需提前生成 HEX 固件;烧录后可软件跳转临时运行,硬件复位 / 断电后失效,长期运行需切换 BOOT0 电平。
  3. BOOT0=1、BOOT1=1(SRAM 启动)和固件烧录、产品运行无关,仅用于底层特殊调试。

四、标准工程实操流程

流程 1:J-Link 仿真器日常开发调试

  1. 硬件保持BOOT0=0,SWD 接口连接 J-Link 与电脑;
  2. 标准调试:Keil 进入 Debug 模式点击 Download,自动软件复位停在断点;
  3. 特殊失效场景(你当前现象):仅 Load 下载 / 配置异常,软件复位不生效,不拔 J-Link 也需要手动按 Reset 按键,芯片才能运行新程序;
  4. 调试完成后断开 J-Link,同样需要硬件复位独立运行。

流程 2:FlyMcu 串口完整烧录流程

  1. Keil 工程配置勾选 Create HEX File,编译生成 hex 固件;
  2. 硬件拨码切换BOOT0=1、BOOT1=0,按下 Reset 进入 ISP 下载模式;
  3. FlyMcu 载入 hex 文件,勾选「编程后执行」,点击开始烧录;
  4. 烧录完成软件自动跳转运行程序(仅本次上电有效);
  5. 如需断电、复位后稳定自启,将 BOOT0 拨回 0,再次上电 / 复位。

五、核心记忆总结

  1. Flash 启动:产品正常运行模式,J-Link 调试下载无需 HEX;软件复位依赖工程配置,失效时不拔仿真器也要手动 Reset。
  2. 系统存储器 ISP 启动:FlyMcu 串口下载专用,必须导出 HEX;烧完可临时运行,硬件复位后失效,长期运行需切换 BOOT0=0。
  3. SRAM 启动:仅底层特殊调试使用,常规开发无需关注。