我想使用st-flash
命令将程序上传到我的STM32F4 Discovery板。
问题是,当我尝试上传* .hex或* .elf文件时,它只是无法正常工作。
我尝试了很多方法(比如使用xxd)从* .elf或* .hex转换为* .bin但是当我上传它时仍然无法正常工作。是的,我尝试从其他Windows计算机上传hex文件并且可以正常工作。
hex文件的示例(前三行,只是为了向您展示它的内容):
:020000040800F2
:100000000000022099020008A1020008A5020008D1
:10001000A9020008AD020008B102000800000000BB
我的操作系统是Ubuntu 14.04 LTS。
感谢您的帮助!
答案 0 :(得分:9)
我假设你有linux并且你安装了binutils
,所以你只需要:
objcopy --input-target=ihex --output-target=binary code00.hex code00.bin
答案 1 :(得分:2)
.hex
文件格式。您需要一个能够理解它的加载程序,因为它有几种寄存器来控制加载过程。一些寄存器控制入口点地址。其他是要在某个固定地址加载的数据。
您可以在维基百科(我在那里找到)获取有关Intel Hex格式的信息(这就是它的名称)。如果所有数据仅在一个段上并且没有指定入口点,理论上您可以将其转换为要加载的二进制数据,但这是不可能的。
这是一个由以':'字符开头的行组成的文本文件,然后是一个两个字段的十六进制数字,表示该记录具有的数据字节数,然后是该数据要加载的地址,然后是类型对于文件,它可以是以下之一:
然后是要加载的数据(十六进制编码)的n个字节(n是第一个字段的值),最后是校验和字节(冒号中所有记录字节的二进制补码之和)。
答案 2 :(得分:1)
您是否考虑过使用arm-none-linux-gnueabi-objcopy(或类似代码)代替xxd? 这可以在任何ARM工具链中找到。