合并STM32 iap的hex文件合并为一个hex文件
title: 合并STM32 iap的hex文件合并为一个hex文件
date: 2020-06-15 04:32:26
categories:
tags:
- iap
- stm32
---
背景
只要设计了IAP功能,一般就需要有2段程序。手动烧写2段程序到不同的分区是一件比较麻烦的事情。
当然,也可以使用分散加载文件来把2段程序写为一个工程,但是工作量更大。
方法
记得在MDK中
Options-Output勾选Create HEX File。
先写再读写FALSH
IAP 先烧写进flash 的 0x0800 0000 开始位置, APP烧写到 flash 的0x 0800 3000开始的地方; 之后通过我上一篇博文的 IAP程序的文件读出功能读取flash 上的数据读到一个.bin文件上。然后通过程序刷写工具刷入起始flash地址为 0x0800 0000中。
手动编辑
手动合并iap 和app 的.hex 文件(麻烦,出错率高)
(1)设置IAP程序下载到flash 的开头地址为0x0800 0000,然后编译程序生成hex文件。
(2)设置APP程序下载到flash 的开头地址(地址依据芯片和程序大小而定),然后编译程序生成hex文件。
(3)用 notepad++ 打开 IAP 的hex文件和APP的hex 文件
把IAP的.hex 最后一句结束语句去掉(即:删除:00000001FF)
把APP的.hex 全部内容拷贝复制到 刚才删掉结束语句的 IAP的.hex后面
(4)把两个hex合成的hex文件重新命名为XXX.hex,然后通过烧写工具烧写到0x0800 0000 开始位置的地址即可。
这里有python3的实现
# -*- coding: utf-8 -*-
import sys,os
import intelhex
def createHelpDialog():
#print("软件实现的是将两个Hex文件同时转为Bin文件并且合并为一个Bin文件输出的功能。")
print("将两个Hex文件合并为一个Hex文件。")
def mergeHex(inhex1, inhex2, outhex):
# 两个 hex
#inHex1 = 'bootloader.hex'
#inHex2 = 'app.hex'
#outHex = 'python.hex'
inHex1 = inhex1
inHex2 = inhex2
outHex = outhex
#get file name
hex_boot_len = os.path.getsize(inHex1)
hex_app_len = os.path.getsize(inHex2)
print("First %s size is %d" %(inHex1, hex_boot_len))
print("Second %s size is %d"%(inHex2, hex_boot_len))
## 删除 之前的结果
if(os.path.isfile(outHex)):
os.remove(outHex)
#先读写hex,再合并成bin
print("Merge Hex file....")
hex_boot_file = open(inHex1, 'rb')
hex_app_file = open(inHex2, 'rb')
hex_file = open(outHex, 'ab')
for h in hex_boot_file.readlines():
if h == b':00000001FF\r\n' :
print(h)
break
else :
hex_file.write(h)
continue
for h in hex_app_file.readlines():
hex_file.write(h)
hex_file.write(b'\r\n')
hex_boot_file.close()
hex_app_file.close()
hex_file.close()
def hex2bin(mergeHex, outBin) :
## 删除 之前的结果
if(os.path.isfile(outBin)):
os.remove(outBin)
print("Hex File To Bin File...")
# BUG
intelhex.hex2bin(mergeHex, outBin, None, None, None, 00)
if(os.path.isfile(outBin)):
bin_file_len = os.path.getsize(outBin)
print("Bin File is [%s] "%(outBin))
print("Bin File size is [%d] "%(bin_file_len))
print("Hex File To Bin File completly")
if __name__ == "__main__":
#mergeHex('bootloader.hex', 'app.hex', 'python2.hex')
#hex2bin('python.hex', 'python.bin')
hex2bin('merge.hex', 'python.bin')
使用现成的工具
我在网上找到了一个开源的项目:STM32-IAP-HEX-Merge。
语言为c#,运行环境为 vs
合并STM32 iap的hex文件合并为一个hex文件的更多相关文章
- Linux内核驱动将多个C文件编译成一个ko文件的方法——每一个C文件中都有module_init与module_exit
以两个C文件为例: 将本该被分别编译成adc_device.ko和adc_driver.ko的adc_device.c.adc_driver.c编译成一个ko文件! 採用方法: 第一步.改动C文件 1 ...
- PyCharm在同一个包(package)下,如何把一个.py文件导入另外一个.py文件下
PyCharm在同一个包(package)下,如何把一个.py文件导入另外一个.py文件下 在同一个包下只需要用import 掉以后就可以找到模块所在的位置,但是如果不在同一个包下,在需要返回父级调用 ...
- 合并csv文件保存到一个csv文件中-保留表头
主要实现功能: 在同一文件夹下的所有csv文件全部合并到同一个csv文件中,并将csv文件的表头保留 1 import os 2 import pandas as pd 3 path = os.get ...
- WPF中Style文件引用另一个Style文件中的样式
第1种方法: 直接在当前Style文件(*.xaml)文件中使用: <ResourceDictionary.MergedDictionaries>来进行合并 <!-- 关键是注意so ...
- python 一个包中的文件调用另外一个包文件 实例
python不同文件夹中模块的引用调用顺序,被调用的模块中①有类的 模块.类().方法() ②无类的:模块.方法() test包中testIm.py 调用 test1包中testIm1.py中的方 ...
- 如何将一个h5ad文件内部添加一个csv文件作为属性obsm
问题展开 学习生物信息的时候发现,需要将一个M * N的csv文件作为anndata文件的.X部分,一个M * 2的csv文件作为anndata文件的空间位置信息标识. 首先先读M*N的文件 myda ...
- matlab 循环读入多个mat文件组合成一个mat文件
今天做实验,需要到这个功能,在朋友的告知下,写了代码,在此留个标记 clc clear load('F:\效果对比\colorhist\1.mat'); a=ans; a=a'; : filename ...
- 将一个html文件引入另一个html文件的div中
width="" height=""属性可根据要求自己设定
- [java]将多个文件压缩成一个zip文件
此文进阶请见:https://www.cnblogs.com/xiandedanteng/p/12155957.html 方法: package zip; import java.io.Buffere ...
- RTF文件合并 备忘
多个独立的rtf文件合并时,如果文件纸张方向存在横向 纵向不一致时,文件之间需要插入分节符 \pard \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\aspa ...
随机推荐
- Unity 热更--AssetBundle学习笔记 0.7
AssetBundle AB包是什么? AssetBundle又称AB包,是Unity提供的一种用于存储资源的资源压缩包. Unity中的AssetBundle系统是对资源管理的一种扩展,通过将资源分 ...
- HEOI2024省选游记
day 0 上午 没让不跑操的同学帮忙带着包 所以就直接背着跑的操,相当难受 吃完早饭就拿手机来机房了 不得不说看得出来 huge 这届确实打算换一种教学思路 以来就先强调了一堆意料之外的东西 包括但 ...
- 简说python之初连ORACLE数据库
目录 Python操作Oracle数据库 1.安装cx_Oracle模块 2.安装oracle客户端 3.python操作oracle示例 4.配置TNS 5.通过tns连接数据库的python 通过 ...
- uniapp中使用极光推送
1.注册极光账号 2.注册几个主流手机厂商的开发者账号(注册手机厂商,可以保证app进程不在的时候走厂商通道推送消息) 3.配置uniapp极光插件 https://ext.dcloud.net.cn ...
- linux下nginx安装和配置
一.软件安装 1.环境说明 操作系统:CentOS 7.4 64位 nginx版本:1.16.1 安装日期:2019/10/01 安装用户:root 2.安装运行库 yum -y install gc ...
- 如果win报错无法加载文件 C:\Users\xx\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本
点击查看代码 Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
- java 执行 javascript 代码
package com.ruoyi.project.front.controller; import java.math.BigDecimal; import java.util.*; import ...
- 【c++】const 限定符
#include <iostream> int main() { using namespace std; cout << "Hello World!\n" ...
- SpringMVC在返回JSON数据时出现406错误解决方案
在SpringMVC框架的使用中常常会使用@ResponseBody注解,修饰"处理器"(Controller的方法),这样在处理器在返回完毕后,就不走逻辑视图,而是将返回的对象转 ...
- CSS——float浮动属性
流动布局 流动模型(Flow),即文档流,浏览器打开HTML网页时,从上往下,从左往右,逐一加载. 在正常情况下,HTML元素都会根据文档流来分布网页内容的. 文档流有2大特征: ① 块状元素会随着浏 ...