查看原文
其他

IAP代码与APP代码合并烧录示例

Miler 茶话MCU 2022-09-10


我们使用STM32芯片开发产品时,有时需要自带升级功能。因此,开发时除了需要准备基本的应用代码外,还得准备一套升级代码。通常称前者为IAP代码或BOOT代码,后者称之为APP代码。一般来讲,这两套代码基于两个工程完成并生成相应的执行文件,首次烧录时往往希望两套代码合并在一起进行烧录,这样方便、省事。


这里就该需求,利用ST提供的工具软件STLINKUtility来示范下合并过程。


因为只是模拟两个不同地址区的文件合并,所以这里的两个工程代码几乎一样,也很简单,只是存放的地址空间不同。


我使用的开发板是STM32L476RGNucleo板。代码功能都是接受按键,每收到1次按键动作,就打印出目前所在工作区。当收到3次按键后则从当前工作区跳往另一工作区。【文中图片可点击放大查



两个工程的内存及中断矢量安排如下两幅图:


除了上面的配置差异外,两个工程的代码几乎一样,只是输出提示有别。



这里使用的是IAR IDE环境,基于上面两个工程分别生成IAP.HEXAPP.HEX两个执行文件。


然后打开STLINKUtility工具,连接开发板,将芯片擦除干净。接着,开始烧录,先烧IAP.hex文件。【其实先烧录谁无所谓】



之后,将当前IAP.HEX文件关闭,再调APP.hex文件进行烧录。注意这次烧录时选择跳过FLASH的擦除操作,因为刚开始已经全擦,而且前面已经写了IAP代码。


到此,两个工程的代码都写进芯片了。


现在,先在VIEW菜单里点击下Device Memory,然后在File菜单里选择文件另存操作。你选择HEX或BIN格式都可以。



使用BIN格式的话注意烧录时给出正确的起始地址。这个另存出来的文件就是合并过的文件了,可以直接拿来烧录。


下面是我基于合并文件烧录的测试结果。跟实际预期效果一样,每按键1次做1次输出,3次后跳转,这样往返操作。



操作很简单,也很方便。之前偶尔也会有人问起这个话题。这次整理本文做验证时,结果在做合并时总是失败。因为之前有验证过,坚信这个操作是可行的。后来怀疑可能是我电脑系统方面的原因,换成家里那台电脑测试起来就很顺畅,来回验证多次都正常。看来,我那台电脑该重装或换掉了。

===========================

往期话题阅读链接【点击阅读】:

1、STM32启动文件的几个小问题

2、STM32应用笔记分类汇总

3、单片机调试过程中的第3只眼

4、STM32G0系列ADC扫描序列模式解读

5、GPIO做输出还能作外部中断输入吗




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存