IAP 跳转APP 开始可以,但如果从APP跳回IAP后,再跳到APP失败
IAP 跳转APP 开始可以,但如果从APP跳回IAP后,再跳到APP失败。我是按照 下面ST官方文档来的:
AN4657
Application note
STM32 in-application programming (IAP) using the USART
code就是下面的:
-----------------
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
JumpToApplication = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
JumpToApplication();
-----------------
请问为什么第一次可以从IAP跳到APP,第二次如果是从APP跳到IAP,那么就不可能再次跳到APP了呢?
谢谢!
你没把APP跳转到IAP的代码贴出来,还有APP初始化时要把中断向量表重新覆盖 tgw860910 发表于 2019-3-5 10:20
你没把APP跳转到IAP的代码贴出来,还有APP初始化时要把中断向量表重新覆盖
APP跳转IAP的代码一模一样啊,除了APPLICATION_ADDRESS变为0x08000000. 本帖最后由 stbking 于 2019-3-5 10:43 编辑
你说的"中断向量表重新覆盖"是什么意思?我就是改了 VECT_TAB_OFFSET 为 0x08080000(也就是F756的flash的第6个扇区起始值) APP跳转IAP之前要复位中断向量地址NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); 我使用的是STM32CubeMX生成的code.没有NVIC_SetVectorTable()这个函数啊。
我在APP中跳转前加上SCB->VTOR = FLASH_BASE ;,但不管用。 我竟然不能从APP跳回IAP(代码相同,变了地址),所以在APP里只有使用软复位了:lol http://www.onarm.com/forum/21368/
上面这个帖子上好像是提到要把interrupt disable 掉。我看不清我这种情况是应该在APP中disable interrupt 还是在 IAP中。 并且怎么disable interrupt? 我在IAP中使用 __disable_irq();后无论何时都不能再跳到APP了。 stbking 发表于 2019-3-5 10:23
APP跳转IAP的代码一模一样啊,除了APPLICATION_ADDRESS变为0x08000000.
APP跳转到IAP就用软复位就行啊,用跳转函数的话还需要重新写一遍中断向量表 还有就是,你用的什么芯片?F0系列的中断向量表要自己写,没有库函数,建议你参考官网例程,里面例子很多
页:
[1]
2