STM32三种烧录方式
ISP:In System Programming(在系统编程)
执行芯片厂商的BootLoader程序进入ISP模式,进入ISP模式后,用户可选择官方提供的烧录通信接口(如:串口),并配合ISP编程工具(如:FlyMCU)对闪存进行烧录。

ICP:In Circuit Programming(在线编程)
使用IDE并通过JTAG/SWD接口对闪存进行烧录
IAP:In Application Programming(在应用编程)
使用用户的应用程序(也称为BootLoader程序)对闪存进行烧录。该应用程序需要通过一种通信接口(如:IO口\USB…等)对闪存进行烧录(即把APP程序烧录到闪存)。
IAP通常被开发者用作远程升级的手段。
IAP应用原理介绍


程序正常运行过程

- 跳转到复位中断服务函数
- 跳转到main函数
- 发生中断时,会强制跳转到中断向量表
- 根据中断源,跳转到对应的中断服务函数
- 执行中断服务程序后,回到main函数原来的位置执行
加入IAP后程序运行过程

- 执行复位中断服务函数后,跳转到IAP程序main函数
- 执行IAP过程,跳转到APP中断向量表
- 跳转到APP的main函数
- 发生中断时,会强制跳转到地址为0x08000000的中断向量表
- 根据设置的中断向量表偏移量,跳转到APP对应的中断服务函数
- 执行中断服务函数后,回到main函数原来的位置执行
APP程序的生成步骤
- 设置APP程序的起始地址和存储空间大小
- 设置中断向量表偏移量:设置SCB->VTOR的值即可
- 设置MDK编译后运行fromelf.exe,生成.bin文件