跳转到新固件STM32L4后,EXTI停止工作

2019-07-14 17:12发布

我正在研究STM32L4微控制器上的应用程序。我的想法是当我按下用户按钮时,引导加载程序从主应用程序(0x08000000)跳转到第二个(0x08080000)。第二个固件只是一个闪烁的LED应用程序。跳跃很好,LED开始闪烁,但我的问题是,当我想从第二个应用程序返回到第一个应用程序(0x08000000)时,exti将无法工作!这是我的代码:第一个固件:
  1. <font size="4">if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
  2. {
  3.     /* Jump to user application */
  4.     JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
  5.     JumpToApplication = (pFunction) JumpAddress;

  6.     /* Initialize user application's Stack Pointer */
  7.     __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);

  8.     __disable_irq;
  9.     SCB->VTOR = FLASH_BASE | 0x80000;

  10.     HAL_RCC_DeInit();
  11.     SysTick->CTRL = 0;
  12.     SysTick->LOAD = 0;
  13.     SysTick->VAL = 0;
  14.     __set_PRIMASK(1);

  15.     printf("Starting Firmware 2 . . .   ");
  16.     HAL_DeInit();
  17.     JumpToApplication();
  18. }</font>
复制代码第二个固件的开头:
  1. <font size="4">SCB->VTOR = FLASH_BASE | 0x80000;
  2.   __set_PRIMASK(0);
  3.   HAL_Init();

  4.   SystemClock_Config();

  5.   HAL_InitTick(1);</font>
复制代码这是来自第二个固件的exti回调:
  1. <font size="4">void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  2. {
  3.     HAL_NVIC_ClearPendingIRQ(EXTI15_10_IRQn);
  4.     HAL_NVIC_DisableIRQ(EXTI15_10_IRQn);

  5.     if (GPIO_Pin == GPIO_PIN_13)
  6.     {
  7.         if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
  8.         {
  9.             JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
  10.             JumpToApplication = (pFunction) JumpAddress;

  11.             __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);

  12.              HAL_NVIC_DisableIRQ(EXTI15_10_IRQn);
  13.             __disable_irq;
  14.              SCB->VTOR = FLASH_BASE;
  15.             JumpToApplication();
  16.         }
  17.     }
  18. }</font>
复制代码为什么这不起作用?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
huzp_bbs
1楼-- · 2019-07-14 20:51
thnx用于回复,返回第一个应用程序的方式与从第一个应用程序转到第二个应用程序的方式相同,方法是单击用户按钮。我已经分别测试了第二个应用程序,所以当我按下按钮时它会转到第一个应用程序,但是当我再次按下它时它永远不会回来
fhdgxfvx
2楼-- · 2019-07-14 23:42
看起来您正在跳转到相同的应用程序地址,因此只需重新启动您的应用程序即可
jhhfhgj
3楼-- · 2019-07-15 04:42
不,我在第一个固件中声明了“APPLICATION_ADDRESS = 0x08080000”,在第二个固件中声明了“APPLICATION_ADDRESS = 0x08000000”。我很伤心,跳跃工作正常,但在第一次跳跃后停止工作,所以没有回头。这就像跳跃后中断停止工作。
YOYOOO
4楼-- · 2019-07-15 09:39
 精彩回答 2  元偷偷看……
Lucia_nie
5楼-- · 2019-07-15 14:25
谢谢你,如果我从主要的第二个应用程序跳转,可以解决问题,exti将从第二个应用程序工作?

一周热门 更多>