注意APP不能擦除整个chip
IAP的逻辑
先给APP发送指令,要进入IAP了;
主程序跳转到APP段(复位);
IAP返回确认数据(从APP进入的)
命令:
从APP进入:
T=01,05 R=0xaa 进入IAP
T=02,05 R=0xaa 初始化地址
T=03,2048字符 R=0xaa 发送2048个字符
。。。
T=04,4byte剩余字符count,剩余字符 R=0xaa
T=05 05 测试 R=0xaa;
IAP项目
1、接收APP程序数据,串口命令有两种,1是整包,2是散包(最后一个包);
2、进入跳转的条件:
/*
程序已下载 由APP进入 超时 程序更新完成
A B C D
满足如下条件就会跳转: AB*+ABC+ABD A*D */超时:由APP进入的,但是串口通信突然中断了,程序还要继续运行下去,所以只能是,程序已下载的情况下,超过一定时间新程序还没下载完,就直接跳转
APP项目
1、魔术棒中设置程序启动的地址;
2、程序中设置中断向量表的新地址: SCB->VTOR = FLASH_BASE | 0x10000; /* Vector Table Relocation in Internal FLASH. */
3、可以复位,进入IAP:__set_FAULTMASK(1); NVIC_SystemReset();
移植到stm32f1
cube生成stm32f1的工程
主函数包含文件iap.h
main函数更新为iap程序
flash的erase更改为stm32f1的库,把stm32f4的文件改为stm32f1