STM32F2引导程序问题

STM32F2 bootloader issue

我已经编写了一个引导加载程序来跳转到我的应用程序。 首先我尝试了一个简单的 blinky-led 应用程序 => 我能够从引导加载程序跳转到应用程序。

现在我想跳转到我的真实应用程序。该应用程序单独运行良好,但是当我从引导加载程序跳入该应用程序时,一旦启用中断,该应用程序就会崩溃,我的跳转代码:

__disable_irq();
 SCB->VTOR = (uint32_t)0x0800BA00;
 JumpAddress = *(__IO uint32_t*) (0X0800BA04);
 JumpToApplication = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) 0X0800BA00);
 JumpToApplication();

我不知道出了什么问题,也不知道为什么激活中断会导致应用程序崩溃。

感谢您的帮助

在跳转到应用程序之前,您应该取消初始化在引导加载程序中初始化的所有内容。如果您的引导加载程序使用带中断的 USART,您应该禁用此 USART(例如使用 RCC->AHBxRST/RCC->APBxRST 寄存器)并禁用其中断。您还应该跳转到启用中断的应用程序。您的应用程序应该像正常重置后一样获得芯片。

如果您的应用程序使用 ST 中称为 SPL 或 HAL 的垃圾代码,请确保此代码确实 NOT 将 SCB->VTOR 重置回 0 或 0x8000000,因为通常情况下它在 SystemInit() 中执行此操作,它在 main().

之前从 Reset_Handler() 调用

顺便说一句 - 您完全确定您的申请地址吗?您通常将应用程序放在页面边界,而您的代码并未表明 - 0x800ba00 (46.5kB) 距离最近的页面边界 32kB 和 48kB...

设置启动代码和应用程​​序代码的时钟设置相同