STM32F2引导加载程序问题

时间:2017-01-04 14:44:22

标签: arm stm32 bootloader

我已经写了一个bootloader来跳转到我的应用程序。 首先,我尝试使用一个简单的blinky-led app =>我可以从引导程序中跳转到应用程序。

现在我想跳进我的真实应用程序。该应用程序运行良好,但当我从我的引导程序跳转到它时,一旦中断启用,应用程序崩溃,我的跳转代码:

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

我不知道出了什么问题以及为什么激活中断会使应用程序崩溃。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

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

如果您的应用程序使用来自ST的称为SPL或HAL的废话代码,请确保此代码 NOT 将SCB-> VTOR重置为0或0x8000000,因为通常它会在在SystemInit()之前从Reset_Handler()调用的main()

BTW - 您对应用程序的地址绝对肯定吗?您通常将应用程序放在页面边界,而您的代码并不表示 - 0x800ba00(46.5kB)距离最近的页面边界32kB和48kB ...

答案 1 :(得分:0)

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