STM32CubeIDE 的构建后步骤转换为十六进制或 bin

问题描述 投票:0回答:2

我使用 STM32CubeIDE 进行项目构建,但尝试执行构建后步骤作为将应用程序校验和/crc 放入 .hex 文件的方法。我读到以下命令应该与 STM32CubeIDE 构建器一起使用。

首先将.elf转换为.bin arm-none-eabi-objcopy -O 二进制 main.elf main.tmp.bin

校验和完成后,然后将 .bin 转换为 .hex... arm-none-eabi-objcopy -I 二进制 -O ihex
--更改地址0x08020000 main.bin hex2.tmp

但我收到错误,它不是一个可识别的命令......请参阅附图 enter image description here

我是否缺少路径变量或其他什么?

stm32 stm32cubeide
2个回答
2
投票

是的,您可以将这部分纳入 CubeIDE 的构建过程,但有一些注意事项。

首先,您不能只在 Windows 命令提示符窗口中键入这些命令(例如用于测试)。您的

PATH
环境变量将不包括存储 GNU 工具的目录。您需要手动将正确的路径添加到您的
PATH
。您可以通过打开项目的
Properties
窗口并转到
C/C++ Build -> Environment
来查看 CubeIDE 使用哪些目录。

接下来,请注意 CubeIDE 已经可以为您的程序自动生成

.bin
文件。转到
Properties -> C/C++ Build -> Settings -> [Tool settings] -> MCU Post build outputs
,您可以选择
Convert to binary file
:

最后,您可以在

Properties -> C/C++ Build -> Settings -> [Build steps]
输入一个用户定义的构建后步骤。

这将是调用生成并插入 CRC 的任何命令的地方。 CubeIDE 将使用正确的路径,因此您无需在此处指定它。

我认为没有办法添加另一个构建后步骤,但是

.bin
文件应该可以用于编程。如果您真的需要一个
.hex
文件,您可能需要制作一个执行CRC和最终
objcopy
的脚本来实现这一点,并将该脚本称为构建后步骤。


0
投票

我假设您使用的是 Windows 系统并尝试将 .elf 文件转换为十六进制。 我使用以下命令执行此操作:

arm-none-eabi-objcopy  -O ihex  LSM1x0A_SDK_LoRaWAN_Sigfox.elf  "LSM1x0A_SDK_LoRaWAN_Sigfox.hex"
  • 记得更改elf文件名和目标hex文件名。

另外,如果需要执行python脚本那么可以组合多个命令,如下:

arm-none-eabi-objcopy  -O ihex  LSM1x0A_SDK_LoRaWAN_Sigfox.elf  "LSM1x0A_SDK_LoRaWAN_Sigfox.hex" & cd D:/cf_firmwares/LRWN_dev/LSM1x0A_dev/Projects/NUCLEO-WL55CC/Applications/LoRaWAN_Sigfox/LSM100A/STM32CubeIDE/Release & ls & python D:/cf_firmwares/LRWN_dev/LSM1x0A_dev/Utilities/1_SJITools/1_FW_Merge_Tool/main.py

上面的命令,我尝试了以下内容:

  • 将 elf 转换为十六进制
  • 移动到新目录
  • 检查该目录中有什么
  • 执行Python脚本

观察:

  • 构建后命令可能以随机方式执行
  • 像 Ubuntu 终端一样工作

结果

希望这会有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.