stbking 发表于 2019-3-5 10:12:31

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了呢?
谢谢!

tgw860910 发表于 2019-3-5 10:20:36

你没把APP跳转到IAP的代码贴出来,还有APP初始化时要把中断向量表重新覆盖

stbking 发表于 2019-3-5 10:23:52

tgw860910 发表于 2019-3-5 10:20
你没把APP跳转到IAP的代码贴出来,还有APP初始化时要把中断向量表重新覆盖

APP跳转IAP的代码一模一样啊,除了APPLICATION_ADDRESS变为0x08000000.

stbking 发表于 2019-3-5 10:27:01

本帖最后由 stbking 于 2019-3-5 10:43 编辑

你说的"中断向量表重新覆盖"是什么意思?我就是改了 VECT_TAB_OFFSET 为 0x08080000(也就是F756的flash的第6个扇区起始值)

Owen.li 发表于 2019-3-5 10:56:21

APP跳转IAP之前要复位中断向量地址NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

stbking 发表于 2019-3-5 11:08:37

我使用的是STM32CubeMX生成的code.没有NVIC_SetVectorTable()这个函数啊。

我在APP中跳转前加上SCB->VTOR = FLASH_BASE ;,但不管用。

ZDPHPN 发表于 2019-3-5 11:24:44

我竟然不能从APP跳回IAP(代码相同,变了地址),所以在APP里只有使用软复位了:lol

stbking 发表于 2019-3-5 11:42:44

http://www.onarm.com/forum/21368/

上面这个帖子上好像是提到要把interrupt disable 掉。我看不清我这种情况是应该在APP中disable interrupt 还是在 IAP中。 并且怎么disable interrupt? 我在IAP中使用 __disable_irq();后无论何时都不能再跳到APP了。

tgw860910 发表于 2019-3-6 10:12:43

stbking 发表于 2019-3-5 10:23
APP跳转IAP的代码一模一样啊,除了APPLICATION_ADDRESS变为0x08000000.

APP跳转到IAP就用软复位就行啊,用跳转函数的话还需要重新写一遍中断向量表

tgw860910 发表于 2019-3-6 10:14:59

还有就是,你用的什么芯片?F0系列的中断向量表要自己写,没有库函数,建议你参考官网例程,里面例子很多
页: [1] 2
查看完整版本: IAP 跳转APP 开始可以,但如果从APP跳回IAP后,再跳到APP失败