【问题标题】:How do I generate a binary file of the stm32 code?如何生成 stm32 代码的二进制文件?
【发布时间】:2019-11-22 20:31:33
【问题描述】:

我正在为 STM32 MCU 构建固件更新程序。到目前为止,我已经在设备上编写了引导加载程序软件,与 FLASH 中的主应用程序分开。

我需要做的是生成一个二进制文件,它将作为 FLASH 中主应用程序的替换代码。这意味着我可以通过 UART 传输文件并覆盖主应用程序。我该如何制作这样的文件?

代码是使用 stm32CubeIDE 编写的,它在构建后会生成一个 .elf 文件。在通过 UART 传输之前,我将在此二进制代码中添加一个标头。

非常感谢您的帮助,

哈利

【问题讨论】:

  • How do I go about producing such a file? - 与生产任何其他固件的方式相同。编写源文件,编译和链接。 have so far programmed bootloader software - 什么/哪个软件?
  • 我想我要问的是编译链接后通常会生成一个可执行文件。但是,在这种情况下,会生成一个 .elf 文件,因为它会进入 MCU。这个 .elf 文件是否等同于 .exe 文件,如果将二进制文件传输到 MCU 并加载,程序就会运行?
  • 没有。 .elf is ELF, .exe is executable for windows binary file is binary 你想要什么取决于“编程的引导加载程序软件”期望得到什么。它很可能需要hex file,但它取决于您编写的引导加载程序软件。以及您编写的软件使用什么协议。而且很可能您需要一些可以与您编写的引导加载程序一起使用的程序。
  • 好吧,您必须与您的链接器进行认真的交谈,以说服它生成可以加载到闪存中的图像。是的,这很痛苦,所有这些领域、部分和部分,但必须完成:(
  • 或者如果你使用 gcc 和 linux,只需arm-none-eabi-objcopy -o ihex input.elf output.elf,即。 how to convert elf to hex。通常引导加载程序很简单,它们公开一个 api 来编程和擦除内存区域。因此,您需要在 PC 上安装一个能够理解 ex 的程序。 hex 文件格式并与您的引导加载程序通信。不过,您没有说您使用的是什么“引导加载程序软件”。

标签: c compilation stm32


【解决方案1】:

在 CubeIDE 中转到 Project Settings -> "C/C++ Build" group -> Settings -> "Tool Settings" 选项卡 -> MCU Post build output -> "Convert to Intel Hex file" 复选框时间> (如果您没有看到这些选项,则可能需要重新启动 IDE - 这样的错误仍然存​​在)

这将使 IDE 将输出转换为易于解析的 HEX 文件。你可以找到the format description in Wikipedia。您可以在发送到引导加载程序之前对其进行解析。

或者,您可以设置复选框“转换为二进制文件”,这将生成原始二进制文件。但是如果你的代码不是从零地址开始,可能会带来一些麻烦。

【讨论】:

  • 非常感谢,这正是我想要的!
【解决方案2】:

您需要使用 IDE 附带的 objcopy.exe。以下适用于 STM32CubeIDE 的前身 Atollic TrueStudio。此步骤通常作为后期构建步骤添加

arm-atollic-eabi-objcopy.exe -O ihex "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.hex"

有关 objcopy 的更多信息: https://sourceware.org/binutils/docs/binutils/objcopy.html

【讨论】:

    猜你喜欢
    • 2014-08-27
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多