You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

st-flash烧录STM32提示addr too high,STM32CubeProgrammer正常

问题分析与解决步骤

核心原因

.out是ELF格式的可执行文件,里面不仅包含程序运行必需的.text、.data段,还附带调试符号、冗余表项等非运行数据,总文件大小(152KB)远大于实际需要烧录到Flash的有效程序数据。st-flash默认会尝试写入整个文件的所有内容,导致写入总字节数超出芯片Flash的地址范围,触发addr too high错误;而STM32CubeProgrammer会自动解析ELF文件,只提取并烧录有效程序段,所以显示的烧录大小仅12.8KB且成功。

解决方法

方法1:转换为纯二进制.bin文件(推荐)

用ARM GNU工具链的objcopy工具提取有效程序段,生成仅含运行必需数据的.bin文件:

arm-none-eabi-objcopy -O binary filename.out filename.bin

再用st-flash烧录这个精简后的.bin文件:

st-flash --reset write filename.bin 0x08000000

方法2:让st-flash正确解析ELF格式

部分版本的stlink工具支持指定ELF格式参数,使其自动识别有效段,无需转换文件:

st-flash --reset --format elf32-littlearm write filename.out 0x08000000

如果你的stlink版本不支持该参数,优先使用方法1。

额外提示

可以通过arm-none-eabi-size filename.out查看ELF文件各段的大小,确认有效程序段的总占用空间,对比所用STM32芯片的Flash容量,提前规避类似问题。

内容的提问来源于stack exchange,提问作者fistameeny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:17:08