1.简介
根据官网提供的串口升级IAP源码en.x-cube-iap-usart.zip,经修改后适用于F407系列芯片
2.运行环境
Windows10
STM32CubeMX
Version 6.11.0
STM32CubeIDE
Version 1.15.0
STM32F407ZET6 192KBytes Ram, 512KBytes Flash 168MHz Freq
3.基础知识
(1).什么是IAP?
IAP,即In Application Programming,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写。
(2).STM32程序烧在哪?
默认情况下,使用的是ST原厂的BootLoader程序。使用ST-Link烧写时,通过跳线Boot0=1, Boot1=0,按下复位键,从系统存储器启动BootLoader,程序下载完成后跳线Boot0=0,Boot1=x,STM32从Flash中启动。
IAP升级需要自己编写Boot程序和App程序,将Boot程序和App程序烧写到Flash。Boot程序先启动,然后引导App程序启动,通过更换不同版本的App程序达到升级应用程序的效果。
(3).Flash扇区分布
STM32F40x和F41x系列的Flash的扇区(Sector)分布是类似的,不同型号的Flash只是多几个扇区或者少几个扇区,up主用的STM32F407ZET6的Flash是512KB的,也就是最大寻址到Sector7 0x08060000 - 0x0806FFFF
4.BootLoader程序
BootLoader
可以理解为引导程序,它的主要作用是启动的App程序。换言之
,BootLoader
是一个程序,App
也是一个程序, 只要设置正确的栈顶指针Stack Pointer,都是可以独立运行的。
经验证,CubeIDE编译后最简单的Booloader程序略大于16KBytes小于32KBytes,因此划分Sector 0 和 Sector 1 作为BootLoader程序的烧写区。
5.App程序
App程序是用户编写的逻辑运行程序,用于执行业务逻辑,不赘述。
划分Sector 2 和 Sector 3作为App程序的烧写区。本文章使用的是Demo程序,编译后的bin文件比较小,约18KBytes,Sector2+Sector3 = 16K+16K = 32K,完全够用。根据程序需要可划分更大的扇区或者划分出App1(备份)和App2(升级)区
APP bin文件生成