Hello Gabriele,
Here is a quick list of things you could check.
Was the user firmware image linked for address 0x10000? Not sure which toolchain you're using, but this needs to be changed accordingly when building the application. Typically its defined in the memory map settings. I can provide more details for a specific toolchain/IDE if needed.
The interrupt vectors need to be remapped for the user application before interrupts are enabled within the user application. For example, write 0x10000 to the vector table offset register (VTOR) to assign the new vector table location, then you can allow interrupts within the user application.
Not sure how you're jumping to the user application, but I use the following function.
#ifdef __CC_ARM
__asm void BOOT_ExecuteApp(UINT32 address)
{
LDR SP, [R0, #0]
ISB
LDR PC, [R0, #4]
}
#else
void BOOT_ExecuteApp(UINT32 address)
{
__asm volatile("LDR SP, [%0, #0]" :: "r" (address));
__asm volatile("ISB");
__asm volatile("LDR PC, [%0, #4]" :: "r" (address));
}
#endif
Regards,
Tyler Drazich