1、iap程序
1)接收程序
2)烧写到对应app地址
2、app程序
1.修改程序起始地址
2.修改中断向量表偏移量
app:软件复位函数
//在官方软件库的 core_cm3.h 文件里 直接提供了 系统复位的函数
void SoftReset(void)
{
__set_FAULTMASK(1); // 关闭所有中端
NVIC_SystemReset();// 复位
}
方式一:stm32 ram足够大的情况下使用ram来缓存新的程序 一般程序的bin文件大小只有几十K
第一步自定义一个协议
例:
第二步 接收到进入boot程序命令即调用SoftReset软件复位(复位后默认先启动boot程序)
第三步 在boot程序启动时回应上位机,接着上位机发送开始下载命令加数据长度,boot回应并开始接受新的APP程序缓存到ram
第四步 上位机发送结束后会发送一个结束命令加校验码,boot程序校验后返回结果,如果正确则将程序覆盖到内部FLASH指定区域。
第五步 复制到FLASH指定区域并读出校验后(如果ram不足 可以只读最后1k数据进行比对),跳转到新程序的开始地址。
注: 新的APP程序中修改向量中断表,修改APP程序的下载地址
int main(void)
{
SCB->VTOR = FLASH_BASE | 0x3C00;//15k´¦//程序开始的地方
}