登录/注册

STM32 BIN 合并

STM32 BIN 合并

更多

在STM32开发中,合并多个BIN文件通常用于将Bootloader、应用程序、配置文件等组合成单一镜像以便烧录。以下是详细步骤和示例:

核心原理

  1. 确定地址偏移:每个BIN文件需烧录到Flash的指定地址(如Bootloader在0x08000000,APP在0x08008000)
  2. 填充空白区域:地址间隙需用0xFF填充(Flash擦除后的状态)
  3. 有序拼接:按地址由低到高合并文件

方法1:使用Python脚本(推荐)

import sys

def merge_bin(output_file, input_files):
    # 解析输入: [(地址, 文件名), ...]
    entries = []
    for i in range(0, len(input_files), 2):
        addr = int(input_files[i][2:], 16)  # 去除"0x"后转换16进制
        entries.append((addr, input_files[i+1]))

    # 按地址排序
    entries.sort(key=lambda x: x[0])

    # 计算总大小(从最小地址到最后文件结束)
    last_entry = entries[-1]
    total_size = last_entry[0] + os.path.getsize(last_entry[1]) - entries[0][0]

    # 创建全FF缓冲区
    merged_data = bytearray(b'\xFF' * total_size)

    # 填充各BIN文件内容
    for addr, fname in entries:
        offset = addr - entries[0][0]  # 计算在缓冲区中的偏移
        with open(fname, 'rb') as f:
            data = f.read()
            merged_data[offset:offset+len(data)] = data

    # 写入输出文件
    with open(output_file, 'wb') as f:
        f.write(merged_data)

if __name__ == "__main__":
    if len(sys.argv) < 4:
        print("用法: python merge_bin.py 输出文件.bin 地址1 文件1.bin 地址2 文件2.bin ...")
        sys.exit(1)
    merge_bin(sys.argv[1], sys.argv[2:])

使用示例

# 合并Bootloader(0x08000000)和APP(0x08008000)
python merge_bin.py firmware.bin 0x08000000 boot.bin 0x08008000 app.bin

方法2:使用ST官方工具

  1. STM32CubeProgrammer

    • 通过图形界面分别烧录多个BIN到指定地址
    • 使用File > Save导出完整Flash内容为BIN文件
  2. ST-LINK Utility

    • 依次烧录各文件到指定地址
    • Target > Save file... 保存整个Flash

方法3:命令行工具 (dd/srec_cat)

Linux/macOS 示例

# 生成8KB的0xFF填充文件(Bootloader到APP间隙)
dd if=/dev/zero bs=8k count=1 | tr '\000' '\377' > gap.bin

# 合并文件(地址范围:0x08000000-0x08020000)
srec_cat boot.bin -binary -offset 0x08000000 \
         gap.bin -binary -offset 0x08008000 \
         app.bin -binary -offset 0x0800C000 \
         -o full_flash.bin -binary

Windows (Git Bash)

# 安装srecord
choco install srecord

# 合并命令(同上)
srec_cat.exe ...

关键注意事项

  1. 地址对齐:确保起始地址是Flash扇区大小的整数倍
  2. 中断向量表:APP的向量表首地址需偏移(如设置VTOR寄存器)
  3. 空填充:间隙必须用0xFF填充,避免意外编程Flash
  4. 空间检查:合并后尺寸勿超芯片Flash容量

建议优先使用Python脚本方案,灵活性强且易于自动化集成。测试时务必通过烧录器验证实际写入结果!

bin文件怎么烧录到stm32

烧录bin文件到STM32微控制器是一个相对复杂的过程,涉及到硬件连接、软件配置和固件烧录等多个方面。 一、硬件准备 STM32开发板

2024-08-22 09:38:24

STM32标准库程序与HAL库程序如何合并的?

请问大家STM32标准款与HAL库程序有没有合并的教程,或是合并的方法?

2024-04-03 08:02:00

keil如何生成bin文件

创建工程、编写代码、配置编译选项、编译生成可执行文件、转换为bin文件等。 创建工程 首先,打开Keil软件,点击“File”->“New”->“Project”,选择适合的目标设备,如STM32系列或其他ARM芯片

2023-12-15 13:43:16

初学Fatfs系统,利用单片机合并bin文件

的过程其实就是在给OLED不断的刷图。。 给OLED刷图的方法其实就是刷bin文件。我用Img2LCD这个软件,把BMP图像转化为二进制文件。这个软件是很好用,每一帧的画面是128*64,一共是128*64=8192个位(像素点)=1024字节,每一帧就是一个画面,一个画面就是一个

资料下载 王芳 2021-12-31 19:45:12

STM32烧录HEX、BIN文件,使用ST-LINK

实在不能正常烧录,再尝试着将RESET连接)(注意:不建议在烧录固件时,使用设备的总电源,防止可能导致设备受损的意外发生)打开 STM32 ST-LINK Utility。File - Open file,打开要烧录的 HEX 或者

资料下载 佚名 2021-12-22 19:49:07

分享一个通过STM32bin文件逆向分析代码的工具

关注、星标公众号,不错过精彩内容转载:芯片之家来源 |阿莫论坛,作者 | ilovepp首先你要有一个bin文件(bin文件的获取方法不在此展开介绍,今后有机会可以专门开一个贴聊一聊)...

资料下载 526774 2021-12-09 14:36:07

用于STM32hex文件合并的应用程序免费下载

本文档的主要内容详细介绍的是用于STM32hex文件合并的应用程序免费下载。

资料下载 梁生 2020-03-05 08:00:00

如何使用CPUID和AES算法实现STM32单片机的固件升级

针对STM32系统固件升级时使用同一个文件易被非法复制使用的缺陷,提出并实现了一种一个STM32芯片使用一个唯一升级文件的固件升级方案。升级固件时,由服务器为不同的

资料下载 佚名 2019-11-19 15:14:32

浅析HEX和BIN文件

BIN文件是单纯的二进制程序文件,内部没有地址信息。如果使用BIN文件烧录程序时,需要指定下载地址。

2023-04-24 17:32:45

STM32单片机中Hex、Bin文件的区别及应用详解

    STM32、51等单片机程序经过编译后,生成的hex文件、bin文件,它们都是单片机烧写文件,本文介绍它们的区别与应用。 H ex文件 Keil5中生成hex文件的配置     如上图,分别

2022-07-05 17:23:09

怎样去实现keil集成bin文件生成boot+app合并dfu的设计呢

怎样去实现keil集成bin文件生成boot+app合并dfu的设计呢?

2022-01-18 07:48:03

stm32读取bin文件

stm32读取bin文件,关注、星标公众号,不错过精彩内容转载:芯片之家来源 |阿莫论坛,作者 | ilovepp首先你要有一个bin文件(

2021-07-16 07:14:28

如何实现程序拼接和hex/bin格式互转?

结合STM32,以及对应的ST-LINK Utility、STM32CubeProg工具给大家简单描述下: IAP、APP程序拼接 hex、bin

2021-03-20 11:39:32

怎么实现SBL bin文件的合并

SBL中,请问怎么合并另个bin文件,资料上说使用Copy /b SampleLight.bin + boot.

2020-04-26 14:32:55

Linux下开发STM32 使用gcc-arm-none-eabi工具链编译生成bin、hex文件

Linux下开发STM32:使用gcc-arm-none-eabi工具链编译生成bin、hex文件

2020-02-28 15:08:23

7天热门专题 换一换
相关标签