浅析STM32的hex文件
扫描二维码
随时随地手机看文章
前段时间需要用到BIN文件 随便把HEX文件也了解了一下 参考查阅了一些网上资料,如有雷同除了巧合还有借鉴参考。。。
正题:HEX文件格式如下
<0x3a>[数据长度1Byte][数据地址2Byte][数据类型1Byte][数据nByte][校验1Byte]<0x0d><0x0a>
分析下面具体例子
:020000040800F2
: 这个就是<0x3a>,也就是冒号
02 这个就是说明这行数据区的数据内容长度,也就是数据内容为两个字节在后面的<0800>那里
0000 这个是数据要送往的地址 要看具体数据类型
04 解释整行数据的数据类型,主要有这几种
'00' Data Record 数据
'01' End of File Record 文件结束标志
'02' Extended Segment Address Record 延伸段地址
'03' Start Segment Address Record 起始延伸地址
'04' Extended Linear Address Record 扩展线性地址 也就是基地址
'05' Start Linear Address Record 程序起始地址也就是程序入口地址(main)
0800 这个就是基地址(0x0800<<16)
F2 是数据校验和
<0x0d><0x0a>是换行符号
接下来分析这行数据
:1000000078050020450100084D0100084F01000857
10 就是数据区的数据长度 一共16个数据 78 05 00 20 45 01 00 08 4D 01 00 08 4F 01 00 08
0000 数据地址
00 数据类型说明
57 数据校验和
也就是说这行的意思就是说明数据区<78050020450100084D0100084F010008>应该被写到(0x0800<<16+0x0000)这个地址
再例如这行
:1000100051010008530100085501000800000000CC
这行数据行上面这行类似,意思是数据区<51010008530100085501000800000000>应该被写到(0x0800<<16+0x0010)这个地址
注意:因为STM32的数据存放是以小端格式放的所以10 00 应该被看成0x0010
在文件的末尾有这样的两行
:0400000508000131BD
:00000001FF
根据上面的方式分析
:0400000508000131BD 这个是解释程序的入口地址在0x08000131 这里不懂为何又不以小端格式写了,虽然这行数据不是传给MCU的
:00000001FF这个就是文件结束的标志了
HEX和BIN文件的区别也就是地址上的,BIN文件不带地址信息例如从上面的hex文件生成的BIN文件