一种基于STM32的APP和BootLoader设计的方法

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u014421520/article/details/80373158

IAP(In Application Programming)即在应用编程, IAP 是用户自己的程序在运行过程中对User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。 通常实现 IAP 功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信方式(如 USB、 USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在 User Flash 中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:

1)检查是否需要对第二部分代码进行更新
2)如果不需要更新则转到 4)
3)执行更新操作
4)跳转到第二部分代码执行

第一部分代码必须通过其它手段,如 JTAG 或 ISP 烧入;第二部分代码可以使用第一部分代码 IAP 功能烧入,也可以和第一部分代码一起烧入,以后需要程序更新时再通过第一部分 IAP代码更新。我们将第一个项目代码称之为 Bootloader 程序,第二个项目代码称之为 APP 程序,他们存放在 STM32F4 FLASH 的不同地址范围,一般从最低地址区开始存放 Bootloader,紧跟其后的就是 APP 程序(注意,如果 FLASH 容量足够,是可以设计很多 APP 程序的,本章我们只讨论一个 APP 程序的情况)。 这样我们就是要实现 2 个程序: Bootloader 和 APP。 –节选自正点原子战舰开发板教程

在一般的工程应用中,我们都会给设计的程序预留升级功能,升级的方式可以是串口、网口、SPI、USB等等,只要是可以传输数据都可以用来升级用。那么这个时候我们就必须要设计一个BootLoader代码,这段代码有两个主要功能
1) 接受需要更新的文件,即APP代码,
2) 更新完成后跳转到APP程序。

通常,我们的APP代码在调试阶段时,使用正常的开发模式,即不更改中断向量表,当调试完成后,再更改中断向量表。

#ifdef WIFIUPDATA
    SCB->VTOR = 0x08000000 | 0x10000;       //0x08010000
#endif

然后编译生成.bin文件,最后通过BootLoader可以成功升级该固件到目标MCU中。

在工厂生产中,我们可以使用Jflash工具把已经烧录好的MCU的flash读取出来,然后制作生成.hex文件,最后直接把这份.hex文件发给工厂,这样出厂板子就带了BootLoader和APP了,后续也可以通过BootLoader升级APP。

猜你喜欢

转载自blog.csdn.net/u014421520/article/details/80373158