读取STM32单片机升级写入Flash的.bin文件方法
1.背景
在项目中,使用STM32L051C8Tx系列单片机做裸机升级,使用方案是通过串口485+YMODEM协议方案
关于Ymodem协议参考如下:Ymodem协议解析-CSDN博客
在bootload升级过程中,也成功把.bin文件写到flash中,但是最后执行跳转app操作没有反应(正常使用keil烧录bootload和app是能正常跳转到app中运行的),所以需要排查问题,查看Flash中对应地址写入的bin文件数据是否正确。
2.读取 Flash 中 BIN 文件的工具
2.1 J-Flash 工具(推荐)
J-Flash 是 SEGGER 公司开发的通用 Flash 烧录工具,支持多数 STM32/Cortex-M 芯片的读写操作。 操作步骤如下:
- 连接调试器:使用 J-Link 或 ST-Link 连接单片机,确保接线正确(SWD 或 JTAG 模式)。
- 新建工程:在 J-Flash 中选择芯片型号(如 STM32F103)。
- 读取 Flash 内容:
1.点击 Target → Connect 连接芯片。
2.选择 Target → Manual Programming → Read Back → Entire Chip(读取整个 Flash 区域)。
- 导出 BIN 文件:点击 File → Save Data File As,选择保存格式为 Binary,指定输出路径即可。 优点:操作简单,支持批量读取和校验功能。
2.2 STM32CubeProgrammer(ST 官方工具)
适用于 STM32 全系列芯片,支持读写出厂配置和数据。 操作步骤:
- 连接 ST-Link 调试器,启动软件并选择 ST-LINK 模式。
- 点击 Connect 连接芯片,进入 Memory & File Editing 标签页。
- 输入 Flash 起始地址(如
0x08000000
)和长度,点击 Read 读取数据。
2.3 Keil/IAR 的内存导出功能
在调试模式下直接导出 Flash 内容:
- Keil:点击 Debug → Memory Save,输入起始地址和长度,保存为 BIN 文件。
- IAR:使用 Memory Save 功能类似操作。 局限性:需依赖 IDE 环境,适合开发阶段调试
3.通过调试排查自己写入Flash的bin文件数据是否正确
进入DeBug调试--->点击Memory Windows--->输入Flash中写入app的地址"0x8004000",回车看写入的数据,比较bin文件,看写入数据是否有问题,如下图所示;
STM32L051C8Tx单片,flash总共64k,这里我分16k给bootload,46k给app,剩下2k做存储功能,所以我查数据从"0x8004000"地址开始。