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
相关产品推荐
相关产品推荐

