| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32的烧录和Hex/bin烧录文件解析 -> 正文阅读 |
|
[嵌入式]STM32的烧录和Hex/bin烧录文件解析 |
一、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)。这个工具大概作用总结如下:
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字节。
? ? ? ?下面是一个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,从而实现不同的用途。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 6:37:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |