I am testing IAP on stm32f051.
I made IAP code downloading from someone's IAP and did little modify.
IAP code is located on 0x0800 0000 ~ 0x0800 2fff and application is located on 0x0800 3000 ~
I wrote the IAP on 0x0800 0000 and application on 0x0800 3000 by ST-link.
And, I did execute the jumping code to application, jumping to application seemed to be good.
But, interrupt service routine are not operated at all.
I put the code on my application to remap vector table to SRAM as following:
#define APPLICATION_ADDRESS 0x08003000
__IO uint32_t VectorTable __attribute__((section(".RAMVectorTable")));
for(i = 0; i < 48; i++)
VectorTable[i] = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
/* Enable the SYSCFG peripheral clock*/
/* Remap SRAM at 0x00000000 */
If I disable all the interrupt, application is working well.
I checked the 0x2000 0000 address's contents and 0x0800 3000 address contents by using ST-link
After executing the application code, 0x2000 0000 address is not same with 0x0800 3000.
What are the points I missed?
Application has tested loading on 0x0800 0000 without IAP, it is working well including interrupt service.