STM32 IAP

1. IAP

IAP,即在应用编程。

IAP 是用户自己的程序在运行过程User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。

通常实现 IAP 功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一部分程序出厂后无法修改,除非返厂操作:

第一个程序功能(BootLoader):

1) 在开机时判断是否有应用代码,有的话进入应用代码部分执行。

2) 开机时没有应用代码,等待写入应用代码指令。

第二个项目代码功能(APP):

1) 执行正常的项目程序

2) 在接收到指令后进入第一部分程序通过接口进行项目代码升级或改进。

2. STM32正常程序运行流程

STM32F1 的内部闪存(FLASH)地址起始于 0X0800 0000,一般情况下,程序文件就从此 地址开始写入。此外 STM32F1 是基于 Cortex-M3 内核的微控制器,其内部通过一张“中断向 量表”来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成启动,而这张“中断向量表”的起始地址是 0x08000004,当中断来临,STM32F1的内部硬件机制亦会自动将 PC 指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断服务程序。

3. STM32实现IAP程序

1) 新程序必须在 IAP 程序之后的某个偏移量为 x(前面预留BootLoader程序使用控件) 的地址开始;

2) 必须将新程序的中断向量表相应的移动,移动的偏移量为 x(否则程序会跑飞);

3) 程序执行流程:

4. 程序中的配置方式

App中的配置方式

1) 设置app在flash中的开始地址和长度

2) 设置中断向量偏移(在main函数中配置)

3) 注意事项:

在程序跳转之前关闭打开的中断,否则一个程序打开中断,另一个没有对应的中断函数操作会发生错误。

对于F1系列的芯片大容量产品的FLASH主存储器每页大小为2K,而中容量和小容量的产品每页大小只有1K。