前段时间需要用到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文件
关键字:STM32 hex文件
引用地址:
浅析STM32的hex文件
推荐阅读最新更新时间:2024-03-16 15:27
【话说定时器系列】之三:STM32定时器的信号触发与主从模式
本文介绍的 定时器的信号触发与主从模式 ,主要指通用定时器或高级定时器,不涉及基本定时器,因为基本定时器相对比较简单,对外无过多联络。 那对于STM32定时器而言,有哪些触发信号呢?这些信号来自何处?或流向哪里呢? 触发信号分两大类:触发输入信号【TRGI】,简单地讲就是从外部引入到本定时器的信号;另一类就是触发输出信号,即TRGO信号,它是定时器输出给其它定时器或外设的触发信号。 在STM32参考手册里文字描述部分,找不到一句完整的关于触发输入信号的描述文字,它主要把触发输入信号的概念融入进时钟源部分,倒是在从模式控制寄存器TIMX_SMCR的TS字段对定时器的触发输入信号有个系统的归纳。从数目上有讲一般可以多达8个
[单片机]
C语言在STM32中的内存分配
01前言 不说废话,先上示例代码 uint8_t num_byte ; uint32_t num_word; const uint32_t num_word_const = 0x1234; uint32_t *point_heap; int main(void) { uint8_t num_byte_stack; static uint8_t num_byte_static; point_heap = (uint32_t *)malloc(4); *point_heap = 0x3421; free(point_heap); num_byte_stack = 0x11; #pragma secti
[单片机]
stm32串口usart的使用
一、串口的定义 用来与外界交互数据。 二、usart的配置: 1、开启时钟。 stm32的usart1挂载在apb2上,USART2、usart3挂载在apb1上。 2、串口的基本配置。 void USART1_Configuration(void) { USART_InitTypeDef USART_InitStructure; USART_DeInit (USART1 ); USART_InitStructure .USART_BaudRate =9600; USART_InitStructure .USART_WordLength =USART_WordLength_8b ; USART_InitStructure .USA
[单片机]
STM32之TIMER定时器之间不同点
STM32F1系类有1~14一共14个定时器;具体型号不一样会有所不同。它适合多种用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较、PWM、嵌入死区时间的互补PWM等)。 使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。 高级控制定时器(TIM1和TIM8)和通用定时器(TIMx)是完全独立的,它们不共享任何资源。它们可以同步操作。 TIM6和TIME7是基本定时器,他们通常作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它 们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。 这2个定时器是互相独立的,不共享任何资源。
[单片机]
STM32单片机FSMC模块的应用
一、基本概念 1.与非总线复用的16位SRAM接口 FSMC配置 SRAM存储器和NOR闪存存储器共用相同的FSMC存储块,所用的协议依不同的存储器类型而有所不同。 控制SRAM存储器,FSMC应该具有下述功能: 使用或禁止地址/数据总线的复用功能。 选择所用的存储器类型:NOR闪存、SRAM或PSRAM。 定义外部存储器的数据总线宽度:8或16位。 使用或关闭扩展模式:扩展模式用于访问那些具有不同读写操作时序的存储器。 正如配置NOR闪存存储器一样,用户必须按照SRAM存储器的数据手册给出的时序数据,计算和设置下列参数: ADDSET:地址建立时间 ADDHOLD:地址保持时间 DATAST:数据建立时间 二、例程 1.
[单片机]
STM32学习之不同FLASH的芯片启动文件选择规则
F103ZET6的FLASH大小是512K,所以选择startup_stm32f10x_hd.s F103C8T6的FLASH大小是64K,所以选择startup_stm32f10x_md.s 移植需要注意的事项 从ZET6到C8T6,需要更改 1、启动文件 2、C++XU选项卡的 3、
[单片机]
stm32的IO 8种基本类型设置
GPIO_Mode_AIN //模拟输入 一般用作ADC等 GPIO_Mode_IN_FLOATING //浮空输入 可以用作按键 GPIO_Mode_IPD //下拉输入 GPIO_Mode_IPU //上垃输入 GPIO_Mode_Out_OD //开漏输出 GPIO_Mode_Out_PP //推挽输出 GPIO_Mode_AF_OD //复用开漏输出 GPIO_Mode_AF_PP //复用推挽输出 IO的输出类型设置主要还是查询芯片手册或者根据自己应用设置对应的类型。
[单片机]
STM32学习笔记——使用SysTick定时器做延时
开学了,无法再像假期一样能够一整天玩板了!好在这学期的课说少不少,说多也不多,每周也有十几大节。剩下的时间除去学生工作等一些七七八八的事情,间断着还是能看看教程玩玩板!越发发现《STM32菜鸟学习手册 啰嗦版》真是不错的入门教程,简单易懂。其他诸如《固件库手册》等等官方文件更是必不可少,可惜ST公司的网页找手册实在麻烦得很呐! 这两天一直在看有关于系统嘀嗒时钟SysTick的文件,但由于3.5版的固件库较2.0版的库,已经将SysTick相关的驱动函数移除,用户要使用SysTick就必须改为调用CMSIS中的函数,而网上大多数的例程(包括《菜鸟学习手册》)使用的都是2.0的库,以至于在学习中遇到许多问题,程序编译总会出现
[单片机]