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