首先明确几个基础概念:
下图的start是程序存放在单片机内部flash的起始地址,size是你给你程序留的flash大小。
一般我们会去找对应map文件,可以查看程序占用多少kb,由下图可见我们的程序占用flash的空间为8.14kb。因此起码要在flash中给8.14kb的存储空间。
2:有了上述概念后我们再说一下IAP目的和操作流程。
如图:摘自百度百科
简而言之,IAP就是给客户用的。
IAP需要准备两部分程序,一个是IAP启动程序,一个是我们项目APP程序。IAP启动程序用于启动项目APP程序。两个程序都要放在flash上不同地方。程序上电复位后都是默认运行我们的IAP启动程序,至于是否更新和运行我们的APP程序则取决于我们后续写的代码。
1:首先准备项目APP程序。将程序的起始地址和尺寸修改如下:
代表程序起始地址为0x8010000,尺寸大小给了0XF0000,也就是960Kb。
然后在程序开头加上这行代码:
SCB->VTOR = FLASH_BASE | (0x10000 & (uint32_t)0xFFFFFE00); //IAP
代码中的FLASH_BASE和0x10000分别与上上图中标准的起始地址和偏移量对应
2:在下图位置按标号顺序操作添加如下指令并给Run#1打勾:
fromelf.exe --bin -o "$L@L.bin" "#L"
3按上述操作后,编译文件,生成了bin文件
再去工程文件夹下找到对应的bin文件
准备好APP的bin文件后,再来准备IAP启动文件:
1:IAP启动程序的大小通过找.map文件查看程序占用flash大小,从图可得只有8KB
因此IAP程序的设置如下:给启动文件64kb空间
然后代码部分如下:程序上电后等待上位机更新,如果等待6s没有更新指令,则执行旧的flash里面的项目APP程序。这里的起始地址加size要等于项目APP程序的起始地址0x8010000。项目APP的size则可以自行设定。
STM32F412VGT6的启动文件程序IAP已经上传百度云。
链接:https://pan.baidu.com/s/1FslsWV7I8Z3NXtkfoea54A 提取码:f68p hi,这是我用百度网盘分享的内容~复制这段内容打开「百度网盘」APP即可获取