一、STM32的烧录

1. 用IDE工具烧录

可以配置IAR或Keil,用IDE下载。硬件工具需要使用ST-Link(分为SWD或Jtag方式,SWD连线少,比较常用于调试)或J-Link连接到板子的相应引脚(详见Jtag引脚定义)。需要注意的是ST-Link烧录盒分为隔离和非隔离,如果板子必须断电烧录,那么用非隔离的烧录(这个时候烧录器也会带电让STM32运行,某些DSP需要单独供电),如果板子需要上电烧录或在线调试,一般使用带隔离的ST-Link或JLink。

2. 用ST-LINK Utility工具烧录

下载HEX文件,设置好地址后,可以下载app(如果是STM32,那么起始地址一般是0x0800xxxx)和bootloader(如果是STM32,那么起始地址一般是0x08000000)。这个工具大概作用总结如下:

  • 擦除flash相应区域
  • 根据地址设置,可以分别烧录app或bootloader到flash,如果app和bootloader合成为一个hex,那么可以把地址设置为0x08000000,一次烧录app和bootloader到flash的两个区域。
  • 可以作为量产PCBA板的烧录工具
  • 如果板子上STM32的flash没有被添加保护,可以用它读出flash里面的所有数据,然后生成一个hex文件。
  • 可以读取STM32芯片的型号、ID、版本等信息
  • 此软件包含了ST-Link驱动,安装了它,像Keil 或IAR在线调试下载等就不需要额外安装驱动了。

3. 在线升级

这种方式只能更新app,不能更新bootloader,具体方法是在程序运行的时候,如果在线升级被触发,那么把一个变量设置为烧录模式(这个变量存放于ram某个位置,一般比较末尾的位置,并在代码中使用相应关键字限定次变量在内存中不会被设置为0,即使STM32被复位)。然后不喂狗,让STM32复位进入bootloder,在bootloader代码中读取上面描述的ram地址的变量,决定进入烧录模式还是调到app入口地址处运行app程序。

二、Hex/bin烧录文件解析

1. Hex/bin文件如何生成

如果是IAR,那么可以在output 处设置选择生成hex还是bin文件。如果是Keil,生成Hex文件用同样的设置方法,但是生成bin文件需要借助相应工具。

2. Hex文件解析

Intel HEX 文件是由一行行符合Intel HEX 文件格式的文本所 构 成的ASCII 文本文件。在Intel HEX 文件中,每一行包含一 个 HEX 记录 。 这 些 记录 由 对应 机器 语 言 码 和/ 或常量 数 据的十六 进 制 编码数 字 组 成。Intel HEX 文件通常用于 传输将 被存于ROM 或者EPROM 中的程序和 数 据。大多 数 EPROM 编 程器或模 拟器使用Intel HEX 文件。 这里说的Hex文件单指STM32的固件,以.hex为后缀,比如下面为部分Hex文件的内容:

图一

整个文件以行为单位,每一行为一个记录。每行以冒号开头,内容全部为16进制码,2个 ASCII码字符表示1个Hex字节。

1、每行以冒号开头,":" (0X3a),每一行结尾都是以回车换行结尾((0x0D,0x0A)
2、第1字节0x02表示数据区的字节个数,用ASCII表示就是4个ASCII字符。
3、第2、3字节0x0000 表示偏移地址或无用填0
4、第4字节0x04表示本行记录的类型
'00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
'01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾
'02' Extended Segment Address Record: 用来标识扩展段地址的记录
'03' Start Segment Address Record: 段地址 STM32不用
'04' Extended Linear Address Record: 用来标识扩展线性地址
'05' Start Linear Address Record: 程序启动运行的地址
5、5-6字节表示数据区
6、最后1个字节是校验字节。所有16进制码的累加和(不计进位),检验和 = 0x100 - 累加和如何用notepad++打开hex文件,如果每一个记录的最后一个字节即校验和不在notepad中显示为绿色,那么代表校验失败。

下面是一个Hex文件的例子,注意如果hex文件比较小,可能没有第二个04类型的行用来标识第二个扩展线性地址(如下图中的0x0806高地址)。

图二

另外,05类型的行虽然对烧录程序无用,但是它也表示了开始线性地址记录,意思应该就是第一个函数的入口地址,图一中05类型行的地址0x08000239即对应的HEX文件对应的map文件中如下入口地址,也就是系统复位后,此函数位于__main函数之后(__main函数初始化堆栈,把未初始化的全局变量或静态变量清零,调用main函数等)

3.  bin文件解析

BIN文件只有纯粹的数据(代码)信息,即图一Hex文件中黑色数据区(没有地址、校验等信息)。它并不包含地址信息,所以烧写BIN时就需要指定烧写地址。由于不带地址等信息,所以比上面描述的hex文件内存占用小一些。

除开了上面描述的在线烧录bin文件外(bootloader中代码处理,一般上位机使用ymoden协议),还可以使用JLinkARM工具JFlash烧录bin文件到STM32。

下图是bin文件用ultraedit打开,由于里面只包含程序数据,没有地址校验等信息,其内容对应图一中数据部分,可以与图一数据部分的头尾对比,会发现是一模一样的。

图三

另外需要注意的是,图三种最左列的地址偏移和冒号都是ultraedit加进去的,这个偏移地址与图一中的偏移地址也是一一对应的。

如果上位机需要解析bin文件,那么可以遵循这些特性,比如bin文件中除开最后一行外,其他行字节熟练一般都为16个字节,而且行与行之间地址偏移0x10,根据地址偏移(STM32的flash起始地址一般为0x08000000)可以找到具体地址对应的数据。

比如两个bin文件,我们可以在相同特定地址处存放不同内容(比如icf文件指定某个地址段section,然后在代码中用@section的方式指定变量存放绝对地址),其他所有地址内容都相同,通过这样的方式,让上位机可以区分开这两个bin,从而实现不同的用途。

STM32的烧录和Hex/bin烧录文件解析相关推荐

  1. STM32的烧录和Hex/bin烧录文件解析、烧录文件是被如何存储到MCU中的?

    什么是hex文件 以*.hex为后缀的文件我们称之为HEX文件.hex是intel规定的标准,hex的全称是Intel HEX,此类文件通常用于传输将被存于ROM或EEPROM中的程序和数据.是由一行 ...

  2. J-Flash的Hex/Bin文件的烧录

    一.安装JLink 二.打开软件J-Flash 三.软件设置 1.设置软件工程(3种方法) 2.文件烧录 一.安装JLink 官网下载地址 二.打开软件J-Flash 三.软件设置 1.设置软件工程( ...

  3. 烧录文件bin、Motorola、hex格式介绍及解析

    微处理器一般又称单片机,其可以根据人们编写的代码执行相关的逻辑操作.程序员将产品的逻辑操作抽象为C代码,然后通过编译器的编译和链接,生成微处理器可执行的机器码.通常编译器封装的不带调试信息的机器码有3 ...

  4. STM32使用J-LINK下载HEX文件

    使用J-LINK仿真器下载HEX文件到STM32芯片 工具/原料 J-Flash ARM 开发板 J-LINK仿真器 方法/步骤 打开"开始"-"所有程序"-S ...

  5. stm32烧录软件_stm32怎么烧录程序

    STM32烧录程序目前笔者知道的有三种:JLink ,Ulink和串口烧录,使用工具分别为:JLink,ULink以及USB转TTL线. ULink 烧录程序 在安装MDK过程中,会有提示是否安装驱动 ...

  6. BIN,S19,M0T,SREC,HEX文件解析;FileParse(一)之文件详解

    简介 一.摘要 1.描述 2.关键字 二.为什么要文件解析 三.BIN文件格式 四.S19,M0T,SREC文件格式 五.HEX文件格式 六.源码下载 七.其他 八.参考 一.摘要 1.描述 本文主要 ...

  7. BIN,S19,M0T,SREC,HEX文件解析;FileParse(二)之源码解析

    简介 一.摘要 1.描述 2.关键字 二.为何选择C#解析 三.BIN文件解析 四.BIN文件生成 五.S19,M0T,SREC文件解析 六.S19,M0T,SREC文件生成 七.HEX文件解析 八. ...

  8. 基于STM32的STM8脱机编程器 烧录器

    基于STM32的STM8脱机编程器 烧录器 下载器 设计资料 编程器源码id=589289608092&

  9. 龙芯LS1B处理器使用EJTAG烧录程序步骤,烧录u-boot.bin作为测试(linux系统)

    板卡:使用ls1b处理器作为cpu的板卡 系统:fedora系统 驱动:ejtag-debug-v3.25.19.tar.gz 时间:2021年12月22日 经过实测,下面的步骤可以在linux系统下 ...

最新文章

  1. 关于计算机读研的小建议
  2. STL源码剖析---list
  3. 你还在问android横竖屏切换的生命周期?
  4. 关于小程序·云开发峰会,你想get的干货全在这了!
  5. python三元表达式
  6. LiveJournal发展历程
  7. VC中为对话框添加背景图片
  8. Python之异常追踪模块:traceback
  9. Jquery Datatable 数据填充报错:requested unknown parameter ‘XXX‘ for row xx, column xx 解决方法
  10. c语言调用sqlite
  11. Linux学习总结(36)——创建、复制、剪切、重命名、清空和删除文件夹的命令
  12. C++11 随机数生成
  13. Input.GetAxis(Mouse ScrollWheel)控制摄像机视野缩放
  14. ubuntu复制文件到另一个文件夹_Excel VBA之FSO-2.2文件夹的复制
  15. 在 Mac 上用输入法如何以另一种语言键入?
  16. Android View 如何测量
  17. STM32在线仿真出现是循环,使用mcuisp下载程序却可以运行,JTAG下载程序可以下载成功,却没有任何动作!
  18. 搞懂 PEM、ANS、PFX、P12、p8、CER、X509 等证书相关文件格式 后缀
  19. OpenGL学习笔记:1、配置GLFW+GLAD+SOIL+GLM+ASSIMP
  20. 麦吉尔大学 计算机科学和阿尔伯特,加拿大低龄留学-阿尔伯特学院-Albert College...

热门文章

  1. 基于微信小程序在线考试系统,利用微信小程序实现在线考试的设想开发,在线答题考试小程序开发分享
  2. Photoshop CS6 基本知识3~滤镜
  3. 今日头条怎么能快速吸粉,今日头条自媒体怎么赚钱
  4. 01-26 国家药监总局--官网上公司的详情页面上的信息爬取
  5. python数据可视化之json格式数据处理案例:世界人口地图
  6. linux中如何加配置文件,Linux修改配置文件的命令是什么
  7. python:统计数字字符个数
  8. iOS数据搜索技巧之【利用正则表达式进行匹配查找数据 】1、使用正则表达式对聊天记录的关键词进行监控 2、NSPredicate在正则表达式的应用
  9. mysql sles11_mysql SUSE SLES11 安装配置笔记
  10. 物联网LPWA通信技术(2):Lora通信特点及主要场景应用