![a89b75a37da5bde27ea3312d6c0a7cfe.png](https://i-blog.csdnimg.cn/blog_migrate/b9f94e792b2e02d03139940b16afef91.png)
什么是IAP?
IAP
是In Application Programming
的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。
在重新编程过程中可以使用任意类型的通信协议,如UART、I2S、SPI等。这篇笔记分享的是使用UART方式IAP。
串口IAP实验
先理一理流程(本实验是以STM32F103ZET6
为例):
1、实验说明
做这个实验需要准备两个keil
工程,一个工程用于编写IAP程序,另一个工程用于编写我们的应用程序(要实现某些功能的程序),这里我们以一个点灯程序为例。最终,两份工程编译出来的可执行文件都需要烧写到芯片的FLASH
中。只不过需要烧写到不同的地址,简单的示意图如下:
![3f0520d1a99f1cb6a584e51ed957664b.png](https://i-blog.csdnimg.cn/blog_migrate/01a80944766097ca40230d4be26183f4.jpeg)
这里,使用的STM32的型号为STM32F103ZET6,其FLASH大小是512KB,0x08000000为其FLASH被映射的地址,程序被烧写到的就是这个地址。此处,我们的IAP程序烧写到这个地址,根据IAP程序的大小,我们在keil里可以设置合适的IAP结束地址。
注意:在没有IAP程序的情况下,0x08000000这个地址就是应用程序烧写的地址。
2、工程说明
本实验用到的两个工程可按照文末的方式获取,其中IAP工程移植至ST官方例程。下面对两个工程进行简单的说明
IAP工程:
(1)需要在target
选项卡里设置我们IAP程序的起始地址与大小,如:
![bd1c654932de76e4f3facf7ad1bfa92d.png](https://i-blog.csdnimg.cn/blog_migrate/ea34fa67c358eb5af55f3bcd5a64c58e.jpeg)
这里我们的IAP程序起始地址设为0x08000000,大小设为0x3000,即IAP所能用的FLASH空间为12KB。其中IAP所能占的占空间的大小可根据IAP的实际大小进行修改。
(2)需要修改程序中我们需要跳转到的应用程序的地址(即IAP程序的结束地址):
![dfd25e14d7f0b500c3b3ab3c4cf98a98.png](https://i-blog.csdnimg.cn/blog_migrate/c56ac63e0430135888ddfa85ad5340ca.jpeg)