首页 > 编程知识 正文

STM32固件库使用手册,bin文件转换为c语言文件

时间:2023-05-05 00:28:20 阅读:156396 作者:718

首先,让我们详细分析一下“方法1”的操作。

在flash的0x0800 0000的开头位置设置编译器,意味着要下载程序并编译程序()

2 .编译程序后,在项目目录的output文件夹中找到编译后生产的. hex文件

在notepad或UltraEdit中打开程序. hex文件

hex文件格式:

(1)以行为单位,每行以冒号开始,内容全部为十六进制代码(用ascii码表示) )。

)2)在HEX文件中,每行表示一个记录。 的基本格式如下。

冒号

本行数据长度

本行数据开头地址

数据类型

数据

校验码

1 byte

2字节

1 byte

n byte

1 byte

第一个字节表示行中数据的长度。

第2、3字节表示本行数据的起始地址;

第4字节表示数据类型,数据类型为0x00、0x01、0x02、0x03、0x04、0x05。

' 00' Data Rrecord :用于记录数据,HEX文件中的大部分记录都是数据记录

' 01' End of File Record:用于标识文件的结尾,位于文件的结尾,用于标识HEX文件的结尾

' 02 '用于标识扩展段地址的记录

' 03 ' startsegmentaddressrecord :段地址记录开始

' 04 ' extendedlinearaddressrecord :用于标识扩展线性地址的记录

' 05 '开始记录startlinearaddressrecord :线性地址

然后在数据中,最后一个字节是校验和。

校验和算法是计算校验和之前所有十六进制代码的累积和(无进位),校验和=0x100 -累积和

.打开hex的内容如下。 (中间部分的数据省略) )。

:020000040800F2

:1000000 b 80 b 00207 d 250008850300088703000841

:100010009 b 0300089 f 030008 a 303000800000 e 2

:1000200000000000000000000000000000000000000000000 a 703000000000000000000000000000 a

:10003000 a 9030008000000 ab 030008 ad 0300089 e。。

:102 b 4000040000000000000000000000000081

:102 b 50000000000000075

:102 b 6000010203040102030406070809020406081 f

:102 b 7000000366 e 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

:042B80000607080933

:0400000508000121CD

:00000001FF

首先分析第一句---- “:02 0000 04 0800 F2”

冒号

本行数据长度

行数据起始地址(偏移地址) ) )。

数据类型

数据

校验码

1 byte

2字节

1 byte

n byte

1 byte

02

0000

04

0800

F2

上面数据类型之后的两种记录(04,05 )用于提供地址信息。 每次碰到这两个记录时,都可以根据记录计算出一个“基”地址。 对于后面的数据记录,计算地址时将基于这些“基本”地址。 以我们的话为例:

第一条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,表示该记录是扩展段地址记录。 数据为0800,校验和为F2。 根据该记录的长度和数据,[0x080016]=0x08000000,以后的数据记录可以计算以该地址为基地址的基地址。

第二条文--- " 336010000000 b 80 b 00207 d 250008850300088703000841 "

冒号

本行数据长度

行数据起始地址(偏移地址) ) )。

数据类型

数据

校验码

1 byte

2字节

1 byte

n byte

1 byte

:

10

0000

00

B 80 b 00207 d 2500088503000887030008

41

第一

2

记录的长度为

10(0x10=16字节) ) ) )。

负载偏移

,来定义您自己的自订外观

0000

RECTYPE

,来定义您自己的自订外观

00(00 ) datarrecord :用于记录数据,HEX文件的大部分记录是数据记录。)

,数据为b 80 b 00207 d 2500088503000887030008

校验码为41; 此时基地址偏移为0x0800 0000的地址:0x0000这一记录的16字节的数据的开头地址为0x0800000 0x0000=0x0800 0000

第3条语句----“:0400000508000121CD”

冒号

本行数据长度

行数据起始地址(偏移地址) ) )。

数据类型

数据

校验码

1 byte

2字节

1 byte

n byte

1 byte

:

04

0000

05

08000121

CD

记录的长度为

04

负载偏移

,来定义您自己的自订外观

0000

RECTYPE

,来定义您自己的自订外观

05、此时,存储在EIP寄存器中的地址:0x0800 0121; 也就是说,IP指向包含要执行的下一个命令的地址。 让我们看看IAP工程list目录下的. map文件。 第393行应为: (

没有吗?0x0800 0121值main函数的入口地址)

EIP是32位机器的指令寄存器,IP是指令寄存器,用于存储当前指令的下一条指令的地址。 IP指示CPU应该执行哪个指令

上图请参考hex数据文档。 http://pages.interlog.com/~ sp eff/useful info/hexfrmt.pdf或http://microsym.com/editor/asets/Intel hex

第4条---“:00000001FF”(每个. hex文件的最后一行固定在此内容中) )。

冒号

本行数据长度

行数据起始地址(偏移地址) ) )。

数据类型

数据

校验码

1 byte

2字节

1 byte

n byte

1 byte

:

00

0000

01

FF

(每个. hex文件的最后一行固定为此内容。)

记录的长度为

00

负载偏移

,来定义您自己的自订外观

0000

RECTYPE

,来定义您自己的自订外观

01

01' End of File Record:用于标识文件的结尾,位于文件的结尾,用于标识HEX文件的结尾。)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。