昨天IAP升级差点翻水水,具体过程容我细细道来。。。
单片机在线升级应该是IAP+APP。
怎么做STM32F030的IAP程序我就简单介绍一下吧(其他大佬应该有详细的,我只说点我自己遇到的问题)。
先介绍一下我理解的IAP 的概念(不知道对不对,希望大家补充)
我理解中IAP升级就是把两个程序放到Flash的两个地方,启动完IAP之后跳转到APP,APP也要是一个完整的程序,中断向量,堆栈指针啥的要全。我就不放图了,懒,也不想盗别家的图。
IAP启动,各种相关初始化完成,检测是否有符合规则的数据包,有的话接收下载,没的话就跳转到Flash中的APP程序区。
STM32F030只不过没有其他STM32的VTOR寄存器,所以需要将中断向量表先复制到RAM中,之后再设置芯片从RAM启动,本来芯片是从Flash启动的,但是这不没有VTOR寄存器存中断向量表么,所以就这么干,通过SYSCFG_MemoryRemapConfig库函数实现,其实也就是弄个寄存器的事情,当然了,懒得看手册就直接用这个函数就行了。
接下来就是要注意的:
我用的STM32F030C8T6,Flash还好有64K,但是RAM只有8K,这就难受了,要改之前写好的的IAP程序,因为之前升级都是2K一次下载到Flash中,可以一个接收数据用的uint8_t flash_buf[2048],一个CRC检验的uint8_t flash_checkbuf[2048];,再加一个下载到程序的uint32_t iapbuf[512],这就6k的RAM了啊(之前用在F407上的),