使用 MDK 时,我们实际烧录的文件其实是 .axf 文件,所以一般情况下我们不需要编译出 .bin 或 .hex 文件。

生成 .hex 文件时,需要在工程打开状态 MDK 的 Options for Target 选项中,点击 Output 选项,在中间的 Create HEX File 的空白矩形框上打上勾即可。 .hex 文件可以使用第三方烧写工具烧录到 MCU 中,但是一些烧录工具或者芯片只支持 .bin 文件的烧录,这时候我们需要 MDK 能够输出 .bin 文件,并且 .bin 文件远要比 .hex 来的通用些。

下面说下如何生成 .bin 文件:

  • 打开 Options for Target ‘xxx’ 对话框,选择 User 标签页。
  • 构选 Run User Programs After Build/Rebuild 框中的 Run#1 多选框,在后边的文本框中输入 C:/Keil_v5/ARM/ARMCC/bin/fromelf.exe --bin -o ../OBJ/consumer.bin ../OBJ/consumer.axf ,这条命令类似于 gcc ,对于不同的版本 fromelf.exe 软件位置不同,如果找不到可以尝试手动搜索,如果设置完编译不成功则代表你的路径有问题需要仔细检查路径位置,目录的当前路径为 uvproj 工程文件所在位置,我的输出路径为工程目录上一级的下的 OBJ 文件夹。
  • 重新编译文件,在 ./OBJ/ 文件夹下生成了 consumer.bin 文件。

直接在 CMD.exe 下运行 fromelf 工具则可以看到所有的选项和基本命令,这边仅列出最常用的一些内容:

  • –bin:输出二进制文件
  • –i32:Intel 32位Hex
  • –m32:Motorola 32位Hex
  • –output :file为输出文件名
  • -o:这个是armcc编译器命令,也可用于这里,指定输出文件的名字

转换过程实际是:通过fromelf.exe工具进行转换,将 .axf 格式的文件转换成 .bin 格式的文件。你也可以不通过 MDK ,而是直接在 CMD.exe 窗口下运行 C:/Keil_v5/ARM/ARMCC/bin/fromelf.exe --bin -o ../OBJ/consumer.bin ../OBJ/consumer.axf 手动将 .axf 文件 转换成 .bin 文件。