STM32 BootLoader 配套资源包使用说明:分区表、排查清单、固件头模板与升级流程
2026/6/11 11:15:11 网站建设 项目流程

摘要

前面 BootLoader 系列文章主要讲原理和实现思路。

但真正做项目时,只看文章还不够。

很多内容最好有一份可以直接拿来对照、修改、移植的资料:

Flash 分区表 APP 跳转排查清单 串口 YMODEM 升级流程 W5500 TCP YMODEM 升级流程 固件头结构体模板 CRC32 代码 升级记录区模板 固件打包脚本

所以我整理了一套 STM32 BootLoader 配套资源包。

这些资源不是完整商业工程,也不是直接复制就能适配所有板子的万能代码。

它们更适合用作:

项目设计参考 移植检查清单 代码模板 调试对照资料 上位机和 BootLoader 联调说明

这篇专门说明资源包里有什么、适合谁、怎么用,以及和 BootLoader 系列文章如何配合。

目录

  • 1. 资源包适合谁
  • 2. 资源包不适合什么场景
  • 3. 当前资源包清单
  • 4. 资源一:Flash 分区表
  • 5. 资源二:APP 跳转排查清单
  • 6. 资源三:YMODEM 与 W5500 升级流程
  • 7. 资源四:固件头、CRC、防回滚模板
  • 8. 建议下载顺序
  • 9. 如何配合文章使用
  • 10. 如何移植到自己的工程
  • 11. 使用前必须确认的参数
  • 12. 常见错误
  • 13. 资源包里的代码怎么定位问题
  • 14. 适合做成项目资料的内容
  • 15. 总结

1. 资源包适合谁

这套资源包适合下面几类读者。

1.1 正在做 STM32 BootLoader 的开发者

如果你正在做:

STM32 IAP APP 跳转 串口 YMODEM 升级 W5500 网口升级 Flash 分区设计 固件头和 CRC 校验 版本防回滚

可以用资源包里的表格、清单和模板对照自己的工程。

1.2 文章看懂了,但不知道怎么落到工程里的人

文章讲的是思路。

资源包解决的是:

地址怎么填 检查项怎么列 结构体怎么定义 打包脚本怎么写 升级流程怎么画

适合边看文章边对照。

1.3 想快速搭一个 BootLoader 骨架的人

如果你不想从空白文件开始,可以先看:

boot_jump_app.c app_vector_relocate.c boot_firmware_header.h boot_crc32.c boot_record.c firmware_pack_tool.py

再根据自己的芯片和工程改。

1.4 做项目文档和交付资料的人

资源包里有:

Flash 分区表 升级流程说明 排查清单 移植说明

这些内容可以作为项目内部设计文档的基础。

2. 资源包不适合什么场景

为了避免误解,先说明边界。

这套资源包不是:

完整量产工程 适配所有 STM32 型号的通用库 可直接烧录运行的 Keil/CubeIDE 工程 带完整 UI 的上位机软件 带完整安全签名体系的商用 OTA 平台

它更像:

BootLoader 学习和移植资料包

使用时需要你根据自己的项目修改:

芯片型号 Flash 大小 APP 起始地址 BootLoader 大小 参数区地址 串口号和波特率 W5500 IP 和端口 目标板卡 ID 版本号规则

不要直接把里面的地址复制到项目里就烧录。

BootLoader 代码最怕地址不匹配。

3. 当前资源包清单

当前整理了 4 个资源包。

01_STM32_BootLoader_Flash分区表.zip 02_STM32_BootLoader_APP跳转排查清单.zip 03_STM32_BootLoader_YMODEM_W5500升级流程.zip 04_STM32_BootLoader_固件头CRC防回滚模板.zip

对应内容:

编号资源包主要内容
01Flash 分区表F103、F407、G473 分区参考表
02APP 跳转排查清单跳转代码、VTOR 示例、排查清单
03YMODEM / W5500 升级流程串口升级流程、网口升级流程、状态流程图
04固件头 CRC 防回滚模板固件头、CRC32、升级记录、打包脚本

这 4 个资源包对应 BootLoader 系列中最容易落地的部分。

4. 资源一:Flash 分区表

资源包名称:

01_STM32_BootLoader_Flash分区表.zip

主要文件:

STM32_BootLoader_Flash分区表_F103_F407_G473.xlsx README.md README_UPLOAD.md

4.1 这个资源解决什么问题

BootLoader 项目第一件事就是规划 Flash。

要先确定:

BootLoader 放哪里 BootLoader 占多大 APP 从哪里开始 APP 最大多大 参数区放哪里 升级记录区放哪里 是否需要 A/B 双分区

如果这些地址一开始没规划好,后面会反复改:

APP 链接地址 VTOR Flash 擦除范围 固件头 app_base 上位机打包参数

这个资源包就是帮你先把分区表画清楚。

4.2 覆盖哪些芯片

当前主要以三个型号为例:

STM32F103C8T6 STM32F407VET6 STM32G473VET6

分别对应三类典型情况:

F103C8T6:Flash 小,适合简单串口 BootLoader F407VET6:Flash 较大,适合网口、固件头、较完整功能 G473VET6:适合更完整的产品化分区设计

4.3 怎么使用

建议使用方式:

1. 打开 Excel 分区表 2. 找到接近自己芯片容量的方案 3. 修改 BootLoader 大小 4. 修改 APP 起始地址 5. 修改参数区或记录区地址 6. 确认擦除单位边界 7. 把最终地址同步到工程和打包工具

最终至少要同步到:

BootLoader flash_layout.h APP 链接脚本 APP VTOR 上位机打包工具 项目文档

4.4 使用时注意

F103、F407、G473 的 Flash 擦写单位不同:

F103:Page F407:Sector,且大小不均匀 G473:Page + Bank,需要注意 DBANK

不要只看地址连续不连续。

还要看擦除单位是否独立。

尤其是:

参数区不要和 APP 共用同一个擦除单位 BootLoader 区不要被 APP 擦除范围覆盖

5. 资源二:APP 跳转排查清单

资源包名称:

02_STM32_BootLoader_APP跳转排查清单.zip

主要文件:

STM32_BootLoader_APP跳转排查清单.md boot_jump_app.c app_vector_relocate.c README_UPLOAD.md

5.1 这个资源解决什么问题

BootLoader 最常见的问题就是:

APP 明明下载进去了,但跳转后 HardFault APP 单独下载能跑,BootLoader 跳不过去 APP 主循环能跑,但中断不进 串口、定时器、CAN 中断异常

这个资源包就是专门查这些问题。

5.2 排查清单包含什么

排查清单主要包括:

检查 Flash 地址 检查 APP 向量表 检查 APP 工程配置 检查 VTOR 检查 BootLoader 跳转动作 检查 HardFault 最小验证顺序

建议遇到跳转问题时,不要直接改代码。

先按清单逐项查。

5.3 boot_jump_app.c

这个文件提供 BootLoader 跳转 APP 的基本代码框架。

核心动作包括:

读取 APP 栈顶 读取 APP Reset_Handler 判断地址是否合法 关闭中断 关闭 SysTick 清理 NVIC 设置 VTOR 设置 MSP 跳转 APP

移植时要重点修改:

APP_BASE_ADDR APP_MAX_SIZE SRAM 地址范围 NVIC 清理数量 芯片头文件

5.4 app_vector_relocate.c

这个文件提供 APP 侧向量表重定位示例。

APP 启动后要设置:

SCB->VTOR=APP_BASE_ADDR;

如果 APP 不设置 VTOR,常见现象是:

主循环能跑 中断不正常 一开串口中断就异常 定时器中断进错

5.5 使用时注意

跳转相关代码必须和 APP 链接地址一致。

至少检查三处:

BootLoader 里的 APP_BASE_ADDR APP 工程 IROM/FLASH 起始地址 APP 里的 SCB->VTOR

这三处不一致,跳转问题很难避免。

6. 资源三:YMODEM 与 W5500 升级流程

资源包名称:

03_STM32_BootLoader_YMODEM_W5500升级流程.zip

主要文件:

串口_YMODEM_升级流程.md W5500_TCP_YMODEM_升级流程.md BootLoader_升级状态流程图.mmd README_UPLOAD.md

6.1 这个资源解决什么问题

很多 BootLoader 项目能跳 APP,但升级流程容易乱。

常见问题:

BootLoader 和上位机谁先发 什么时候发送 C 第 0 包怎么处理 什么时候擦 APP 什么时候写 APP_VALID TCP 分包怎么处理 断线后设备停在哪里

这个资源包把串口和网口升级流程分别整理出来。

6.2 串口_YMODEM_升级流程.md

主要讲串口升级的顺序:

BootLoader 进入升级模式 周期发送 C 上位机发送 YMODEM 第 0 包 BootLoader 解析文件名和大小 BootLoader 擦除 APP 区 上位机发送数据包 BootLoader 写 Flash 接收完成 CRC 校验 写 APP 有效标志 复位或跳转 APP

它适合和第三篇文章一起看。

6.3 W5500_TCP_YMODEM_升级流程.md

主要讲 W5500 网口升级。

关键点:

设备作为 TCP Server 上位机作为 TCP Client TCP 连接成功后仍要等待 BootLoader 准备好 YMODEM 数据跑在 TCP 字节流上 一次 send 不等于一次 recv 断线后要等待重新连接或重新升级

它适合和第五篇文章一起看。

6.4 BootLoader_升级状态流程图.mmd

这是 Mermaid 流程图文件。

可以用来画:

BootLoader 初始化 检查升级标志 检查 APP 等待升级 接收固件头 擦除 APP 接收数据 写 Flash 校验 标记有效 跳转 APP 错误处理

如果项目要写内部设计文档,这个流程图可以作为基础。

6.5 使用时注意

流程图和说明不是固定标准。

你需要根据项目调整:

是否先完整接收再擦 APP 是否有外部 Flash 暂存 是否做 A/B 分区 是否做签名校验 是否有上位机握手命令

但整体顺序不要乱:

检查 -> 接收 -> 写入 -> 校验 -> 标记有效

不要接收一点就直接认为升级成功。

7. 资源四:固件头、CRC、防回滚模板

资源包名称:

04_STM32_BootLoader_固件头CRC防回滚模板.zip

主要文件:

boot_firmware_header.h boot_crc32.c boot_record.c firmware_pack_tool.py README_移植说明.md README_UPLOAD.md

7.1 这个资源解决什么问题

只接收原始app.bin有几个问题:

不知道固件给哪个芯片用 不知道固件给哪个板子用 不知道 APP 大小 不知道 APP CRC 不知道版本号 不知道是否允许回滚

所以需要固件头。

这个资源包提供一套基础模板。

7.2 boot_firmware_header.h

这个文件定义固件头结构。

常见字段包括:

magic header_size target_chip target_board app_base app_size app_crc32 version_major version_minor version_patch version_build version_code flags

BootLoader 收到固件后,先检查这些字段。

检查通过再擦写 APP。

7.3 boot_crc32.c

这个文件提供 CRC32 计算模板。

用途:

上位机打包时计算 APP CRC BootLoader 写完 APP 后重新计算 CRC 升级记录区保存自身 CRC

注意:

上位机和 BootLoader 的 CRC 参数必须一致

包括:

多项式 初始值 输入反转 输出反转 最终异或

7.4 boot_record.c

这个文件提供升级记录区模板。

记录内容可以包括:

升级状态 APP 地址 APP 大小 APP CRC 版本号 写入进度 错误码 记录序号 记录 CRC

它用于处理:

升级中断电 写入一半失败 CRC 校验失败 版本防回滚 APP 有效标志

7.5 firmware_pack_tool.py

这是固件打包脚本模板。

它的作用是:

读取 app.bin 计算大小 计算 CRC32 填写固件头 输出带固件头的升级包

基本思路:

app.bin -> firmware_pack_tool.py -> app.fw

现场升级时发送:

app.fw

不是直接发送:

app.bin

7.6 README_移植说明.md

这个文件说明如何把模板移到自己的工程。

重点看:

文件说明 推荐使用方式 打包命令示例 注意事项

建议先把模板跑在测试工程里,再合到正式工程。

8. 建议下载顺序

如果你刚开始做 BootLoader,建议按这个顺序使用资源包。

8.1 第一步:下载 Flash 分区表

先确定地址。

BootLoader 多大 APP 从哪里开始 参数区在哪里 记录区在哪里

地址不清楚,后面都会乱。

8.2 第二步:下载 APP 跳转排查清单

先跑通:

BootLoader 跳 APP APP 中断正常 APP 能请求进入 BootLoader

跳转不稳定,不要急着调升级。

8.3 第三步:下载 YMODEM / W5500 升级流程

再跑:

串口 YMODEM W5500 TCP YMODEM

建议先串口,再网口。

8.4 第四步:下载固件头 CRC 防回滚模板

最后补:

固件头 APP CRC 版本号 防回滚 升级记录区 打包脚本

这样 BootLoader 才不只是能升级,而是能判断固件是否可靠。

9. 如何配合文章使用

资源包和文章对应关系如下。

资源包推荐配合文章
Flash 分区表入门教程、第二篇、第四篇、第八篇、第十一篇
APP 跳转排查清单入门教程、第二篇、第十二篇
YMODEM / W5500 升级流程第三篇、第五篇、第七篇、第十篇
固件头 CRC 防回滚模板第六篇、第七篇、第九篇、第十二篇

9.1 做跳转

看:

入门教程 第二篇 APP 跳转排查清单资源

目标:

BootLoader 可以跳 APP APP 中断正常 APP 可以请求进入 BootLoader

9.2 做串口升级

看:

第三篇 YMODEM 升级流程资源 固件头模板资源

目标:

串口发送固件 BootLoader 写入 APP CRC 通过 APP 有效标志写入

9.3 做网口升级

看:

第五篇 W5500 TCP YMODEM 升级流程资源 第十篇上位机联调

目标:

W5500 TCP 连接 YMODEM over TCP 断线超时处理

9.4 做可靠性

看:

第六篇 第七篇 第八篇 第十二篇 固件头 CRC 防回滚模板

目标:

升级记录区 断电恢复 版本防回滚 A/B 失败回滚

10. 如何移植到自己的工程

资源包移植时,建议按下面步骤。

10.1 先确定芯片和 Flash 容量

确认:

芯片型号 Flash 总大小 SRAM 大小 Flash Page 或 Sector 大小 是否有 Bank 是否有写保护需求

不要直接套 F103/F407/G473 的地址。

它们只是示例。

10.2 修改分区表

先改 Excel 或自己的分区文档。

确定:

BOOT_BASE BOOT_SIZE APP_BASE APP_SIZE PARAM_BASE PARAM_SIZE RECORD_BASE RECORD_SIZE

确认所有分区都在 Flash 范围内。

10.3 同步工程配置

同步到:

BootLoader 工程宏定义 APP 工程链接地址 APP VTOR 打包工具 app_base 上位机配置

最少检查三处:

BootLoader 认为 APP 在哪里 APP 实际链接到哪里 固件包头写的 app_base 是哪里

10.4 移植跳转代码

修改:

APP_BASE_ADDR APP_MAX_SIZE SRAM 范围 NVIC 清理数量 芯片头文件

先测试:

BootLoader 跳 APP APP 中断正常

10.5 移植固件头和记录区

修改:

target_chip target_board app_base app_size version_code record address record erase unit

记录区必须独立。

不要和 APP 共用擦除页或 Sector。

10.6 移植打包脚本

修改脚本参数:

目标芯片 目标板卡 APP 起始地址 APP 最大大小 版本号 输出文件名

打包后,上位机或脚本应显示:

固件版本 APP 地址 APP 大小 APP CRC 目标板卡

11. 使用前必须确认的参数

使用资源包前,建议先填一张表。

芯片型号: Flash 大小: SRAM 大小: BootLoader 起始地址: BootLoader 大小: APP 起始地址: APP 最大大小: 参数区地址: 记录区地址: 串口号: 波特率: W5500 IP: W5500 端口: 目标板卡 ID: 固件版本号规则:

这些参数没定,资源包就不能直接改。

11.1 APP_BASE_ADDR

这是最重要的地址之一。

它必须同时出现在:

BootLoader APP 链接脚本 APP VTOR 固件头 打包工具 上位机显示

只改一处不够。

11.2 APP_MAX_SIZE

APP 最大大小要小于 APP 分区。

还要考虑:

是否预留参数区 是否预留记录区 是否做 A/B 是否有固件头

11.3 target_board

建议每个硬件板卡都有独立 ID。

不要只靠芯片型号判断。

同样是 F407,也可能有不同外设、不同 Flash 分区、不同启动条件。

11.4 version_code

版本号显示可以是:

1.2.3

但防回滚最好用单调递增的:

version_code = 10203

BootLoader 比较version_code,不要比较字符串。

12. 常见错误

12.1 直接发送 app.bin

如果 BootLoader 设计的是接收固件包,就不要直接发送原始app.bin

应该先打包:

app.bin -> app.fw

再发送:

app.fw

12.2 APP 地址只改了 BootLoader

必须同时改:

BootLoader APP_BASE APP 工程链接地址 APP VTOR 打包工具 app_base

12.3 记录区和 APP 共用擦除单位

如果记录区和 APP 共用同一个 Page 或 Sector,升级时很容易互相影响。

记录区要独立。

12.4 F407 用 F103 的 Page 算法

F407 是 Sector。

不能按等大小 Page 计算擦除范围。

12.5 W5500 升级时没处理 TCP 分包

TCP 是字节流。

不要假设一次 send 对应一次 recv。

12.6 上位机只显示“升级失败”

现场排查必须有:

阶段 包号 错误码 设备 ID 固件版本 日志

否则失败后很难定位。

13. 资源包里的代码怎么定位问题

13.1 跳转失败

看:

STM32_BootLoader_APP跳转排查清单.md boot_jump_app.c app_vector_relocate.c

重点查:

APP_BASE 内容 栈顶地址 Reset_Handler APP 链接地址 VTOR BootLoader 跳转前清理

13.2 CRC 失败

看:

boot_crc32.c firmware_pack_tool.py

重点查:

上位机和 BootLoader CRC 参数是否一致 计算范围是否一致 APP 大小是否一致 最后一包填充是否算进 CRC

13.3 升级后断电恢复异常

看:

boot_record.c

重点查:

记录区地址 记录区 CRC 升级状态 写入进度 APP 有效标志

13.4 网口升级异常

看:

W5500_TCP_YMODEM_升级流程.md BootLoader_升级状态流程图.mmd

重点查:

TCP 连接是否建立 BootLoader 是否发送 C recv 是否处理分包 ACK 节奏是否正确 断线后是否能重新升级

14. 适合做成项目资料的内容

这些资源也可以整理进项目文档。

建议项目内部保留:

Flash 分区表 APP 跳转排查清单 升级流程图 YMODEM 协议说明 固件头字段说明 升级记录区字段说明 错误码表 上位机升级操作说明 现场升级失败处理说明

这些资料对后期维护很有用。

不要只把代码交出去。

BootLoader 项目最怕没人知道:

APP 地址为什么是这个 固件头为什么不能写到 APP 起始地址 为什么升级失败后不能强行跳 APP 为什么 F407 不能按 Page 擦 为什么 TCP 不能按包 recv

文档和清单能减少后期沟通成本。

15. 总结

这套 STM32 BootLoader 配套资源包主要解决“文章看懂以后怎么落地”的问题。

当前 4 个资源包分别对应:

Flash 分区设计 APP 跳转排查 串口 / W5500 升级流程 固件头 / CRC / 防回滚模板

建议使用顺序:

先看分区表 再跑 APP 跳转 再调 YMODEM 升级 最后补固件头、CRC、版本和升级记录

使用时一定要注意:

资源里的地址是示例,不是所有项目通用 APP_BASE 必须和 APP 链接地址一致 Flash 擦写必须按具体芯片适配 记录区要独立 打包工具参数要和 BootLoader 配置一致

BootLoader 是一个很适合模板化的模块。

但模板不是直接复制,而是帮助你少漏检查项、少走弯路。

只要分区、跳转、升级流程、固件头和记录区这几块都对齐,后面的串口升级、网口升级、断电恢复和上位机联调都会顺很多。

文章标签

STM32 BootLoader IAP YMODEM W5500 Flash分区 固件头 CRC 防回滚 嵌入式

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询