stm32f0系列的IAP与其它系列的有比较大的不同,比如M3内核的具备有中断矢量表重定位寄存器,只需要对该寄存器修改一下flash的偏移地址,就能实现APP代码的整体偏移。但是M0呢,不支持这么操作,需要把APP代码中大小为48个字的中断向量表拷贝到SRAM区中,再实现硬件映射。所以在工程配置时应该对RAM偏移48*4个字节。也就是把RAM起始地址改为0x200000C0。
一年前做这个芯片的IAP时已经发现这个问题,只是当初都做好了规划和预留,一直没有改动过,结果今天因特殊原因需要偏移不同的地址,结果忘了要改RAM这回事,导致出现了各种死机的问题。
所以呢,好记性不如烂笔头。
还有一点就是做地址偏移需要考虑到芯片的flash的块大小,因为flash最小写单位为块,在执行拷贝功能时需要以块为单位进行操作,因此偏移地址应为块大小的整数倍。