我正在研究STM32L4微控制器上的应用程序。我的想法是当我按下用户按钮时,引导加载程序从主应用程序(0x08000000)跳转到第二个(0x08080000)。第二个固件只是一个闪烁的LED应用程序。跳跃很好,LED开始闪烁,但我的问题是,当我想从第二个应用程序返回到第一个应用程序(0x08000000)时,exti将无法工作!这是我的代码:第一个固件:- <font size="4">if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
- {
- /* Jump to user application */
- JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
- JumpToApplication = (pFunction) JumpAddress;
- /* Initialize user application's Stack Pointer */
- __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
- __disable_irq;
- SCB->VTOR = FLASH_BASE | 0x80000;
- HAL_RCC_DeInit();
- SysTick->CTRL = 0;
- SysTick->LOAD = 0;
- SysTick->VAL = 0;
- __set_PRIMASK(1);
- printf("Starting Firmware 2 . . .
");
- HAL_DeInit();
- JumpToApplication();
- }</font>
复制代码第二个固件的开头:- <font size="4">SCB->VTOR = FLASH_BASE | 0x80000;
- __set_PRIMASK(0);
- HAL_Init();
- SystemClock_Config();
- HAL_InitTick(1);</font>
复制代码这是来自第二个固件的exti回调:- <font size="4">void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
- {
- HAL_NVIC_ClearPendingIRQ(EXTI15_10_IRQn);
- HAL_NVIC_DisableIRQ(EXTI15_10_IRQn);
- if (GPIO_Pin == GPIO_PIN_13)
- {
- if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
- {
- JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
- JumpToApplication = (pFunction) JumpAddress;
- __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
- HAL_NVIC_DisableIRQ(EXTI15_10_IRQn);
- __disable_irq;
- SCB->VTOR = FLASH_BASE;
- JumpToApplication();
- }
- }
- }</font>
复制代码为什么这不起作用?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>