【 MDK keil5 生成 .hex文件 .bin文件 stm32】

2023-05-16

MDK keil5 生成 .hex文件 .bin文件 stm32

  • 1.生成hex文件
  • 2.生成bin文件
    • 2.1第一种方法
    • 2.2高级方式

1.生成hex文件

hex文件的生成通常是默认不选择生成的,MDK这个IDE对于hex生成还是很友善的。只需要在设置中进行勾选就可以了。
1.1选择生成
在这里插入图片描述
如上图所示,依次选择 1 2,然后勾选3就可以了。

1.2选择生成hex文件存在的位置
在这里插入图片描述
如上图所示:
点击1选择想要存放hex文件的文件夹。
选择的文件夹会同步到2处,USART是名字。名字是由3处的设置的。
所以最终会在OBJ文件夹下生成一个“USART.hex”的文件,可用于下载.

2.生成bin文件

MDK生成bin文件就比较麻烦了,但也是一次设置,整个工程寿命有效,也可以接受。

2.1第一种方法

在这里插入图片描述
如上图设置好,下载点击编译的时候,mdk会自动帮您生成相应bin文件。下面来分析这个是怎么配置的。

【配置】

D:\workSoftware\Keil_v5\ARM\ARMCC\bin\fromelf.exe    --bin   -o     ..\OBJ\USART.bin    ..\OBJ\USART.axf

【分析】上面的配置一共分为五个部分,输入的时候用空格隔开。我们逐个分析,用来确定适用于你的配置:

1)D:\workSoftware\Keil_v5\ARM\ARMCC\bin\fromelf.exe
这一块显然是一个win下的可执行程序(exe),只要你安装了MDK都会有。具体位置可以通过如下的方式查找。
在这里插入图片描述
你会看到如下信息
在这里插入图片描述
我们核实一下,如期看到了“fromelf.exe”,这里根据每个人的安装路径不同而不同,但终归都会有。不论是keil4 或者keil5
在这里插入图片描述
2)–bin
两个中横杠加bin,这里你可以理解成配置,告诉exe程序是要做什么,这里显然是要生成bin文件。固定写法,无需修改

3)-o
这里是一个中横杠加o(欧),这里是英文字母o,不是阿拉伯数字0,这里的作用是out的意思,表示这个“-o”后面跟的就是最终要输出的文件名,固定写法,不要改动,我们肯定知道是要输出一个bin文件的名字的,但是要带路径。

4)..\OBJ\USART.bin

这是想要生成的bin文件名以及他的路径。跟在前面的 -o 后面,表示我们要输出这里所描述的这个bin文件。
文件的名字叫“USART.bin”这里名字可以随意,但必须以.bin结尾

前面的..\OBJ\表示的就是相对路径,表示bin文件想要存放的位置,这里要首先知道(..\表示上一层目录 .\表示当前文件夹),既然这么描述了,必然就是说这是一个相对地址(对应的还有绝对地址,1)中的就是绝对地址)。是谁的相对位置呢,可以看成是工程文件(打开工程的那个文件)的相对位置,工程文件如下图:
在这里插入图片描述
这个工程文件在我的工程中USER文件夹下,返回上一层,然后再进入OBJ,那么bin文件就生成在OBJ文件夹下了。USER和OBJ是平行的两个文件夹,上面那个相对路径表示 USER -> 下图的根路径 -> OBJ,就是这么一个路径效果,这就是所谓相对路径。你知道意思就可以,放在那个文件夹下并不强制。比如: 可以修改成.\USART_change.bin就表示bin文件和工程文件放在一起(USER文件夹),名字叫“USART_change.bin”。
在这里插入图片描述

5)..\OBJ\USART.axf

这是最后一部分,相对路径部分我就不解释了,“USART.axf”是固定的,不可以随便命名因为这里表示的是生成前面的bin文件所依赖的文件。就是用“USART.axf”生成的bin文件,所以你工程里生成的axf叫什么就是什么,在哪里就是哪里,是不能随便发挥的。

【总结】
到这里生成bin文件的配置说明就分析完了,只要你不修改out配置中的路径和名字,这个配置就可以一直用。也就是下图中的两个部分不能动,都是影响5)中的配置,一个是影响afx文件的相对路径;一个是影响axf的名字。如下图:
在这里插入图片描述

2.2高级方式

keil5中我试了试可以,但更早版本我不确定。这是别人那里看来的。我亲测有效,而且非常好用省心
在这里插入图片描述
这种方法如果要去理解,学习成本可能就稍微有些高了,我并没有学习理解。

优点;
1)所有工程通用。直接拷贝进去就用,什么也不用核实,也不需要核对axf文件的相对位置(afx文件在哪自动获取,bin文件就生成在同一个文件夹,二者同名。
2)out中的配置也可以随便改了,因为这里是自动获取的。

缺点;
1)感觉比较高级,没法测试是否之前老版本的mdk能这么使用不(因为我没有老版本的环境了)。

【建议】
1)能用第二种就用第二种,不能用就用第一种。
2)看了我第一种分析的话可以留意打印信息,有用(知道是什么意思,去哪找bin),如下图:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【 MDK keil5 生成 .hex文件 .bin文件 stm32】 的相关文章

  • 如何将单独的 int 值转换为十六进制字节数组

    我需要做一些 对我来说新的 int hex byte 工作 并且我正在努力使其正确 另一端的 tcp 服务器需要 Little Endian 我需要发送一个由十六进制值组成的字节数组 6000需要发送为 0x70 0x17 19需要发送为
  • ruby 中最短的 hex2bin?

    在 ruby 中将十六进制字符串转换为二进制字符串的最短方法是什么 例如 class def hex2bin end end AB12345678 hex2bin class String def hex2bin scan map x x
  • C# 将字符转换为字节(十六进制表示)

    这似乎是一个简单的问题 但我无法弄清楚 我需要转换这个字符 lt 以字节 十六进制表示 表示 但如果我使用 byte b Convert ToByte lt i get 60 十进制表示 代替3c 60 0x3C 你已经有了正确的答案 但你
  • 使用 Java 将十六进制转储的字符串表示形式转换为字节数组?

    我正在寻找一种将表示十六进制值的长字符串 来自转储 转换为字节数组的方法 我无法比发帖者更好地表达它同样的问题在这里 http www experts exchange com Programming Programming Languag
  • 解构神奇宝贝故障?

    如果这是问这个问题的错误地方 我深表歉意 我认为这肯定与编程相关 但如果这属于其他网站 请告诉我 我从小就玩神奇宝贝红和蓝 这些游戏非常有趣 但因存在许多可利用的故障而臭名昭著 例如 请参阅这个游戏的荒谬的速通 http www youtu
  • 将十六进制字符串解析为 int 值时出现意外的 NumberFormatException

    我想解析包含 8 个十六进制数字 4 个字节 的字符串 但出现 NumberFormatException 这里有什么问题吗 assertThat Integer parseInt FFFF4C6A 16 is 0xFFFF4C6A 您的数
  • 创建ECDSA公钥给定曲线和公共点?

    我正在努力从公钥的字符串表示形式创建 ECDSA 公钥 即 string devicePublicKey 86FB5EB3CA0507226BE7197058B9EC041D3A3758D9D9C91902ACA3391F4E58AEF13
  • 十六进制字符串到文本的转换 - swift 3

    我正在尝试将十六进制字符串转换为文本 这就是我所拥有的 Str to Hex func strToHex text String gt String let hexString text data using utf8 map String
  • 改变 #RGB 颜色的饱和度:这里缺少什么?

    下面是亮度 饱和度改变程序的概念brightness and saturation function brightness colorstr steps return sprintf 02x 02x 02x r g b function s
  • java中两个十六进制值相减或相加的方法

    有没有一种方法可以计算两个十六进制值而不将其转换为int 例如 String sHex f7c0 String bHex 040000000 十六进制值是整数 只是以十六进制而不是十进制表示 你就不能这样做吗 int sHex 0xf7c0
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 操作码的十六进制值

    我创建了一个非常简单的汇编程序 可以在 DOS 中打印字母 a 我在十六进制编辑器中打开它 结果是这样的 汇编代码 mov ah 2 mov dx a int 21h 十六进制代码 B4 02 B2 61 CD 21 我想了解它是如何生成的
  • 如何去掉 CR (^M) 并保留 LF (^J) 字符?

    我正在尝试使用 Hexl 模式手动从文本文件中删除一些特殊字符 但不知道如何在 Hexl 模式下删除任何内容 我真正想要的是删除回车符并保留换行符 Hexl 模式是执行此操作的正确方法吗 无需寻找替代 就用吧 M x delete trai
  • C 中的十六进制到字符数组

    Given a string of hex values i e e g 0011223344 so that s 0x00 0x11 etc 如何将这些值添加到 char 数组 相当于说 char array 4 0x00 0x11 您无
  • QSpinBox 具有用于十六进制输入的 Unsigned Int

    这里写了很多关于 QSpinBox 使用 int 作为其数据类型的限制的问题 人们通常希望显示更大的数字 就我而言 我希望能够以十六进制显示无符号 32 位整数 这意味着我希望我的范围为 0x0 0xFFFFFFFF 正常的 QSpinBo
  • 如何为十六进制颜色字符串创建独立类型?

    我正在尝试在 TypeScript 中创建一个独立类型 可用于将单个有效的十六进制颜色代码表示为完全类型安全的字符串 我的尝试如下 但由于实际上不是独立类型而未能实现 而这正是我希望实现的目标 type HexDigit
  • 如何将十进制整数转换为十六进制整数? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions cout lt
  • 使用 R 读取和转换二进制原始数据

    我有一个file https drive google com file d 0BxMpk0nhnJy6SFhxd2xuMzJYYlk edit usp sharing其中包含原始 二进制数据和 ascii 它包含一个时间戳和一个代表速度的
  • printf() 格式化十六进制

    为什么当将十六进制数字打印为带前导零的 8 位数字时 08X not显示相同的结果0x 08X 当我尝试使用前者时 08格式化标志已被删除 并且它不适用于仅8 The 部分给你一个0x在输出字符串中 这0和x计算您在列表中列出的 8 个字符
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str

随机推荐