我已经写了一个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();
我不知道出了什么问题以及为什么激活中断会使应用程序崩溃。
感谢您的帮助
答案 0 :(得分:1)
在跳转到应用程序之前,您应该初始化在引导加载程序中初始化的所有内容。如果您的引导加载程序使用带有中断的USART,则应禁用此USART(例如使用RCC->AHBxRST
/ RCC->APBxRST
寄存器)并禁用其中断。您还应该在启用中断的情况下跳转到您的应用程序。您的应用程序应该像正常重置后一样获得芯片。
如果您的应用程序使用来自ST的称为SPL或HAL的废话代码,请确保此代码 NOT 将SCB-> VTOR重置为0或0x8000000,因为通常它会在在SystemInit()
之前从Reset_Handler()
调用的main()
。
0x800ba00
(46.5kB)距离最近的页面边界32kB和48kB ...
答案 1 :(得分:0)
设置启动代码的时钟设置&应用程序代码相同