在stm32cubeide中创建不同版本的.bin文件

o7jaxewo  于 2022-12-29  发布在  其他
关注(0)|答案(1)|浏览(324)
    • 背景**

我目前正在使用STM32CubeIDE开发STM32F411CEU6的固件,我将对多个UC进行编程,每个UC都有一个ID(32位无符号数字),这个数字是静态的,在他的一生中永远不会改变,我们是一个小团队,但可能我们将不得不对几百个这样的设备进行编程,所以在代码中手动更改与该ID关联的值会有点累人,而且很耗时,所以,我的问题是:
有没有一种方法来编译不同版本的固件,使其生成几个. bin文件,每个whit唯一的区别,这一个常数的变化?
有没有办法自动化这个过程?
"我在想什么"
我曾想过在头文件中定义这个常量(如果有必要的话,还可以定义其他常量),然后使用Python之类的工具生成不同版本的代码,但这样我就必须打开每个项目或工作区,并且仍然必须手动编译和生成每个. bin文件,有没有办法从Python(使用STM32CubeIDE)生成. bin文件,或者类似的东西?

    • 其他信息**
  • 使用STM32F411CEU6
  • 使用STM32立方体IDE
  • 我有Python C++的基本知识
  • C语言中级知识

先谢了!任何帮助都将不胜感激

ttvkxqim

ttvkxqim1#

如果可以选择使用hex文件,则可以避免重新编译,如下所示:
1.在程序外部保留一些闪存空间(可选地配置链接器脚本以确保没有数据放置在该部分中)。
1.使用python脚本生成intel十六进制数据,并将所需ID放在保留位置。
1.简单地连接两个十六进制文件和程序像往常一样。我测试了这与STM32 ST-LINK实用程序/STM32CubeProgrammer。
要生成十六进制数据,可以使用intelhex包。例如:

import struct
from intelhex import IntelHex
from io import StringIO

ID_FLASH_ADDRESS = 0x8020000

hex_data = StringIO()
ih = IntelHex()
ih.puts(ID_FLASH_ADDRESS, struct.pack('<I', chip_id))
# Output data to variable
ih.write_hex_file(hex_data)

# Get the data
hex_data.getvalue().encode('utf-8')

注:

  • 有关'<I'的含义,请参见struct文档。
  • 我把数据输出到一个变量中,但是你也可以直接写入一个文件,参见intelhex documentation

相关问题