好的,STM32 Bootloader 的使用主要分为两种情况:
- 使用 ST 内置的 ROM Bootloader (最常见): 这是芯片出厂时固化在内部 ROM 中的程序,用于通过特定接口(如 UART, USB DFU, I2C, SPI, CAN 等)来更新用户应用程序(即你写的程序)。这是最常用、最基础的方式。
- 使用自定义 Bootloader: 这是你自己编写并烧录到 Flash 起始地址(0x0800 0000)的一个小程序。它负责在芯片启动时运行,可以执行各种初始化、安全检查、固件更新(通常通过串口、USB、网络、SD卡等)等任务,然后再跳转到用户应用程序。这提供了更大的灵活性,但需要自行开发。
这里主要详细介绍如何使用 ST 内置的 ROM Bootloader 通过 UART 或 USB DFU 来烧录程序:
? 使用 ST 内置 ROM Bootloader (UART/USB DFU 方式)
? 所需工具和软件
- STM32 开发板或目标板: 包含 STM32 微控制器。
- USB 转 TTL 串口模块 (用于 UART): 如 CH340, CP2102, FT232 等。关键: 确保模块的 TTL 电平是 3.3V,与 STM32 匹配!
- USB 数据线 (用于 USB DFU): 用于连接 STM32 的 USB 端口(如果芯片支持 USB 并且硬件设计允许)。
- STM32CubeProgrammer: ST 官方提供的免费烧录工具,支持 UART、USB DFU、SWD/JTAG 等多种方式。强烈推荐使用。官网下载
- ST 的 Flash Loader Demonstrator (可选,较旧): 只支持 UART 方式,界面较老,STM32CubeProgrammer 是其更好的替代品。
- 目标程序的二进制文件 (.bin) 或十六进制文件 (.hex): 通常由你的 IDE (Keil, IAR, STM32CubeIDE, PlatformIO 等) 在编译后生成。
.bin文件最常用。
? 关键硬件配置 - Boot 引脚
STM32 芯片通常有 BOOT0 和 BOOT1 (或 BOOT0 和 NBOOT1) 引脚。它们的组合决定了芯片上电或复位时从哪里启动:
- 进入 Bootloader 模式:
- BOOT0 = 1 (接高电平, 通常 3.3V)
- BOOT1 = 0 (接低电平, GND) ⚠️ 这是最常见的组合,用于启动内置 Bootloader。
- 正常启动用户程序:
- BOOT0 = 0 (接低电平, GND)
- BOOT1 可以是 0 或 1(通常也接地)。
操作前必须正确设置 Boot 引脚的状态! 你需要通过跳线帽、拨码开关或直接飞线将 BOOT0 接到 VDD (3.3V),BOOT1 接到 GND。
? 操作步骤 (以 UART 为例,STM32CubeProgrammer)
- 连接硬件:
- 断开目标板电源。
- 将 BOOT0 引脚通过跳线或飞线连接到 3.3V。
- 将 BOOT1 (或 NBOOT1) 引脚通过跳线或飞线连接到 GND。
- 将 USB 转 TTL 串口模块连接到目标板:
- 模块 TXD -> STM32 UART RX (例如 PA3 / USART2_RX)
- 模块 RXD -> STM32 UART TX (例如 PA2 / USART2_TX)
- 模块 GND -> STM32 GND
- (通常不需要连接模块的 VCC 到 STM32 VCC,除非模块需要外部供电)
- 确保你的 STM32 板子有 稳定可靠的电源供应(通过 USB 转 TTL 模块供电可能功率不足,最好使用独立的电源或开发板的 USB 供电)。
- 启动 STM32CubeProgrammer:
- 打开安装好的 STM32CubeProgrammer 软件。
- 选择连接方式:
- 在软件顶部,选择 UART 连接方式。
- 在下拉菜单中选择你的 USB 转 TTL 模块对应的 串口号 (在 Windows 设备管理器中查看 COM 端口号)。
- 设置 波特率。内置 Bootloader 通常支持多种波特率,但 115200 是最常用且兼容性最好的默认值。如果失败,可以尝试 9600, 57600 等。
- 其他设置通常保持默认(数据位 8, 停止位 1, 无校验)。
- 连接目标板:
- 给 STM32 目标板上电。
- 在 STM32CubeProgrammer 中点击 "Connect" 按钮。
- 重要: 有时需要在点击 "Connect" 之后 的 1-2 秒内 给目标板复位 (按下复位按钮),特别是第一次连接或连接不稳定时。这是一个常见的技巧。
- 如果连接成功:
- 软件顶部的状态栏会显示 "Connected" 和检测到的 目标设备型号。
- "Memory & File editing" 选项卡会显示当前 Flash 的内容(通常是全 FF)。
- 擦除和编程:
- 切换到 "Erasing & Programming" 选项卡 (或者直接在 "Memory & File editing" 里操作)。
- 在 "File path" 区域,点击
...浏览并选择你要烧录的 .bin 或 .hex 文件。 - 根据需要选择选项:
- Download Verify:下载后自动校验(推荐勾选)。
- Skip flash erase:跳过擦除。通常不勾选,除非你明确知道只需要覆盖部分区域。首次烧录或需要完全更新时必须擦除。
- Run after programming:编程后立即运行程序。通常勾选。
- Erase necessary pages:擦除必要的页(由文件内容决定)。推荐。
- Full chip erase:擦除整个 Flash。更彻底,但稍慢。
- 点击 "Start Programming" 按钮。
- 等待进度条完成,状态栏显示 "File download complete" 和 "Verification OK" (如果勾选了验证)。
- 恢复启动模式并运行:
- 关键步骤! 烧录完成后:
- 断开目标板电源。
- 将 BOOT0 引脚改回 0 (接 GND)。
- 重新上电。
- 此时芯片将从 Flash 起始地址 (0x0800 0000) 启动你刚刚烧录的用户程序。
- 关键步骤! 烧录完成后:
? 操作步骤 (USB DFU 方式,STM32CubeProgrammer)
- 硬件配置:
- 断开目标板电源。
- 设置 BOOT0=1, BOOT1=0 (同上)。
- 不需要连接串口模块。
- 将目标板的 USB 端口 (需要连接到支持 USB Device 功能的引脚,如 PA11/PA12) 通过 USB 数据线连接到电脑。确保硬件设计支持 USB 并且 USB 接口电路(如 D+ 的上拉电阻)已正确配置以进入 DFU 模式。
- 进入 DFU 模式:
- 给目标板上电。
- 重要: 对于许多 STM32,在 BOOT0=1 且连接 USB 后,需要执行以下操作之一来强制进入 DFU 模式(因为上电时 USB 可能还没初始化好):
- 方法一 (推荐): 上电后,按住目标板复位按钮不放,然后点击 STM32CubeProgrammer 的 "Connect",在点击后 1 秒内松开复位按钮。
- 方法二: 上电后,在连接 USB 的状态下,按下复位按钮再松开。
- 成功进入 DFU 模式后,电脑通常能识别到一个新的 USB 设备(如 "STM32 BOOTLOADER")。在 Windows 设备管理器中查看。
- 启动 STM32CubeProgrammer 并连接:
- 打开软件。
- 选择 USB 连接方式。
- 连接列表里应该能看到你的 DFU 设备。选择它。
- 点击 "Connect"。连接成功后状态栏会显示设备信息。
- 擦除和编程:
- 后续步骤与 UART 方式 完全一致 (步骤 5 和 6)。
- 恢复启动模式并运行:
- 烧录完成后,断开电源。
- 将 BOOT0 改回 0 (接 GND)。
- 重新上电运行用户程序。此时连接 USB,电脑识别到的应该是你的用户应用程序实现的 USB 设备,而不是 DFU 设备。
? 重要注意事项和常见问题
- Boot 引脚是核心: 忘记设置 BOOT0=1 或烧录后忘记改回 BOOT0=0 是导致失败的最常见原因!
- 电源稳定: 确保目标板供电充足且稳定。USB 转 TTL 模块的 5V 输出能力有限,驱动整个开发板可能不足,建议使用外部电源或开发板自带 USB 供电。
- 串口电平匹配: 必须使用 3.3V TTL 电平的 USB 转串口模块! 5V 电平可能会损坏 STM32 的 UART 引脚。
- 串口线连接: TXD 接 RX,RXD 接 TX。交叉连接!
- 正确的 UART 端口: 内置 Bootloader 使用的 UART 端口是固定的(如 USART1, USART2, USART3),具体取决于你的 STM32 型号。查阅你芯片型号对应的官方参考手册 (Reference Manual) 的 "Bootloader" 章节 确认哪个 UART 可用及其对应的引脚 (PA9/PA10, PA2/PA3 等常见)。连接错了肯定无法通信。
- USB DFU 硬件要求: 确保目标板的 USB 接口硬件(D+/D- 走线、上拉电阻等)符合 USB 规范,特别是 D+ 在 Device 模式下需要 1.5K 上拉到 3.3V 来标识全速设备。否则可能无法被主机识别为 DFU 设备。
- 连接时机 / 复位操作: 在 STM32CubeProgrammer 点击 "Connect" 的同时或稍后一点进行复位操作(按复位按钮),对于建立稳定的 Bootloader 通信非常关键,尤其在 UART 方式第一次连接或 USB DFU 方式时。
- 波特率尝试: 如果 UART 连接失败,尝试更换波特率(115200, 57600, 9600, 38400 等常见值)。参考手册会列出该型号支持的所有波特率。
- 驱动安装: 确保电脑已正确安装 USB 转 TTL 模块的驱动和 STM32CubeProgrammer 的 USB DFU 驱动(通常软件安装时会包含)。
- 芯片支持: 绝大多数 STM32 都有内置 Bootloader,但具体支持的接口(UART, USB, I2C, SPI, CAN)因型号而异。务必查阅芯片参考手册确认。
- 选项字节 (Option Bytes): Bootloader 的行为(如是否启用、启动延迟、保护级别等)可能受选项字节配置影响。在 STM32CubeProgrammer 的 "OB" 选项卡中可以查看和修改(修改需谨慎,可能导致芯片锁死)。
? 总结关键流程
- 设 Boot: BOOT0=1, BOOT1=0。
- 连硬件: 接好串口线 (UART) 或 USB 线 (DFU),并供电。
- 启软件: 打开 STM32CubeProgrammer,选择正确接口和端口。
- 连设备: 点击 Connect,必要时配合复位操作。
- 烧程序: 选择文件,设置选项,点 Start Programming。
- 复 Boot: 断电,BOOT0=0,重新上电运行。
? 强烈建议: 在进行操作前,仔细阅读你所使用的 STM32 具体型号的官方参考手册 (Reference Manual) 中的 "Bootloader" 章节。这是最权威的信息来源,包含了该芯片 Bootloader 支持的所有细节(支持的接口、引脚、波特率、命令集等)。祝你使用顺利! ?
STM32bootloader的原理是什么
STM32bootloader原理解释一、STM32的常规启动流程STM32的内部flash地址起始于0x8000000,一般情况下,程序文件就从此地址开始写入。此外STM32
butterflydw
2021-08-13 06:31:59
STM32系统bootloader的应用有哪些
嵌入式开发中,经常需要bootloader进行程序固件升级和系统维护,所以bootloader是必不可少的功能。STM32系统自带的系统bootloader很方便使用。大量减少了工程师开发bootloader的工作。
2020-10-22 12:19:45
什么是Bootloader 浅谈STM32中bootloader的内存分配
。Bootloader不但依赖于CPU的体系架构,而且依赖于嵌入式系统板级设备的配置。 3. STM32中bootloader的内存分配
2021-02-15 06:10:00
STM32单片机Bootloader的实现
之前一篇的文章中,主要介绍了STM32的启动流程和内存主要空间的分配,这篇文章将在上一篇文章的基础上,来阐述一下STM32 Bootloader的实现。
2023-01-11 17:29:44
STM32无法进入片上Bootloader的处理方法
STM32无法进入片上Bootloader的处理方法 当STM32芯片无法进入片上Bootloader时,我们需要采取一系列的处理方法来解决这个问题。以下将详细介绍一些常见的处理方法。 1.编程器
2024-02-02 14:33:14
工程师笔记|STM32F745 USART1 Bootloader 失败原因分析与解决
关键词:STM32F745,Bootloader,USART 目录预览 1. 概述 2. 问题分析 3. 问题解决 4. 总结 1.概述 STM32 的 Bootloader 可以支持多种协议
2023-01-08 16:50:05
STM32通用Bootloader—FOTA简介
1、STM32通用Bootloader——FOTA简介固件升级,通常称为 OTA(Over the Air)升级或者 FOTA(Firmware Over-The-Air)升级,即固件通过空中
ZXH22770
2022-08-30 15:07:39
STM32F745 USART1 Bootloader失败原因分析与解决
STM32 的 Bootloader 可以支持多种协议的,比如 USART,I2C,DFU 等等,USARTBootloader 是客户使用 STM32 的时候常常会用到的协议。客户在
2023-01-13 10:33:47
制作stm32L4通用bootloader没有运行是什么原因造成的
按官方教程制作stm32L4通用bootloader,用jlinkflash烧录成功,但是串口没有输出,bootloader没有运行。烧录成功 串口无任何打印信息
bigbangboom
2022-08-24 14:25:05
stm32自带bootloader 读出
stm32自带bootloader 读出,stm32自带bootloader,公司在开发一款智能眼镜,使用STM32L0系列芯片作为主控芯片,蓝牙连接,总体来说不是很复杂。在发给客户测试的时候发现了
vinww特烦恼
2021-08-05 07:23:36
怎么实现RT_thread STM32通用Bootloader做OTA升级?
怎么实现RT_thread STM32通用Bootloader做OTA升级?
相当刺激
2021-11-26 06:19:57
基于stm32的can BootLoader系统资料分享
基于STM32+ucosiii的CAN BOOTLOADER CAN IAP一套完整的基于stm32的can BootLoader系统,包括上位机和BootLoader代码。上位机的IDE为
熊本熊
2021-12-10 06:09:07
BootLoader和APP之间的关系
。BootLoader只不过是拥有从外部接收数据,更新Flash(也就是APP),跳转至APP功能的特殊APP罢了。以STM32F103为例,如果没有BootLoader,flash分布就如下图左半部分。如果有BootLoader,就如下图右半部分,将flash分为两部分(这里举例用0x800 4000做分界线),存储了两个应
Oo一笑
2021-12-09 06:01:23
基于STM32F103VET6的bootloader应用是什么
基于STM32F103VET6的bootloader应用bootloader大多用于设备的联网远程升级或者离线升级,采用bootloader进行程序升级可以使产品升级变得更加简便,有利于产品的维护
尼克wo
2021-07-05 06:33:11
STM32F407的系统bootloader基础知识下载
STM32F407的系统bootloader基础知识下载,第28章 STM32F407的系统bootloader基础知识本章为大家介绍STM32F407内置的系统bootloader的基础知识。目录
HengDu
2021-08-10 08:00:43
介绍STM32F429内置的系统bootloader的基础知识
第28章 STM32F429的系统bootloader基础知识本章为大家介绍STM32F429内置的系统bootloader的基础知识。目录第28章 STM32F429的系统bootloader
60user157
2021-08-10 06:16:57
RT-Thread STM32通用Bootloader + ota_downloader软件包怎样进行升级呢
程序的升级原理是什么?RT-Thread STM32通用Bootloader + ota_downloader软件包怎样进行升级呢?
熊本熊
2021-10-22 07:39:42
Bootloader基础知识
文章目录STM32 L4 系统内置BootLoader的使用(DFU例程)系统Bootloader基础知识什么是DFU相关参考文档进入BootLoader硬件Boot引脚进入BootLoader模式
一个黄人
2021-08-17 09:01:25
介绍STM32H7内置的系统bootloader的基础知识
第67章 STM32H7的系统bootloader基础知识本章为大家介绍STM32H7内置的系统bootloader的基础知识。目录第67章 STM32H7的系统bootloader基础知识67.1 初学者重要提示6...
恩可口
2021-08-11 08:10:27
STM32F4 MCU中的BootLoader
由于工作的需要,最近学习了一下 STM32F4 MCU 中的 BootLoader。对比了 ST 的其他系列的的 MCU,关于 Bootloader 这部分原理基本都是一样的,无非就是配置项
szj0213
2021-08-10 08:01:38
Stm32的bootloader和App的编写注意事项有哪些?
Stm32的bootloader和App的编写注意事项有哪些?如何使用STM32F4的BootLoader和APP程序?
wdc596933938
2021-10-29 07:35:08
STM32案例:BootLoader是怎么跳到App
BootLoader项目程序和App项目程序是分开的,所以需要分别搭建对应的项目工程文件,分开搭建文件是为了好配置,同时也是方便对项目进行管理。
2024-03-04 09:35:31
设计一个应用于STM32系列MCU的BootLOader程序
程序时也需要用到它。在这里我们就来设计一个应用于STM32系列MCU的BootLOader程序。1、BootLoader的基本原理既然我们想要实现一个面向STM32的BootLOader程序,那么首先
熊本熊
2021-08-18 07:11:23