STM32 -Bin/Hex文件格式解析

news2024/11/18 4:37:49

文章目录

  • 1. 概述
  • 2. Hex文件
    • 2.1 格式解析
    • 2.2 数据类型
    • 2.3 举例解析
    • 2.4 合并两个Hex文件方法
  • 3 总结(未完待续)


1. 概述

  • Hex文件:它是单片机和嵌入式工程编译输出的一种常见的目标文件格式(比如keil就能编译输出hex文件),通过烧写工具把它下载到单片机中,程序就能在芯片中运行。
  • Bin文件:keil就能编译输出Bin文件,当我们需要实现IAP远程升级芯片固件的时候,会通过Bootloader程序将Bin文件写到芯片的内部Flash里。
  • 相关文档链接:
    《用文本编辑器(记事本)合并两个Hex文件 - 详细操作步骤》
    《J-Flash合并多个bin文件》
    《Keil编译后生成bin文件占用内部Flash的大小,RAM,ROM,Code,RO-data,RW-data,ZI-data》

2. Hex文件

请添加图片描述

2.1 格式解析

  • 每行以冒号(:)起始,后面每两个字母是一个8bit的16进制数;
  • 每行的格式:BBAAAATTD……DCC:
    • BB 表示本行数据的长度:
    • AAAA 表示本行数据存储的地址;
    • TT 表示数据类型;
    • DD 是实际的数据,它的长度不定(每行以16字节对齐);
    • CC 是校验和(计算方法:本行所有字节累加和(累加和只用低8位)取反再加1);

2.2 数据类型

  • 数据类型一共有6种形式:

    • '00’数据记录(Hex文件的大部分记录都是数据记录);

    • '01’文件结束记录(标识Hex文件的结尾,放在文件的最后);

    • '02’扩展段地址记录;

    • '03’开始段地址记录;

    • '04’扩展线性地址记录(声明数据存储的高位地址);

    • '05’开始线性地址记录(线性起始地址指定__main(主程序前)函数的地址,通常可忽略);

2.3 举例解析

  • 第一行 :020000040800F2
    • 02 :表示本行数据的长度为2:
    • 0000 :表示本行数据存储的地址;
    • 04 :表示数据类型为扩展线性地址记录;
    • 0800 :因为本行的数据类型为04,即0800声明了数据存储的高位地址为0x0800;
    • F2 :校验和(计算方法:本行所有字节累加和(累加和只用低8位)取反再加1,即0xF2=0x01 + ∼(0x02+0x04+0x08))
  • 第二行 :10300000E8740020493100085131000853310008AC
    • 10 :表示本行数据的长度为16(可见数据存储以每行16字节对齐);
    • 3000 :表示本行数据存储的地址低位为0x3000,即实际数据的存储地址为0x0800 3000;
    • 00 :表示数据类型为数据记录;
    • E…8 :因为本行的数据类型为00数据记录,DD区即为实际的数据;
  • 第五行 :10FFF00004F086FA974890F82D000090954890F804
    • 10 :表示本行数据的长度为16
    • FFF0 :表示本行数据存储的地址低位为0x3010,即实际数据的存储地址为0x0800 FFF0;
  • 第六行 :020000040801F1
    • 02 :表示本行数据的长度为2:
    • 0000 :表示本行数据存储的地址;
    • 04 :表示数据类型为扩展线性地址记录;
    • 0801 :声明了数据存储的高位地址为0x0801(当地址长度超过16bit 即0xFFFF时,就需要扩展线性地址记录再次声明新的高位地址);
  • 倒数第三行 :0450900004012400F3
    • 04 :表示本行数据的长度为4:
    • 5090 :表示本行数据存储的地址低位为0x5090,即实际数据的存储地址为0x0801 5090;
    • 00 :表示数据类型为数据记录;
    • (此行长度不足0x10,只有0x04,这代表已经到了Hex文件数据的末尾了)
  • 倒数第二行 :04000005080031318D
    • 04 :表示本行数据的长度为4:
    • 0000 :表示本行数据存储的地址;
    • 05 :表示数据类型为开始线性地址记录;
    • 此行内容通常可忽略,官方解释为:
      • 线性起始地址指定__main(主程序前)函数的地址,但不指定启动代码的地址,启动代码通常在调用 SystemInit() 后调用__main。奇数线性起始地址表示 __main 是为 Thumb 指令集编译的。
      • 线性起始地址记录可以出现在十六进制文件的任何地方。在大多数情况下,可以忽略该记录,因为它不包含闪存编程所需的信息。
  • 倒数第一行 :00000001FF
    • 00 :表示本行数据的长度为0:
    • 0000 :表示本行数据存储的地址;
    • 01 :表示文件结束记录(标识Hex文件的结尾,放在文件的最后);

2.4 合并两个Hex文件方法

  • 当开发项目包含IAP升级芯片固件的功能时,需要把Bootloader和App两段代码的Hex文件合并以后再烧写,具体操作方法可参考以下内容:
  • 《用文本编辑器(记事本)合并两个Hex文件 - 详细操作步骤》

3 总结(未完待续)


授人以鱼,不如授人以渔

这里只提供钓鱼方法而不是一条完整的鱼

有问题欢迎留言交流 / 指正o( *  ̄▽ ̄ * )ブ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1233757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes容器状态探测的艺术

在Kubernetes集群中维护容器状态更像是一种艺术,而不是科学。原文: The Art and Science of Probing a Kubernetes Container[1] 在Kubernetes集群中维护容器状态更像是一种艺术,而不是科学。 本文将带你深入理解容器探测[2],并特别关注相对较…

SQL常见函数整理 —— LAG() 向上偏移

1. 用法 窗口函数,用于访问窗口中当前行之前的行的数据。该函数可以根据需要计算当前行之前的值,使我们能够轻松地比较不同行之间的差异和变化。 2. 基本语法 LAG(column, offset, default_value) OVER (ORDER BY column)column:代表在返回…

代码随想录刷题】Day15 二叉树02------延伸题目练习

文章目录 1.【100】相同的树1.1 题目描述1.2 java代码实现 2.【572】另一棵树的子树2.1 题目描述2.2 java代码实现 【100】相同的树 【572】另一棵树的子树 1.【100】相同的树 1.1 题目描述 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。…

“轻松管理你的文件库:按大小归类保存,高效整理!“

亲爱的朋友们,你是否曾经为了整理电脑中杂乱无章的文件而感到烦恼?文件大小不一,无法快速找到所需内容,实在让人感到心力交瘁。但现在,我们为你带来一种全新的解决方案,让你的文件管理更轻松,更…

算法设计与分析复习--回溯(一)

文章目录 上一篇回溯法性质子集和问题装载问题0-1背包问题下一篇 上一篇 算法设计与分析复习–贪心(二) 回溯法性质 类似穷举的搜索尝试过程,在搜索尝试过程中寻找问题的解,组织得井井有条(避免遗漏)&am…

工业领域的设备“监测”和“检测”有何区别?

在工业领域中,设备的监测和检测是关键的运维活动,它们在保障设备可靠性和生产效率方面发挥着重要作用。尽管这两个术语经常被人们混为一谈,但它们在含义和应用上存在一些关键区别。 "监测"与"检测"的概念 1. 监测&#…

PHP手动为第三方类添加composer自动加载

有时候我们要使用的第三方的类库(SDK)没用用composer封装好,无法用composer进行安装,怎么办呢??? 步骤如下: 第一步、下载你需要的SDK文件包,把它放在vendor目录下 第二…

【Python】学习Python面向对象编程的疑问

(Java菜鸟来学Python了) 🤔 1. 静态方法与类方法什么区别? 实例方法只能被实例对象调用(Python3 中,如果类调用实例方法,需要显示的传self, 也就是实例对象自己),静态方法(由staticmethod装饰…

【MATLAB源码-第84期】基于matlab的802.11a标准的OFDM系统误码仿真对比QPSK,16QAM。

操作环境: MATLAB 2022a 1、算法描述 基于802.11a标准的OFDM(正交频分复用)系统是一种高效的无线通信技术,特点如下: 频带与信道: 802.11a工作在5 GHz频段,这个频段相对于2.4 GHz&#xff08…

O-Star|再相识

暑去秋来,岁月如梭,几名"O-Star"们已经入职一段时间,在这期间他们褪去青涩,逐渐适应了公司的工作环境和文化,迈向沉稳~ 为了进一步加深校招生之间的交流与了解,提高校招生的凝聚力和…

77基于matlab的蚁群优化路径算法,二维路径和三维路径优化

基于matlab的蚁群优化路径算法,二维路径和三维路径优化。输出可视化最优路径和距离迭代曲线。数据可更换自己的,程序已调通,可直接运行。 77三维和二维路径可视化 (xiaohongshu.com)

Docker快速安装Mariadb11.1

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。 Mari…

第2关:图的深度优先遍历

任务要求参考答案评论2 任务描述相关知识编程要求测试说明 任务描述 本关任务:以邻接矩阵存储图,要求编写程序实现图的深度优先遍历。 相关知识 图的深度优先遍历类似于树的先序遍历, 是树的先序遍历的推广,其基本思想如下: …

如何利用CHATGPT写主题文章

问CHAT:新课标下畅言智慧课堂助力小学生量感培养,拟解决的关键问题 CHAT回复: 1. 确定智慧课堂在新课标下的正确应用方法:新课标对教育方法、内容等提出了新的要求,需要探讨如何将智慧课堂与新课标相结合,…

Rockchip Clock

一:概述 1、时钟子系统 本章节所指的时钟是给SOC各个组件提供时钟的树状框架,而非内核使用的时钟。和其他模块一样,CLOCK也有框架,用以适配不同的平台。适配层之上是客户代码和接口,也就是各模块(如需要时钟信号的外设)的驱动。适配层之下是具体的SOC的时钟操作细节。…

宏电股份荣膺国家知识产权优势企业称号,科技创新与研发实力获国家级认可

近日,国家知识产权局公布了2023年度国家知识产权优势企业的评审结果,宏电股份凭借强大的技术实力和创新能力,荣获“国家知识产权优势企业”荣誉称号。这一荣誉是对宏电股份在技术创新和知识产权创造、运用、保护及管理方面的高度认可&#xf…

图解算法数据结构-LeetBook-栈和队列04_望远镜中最高的海拔_滑动窗口

科技馆内有一台虚拟观景望远镜,它可以用来观测特定纬度地区的地形情况。该纬度的海拔数据记于数组 heights ,其中 heights[i] 表示对应位置的海拔高度。请找出并返回望远镜视野范围 limit 内,可以观测到的最高海拔值。 示例 1: 输…

Leetcode2938. 区分黑球与白球

Every day a Leetcode 题目来源:2938. 区分黑球与白球 解法1:贪心 把 ‘0’ 挪到相应的位置。 类似于冒泡排序的思想,把 ‘0’ 挪到相应的位置。 示例: 代码: /** lc appleetcode.cn id2938 langcpp** [2938] 区…

【无矶之谈】编码能力堪比Copilot、Cursor、GPT-国内可用的智能AI编程

前言简述 Copilot Copilot 是一款由 OpenAI 推出的人工智能代码自动补全AI工具 早在2022年4月,我便写了一篇Github Copilot的申请及在Pycharm的配置和使用,那个时候我便在用AI进行编程,当时虽然用的不是很多,但也算接触了AI。 …