stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx

上传人:b****2 文档编号:5721841 上传时间:2023-05-05 格式:DOCX 页数:11 大小:471.90KB
下载 相关 举报
stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx_第1页
第1页 / 共11页
stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx_第2页
第2页 / 共11页
stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx_第3页
第3页 / 共11页
stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx_第4页
第4页 / 共11页
stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx_第5页
第5页 / 共11页
stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx_第6页
第6页 / 共11页
stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx_第7页
第7页 / 共11页
stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx_第8页
第8页 / 共11页
stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx_第9页
第9页 / 共11页
stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx_第10页
第10页 / 共11页
stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx

《stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx(11页珍藏版)》请在冰点文库上搜索。

stm32 IAP + APP 双剑合一HEXWord格式文档下载.docx

(2)IAP先烧写进flash的0x08000000开始位置, 

APP烧写到flash 

的0x08003000开始的地方;

之后通过我上一篇博文的IAP程序的文件读出功能读取flash上的数据读到一个.bin文件上;

我们先来详细分析“方法一”的操作:

1.我们设置编译IAP程序的编译器(如图),这个设置意思是把IAP程序下载到flash的 

0x08000000开头的位置,然后编译程序

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

用notepad++ 

或者UltraEdit打开 

IAP的.hex文件 

和APP的.hex文件, 

(顺便问一下.hex文件格式你会看吗?

hex文件格式:

(1)以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)

(2)在HEX文件里面,每一行代表一个记录。

记录的基本格式为:

冒号

本行数据长度

本行数据起始地址

数据类型

数据

校验码

1byte

2bytes

nbyte

第一个字节 

表示本行数据的长度;

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

第四字节表示数据类型,数据类型有:

0x00、0x01、0x02、0x03、0x04、0x05。

'

00'

DataRrecord:

用来记录数据,HEX文件的大部分记录都是数据记录

01'

EndofFileRecord:

用来标识文件结束,放在文件的最后,标识HEX文件的结尾

02'

ExtendedSegmentAddressRecord:

用来标识扩展段地址的记录

03'

StartSegmentAddressRecord:

开始段地址记录

04'

ExtendedLinearAddressRecord:

用来标识扩展线性地址的记录

05'

StartLinearAddressRecord:

开始线性地址记录

然后是数据,最后一个字节 

为校验和。

校验和的算法为:

计算校验和前所有16进制码的累加和(不计进位),检验和 

=0x100- 

累加和

打开.hex内容如下:

(中间部分数据略去)

[plain] 

viewplaincopy

1.<

strong>

:

020000040800F2 

2.:

10000000B80B00207D250008850300088703000841<

/strong>

3.:

100010009B0300089F030008A303000800000000E2 

4.:

10002000000000000000000000000000A70300081E 

5.:

10003000A903000800000000AB030008AD0300089E 

6.。

7.。

8.。

9.:

102B40000400000000000000000000000000000081 

10.:

102B50000000000000000000000000000000000075 

11.:

102B6000010203040102030406070809020406081F 

12.:

102B700000366E01000000000000000001020304A6 

13.:

042B80000607080933 

14.<

0400000508000121CD 

15.:

00000001FF<

先分析第一条语句----“:

020000 

040800 

F2”

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

[plain]viewplaincopy

1. 

02

0000

04

0800

F2

在上面的数据类型后2种记录(04,05)都是用来提供地址信息的。

每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。

对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。

以我们的语句为例:

第1条记录的长度为02,LOADOFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。

数据为0008,校验和为F2。

从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为(0x0800<

<

16)=0x08000000 

后面的数据记录都以这个地址为基地址。

第二条语句----“:

10000000B80B00207D250008850300088703000841”

10

00

B80B00207D2500088503000887030008

41

第2条记录的长度为10(0x10=16字节),LOADOFFSET为0000,RECTYPE为00('

用来记录数据,HEX文件的大部分记录都是数据记录),数据为B80B00207D2500088503000887030008 

校验码为41;

此时基地址为:

0x08000000 

加上偏移地址:

0x0000 

这条记录的16个字节的数据的起始地址为:

0x0800000+0x0000=0x08000000

第3条语句----“:

0400000508000121CD”

05

08000121

CD

记录的长度为04,LOADOFFSET为0000,RECTYPE为05,此时,EIP寄存器里存放的地址:

0x08000121;

即IP指向下一个要执行的指令所在地址,我们来看一下IAP工程list目录下的.map文件,其中第393行处如图:

(看到没?

0x08000121值main函数的入口地址)

EIP是32位机的指令寄存器, 

IP是指令寄存器,存放当前指令的下一条指令的地址。

CPU该执行哪条指令就是通过IP来指示的

上图参考hex数据文档:

或 

第4条语句---“:

00000001FF” 

(每一个.hex文件的最后一行都是固定为这个内容)

01

FF

记录的长度为00,LOADOFFSET为0000,RECTYPE为01 

(01'

用来标识文件结束,放在文件的最后,标识HEX文件的结尾)

三、iap和app 

的.hex文件结合

操作1:

设置编译IAP程序的编译器(如图),这个设置意思是把IAP程序下载到flash的 

0x08000000开头的位置,然后编译程序,生产.hex文件;

操作2:

设置编译APP程序的编译器(如图),这个设置意思是把APP程序下载到flash的 

0x08003000开头的位置,然后编译程序,生产.hex文件;

操作3:

和APP的.hex文件

把IAP的.hex最后一句结束语句去掉(即:

删除:

00000001FF)

把APP的.hex全部内容拷贝复制到刚才删掉结束语句的IAP的.hex后面(如图)

原来第701行为 

00000001FF的结束语句

操作4:

把两个.hex合成的.hex文件重新命名,烧写到0x08000000开始位置的地址即可;

这里把合成的.hex文件上传到我的资源:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2