加入api , jump_to_app()

This commit is contained in:
不吃油炸鸡
2026-02-08 17:27:38 +08:00
parent 9098768d3f
commit 19da4ff10f
3 changed files with 36 additions and 33 deletions

View File

@@ -191,21 +191,7 @@ int main(void)
{
// 4. 校验成功,执行跳转
USB_PutString("Valid APP found, jumping to application...\r\n");
// 获取APP的堆栈指针和跳转地址
uint32_t JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
Jump_To_Application = (pFunction) JumpAddress;
// 在跳转前反初始化所有Bootloader用过的外设
USER_USB_DEVICE_DeInit();
HAL_RCC_DeInit();
HAL_DeInit();
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
__disable_irq();
// 设置APP的堆栈指针并跳转
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
Jump_To_Application();
jump_to_app();
}
}
// no legal APP

View File

@@ -229,22 +229,7 @@ void Main_Menu(void)
{
USB_PutString("Start to execute the user application...\r\n");
HAL_Delay(1000);
USER_USB_DEVICE_DeInit();
HAL_RCC_DeInit();
HAL_DeInit();
//user code here
SysTick->CTRL = 0X00;//禁止SysTick
SysTick->LOAD = 0;
SysTick->VAL = 0;
__disable_irq();
//set JumpAddress
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
/* Jump to user application */
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
Jump_To_Application();
jump_to_app();
}
else if ((key == 0x34) && (FlashProtection == 1))
{
@@ -281,6 +266,37 @@ void Main_Menu(void)
}
}
/* Public functions ---------------------------------------------------------*/
/**
* @brief Jumps to the user application loaded in the Flash memory.
* @param None
* @retval None
*/
void jump_to_app(void)
{
USER_USB_DEVICE_DeInit();
// 手动配置USB引脚为GPIO输出强制拉低DP线以模拟拔出
USER_USBD_LL_Simulate_Disconnect();
// 给予PC足够的时间来识别设备断开
HAL_Delay(1000);
HAL_RCC_DeInit();
HAL_DeInit();
//user code here
SysTick->CTRL = 0X00;//禁止SysTick
SysTick->LOAD = 0;
SysTick->VAL = 0;
__disable_irq();
//set JumpAddress
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
/* Jump to user application */
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
Jump_To_Application();
}
/**
* @}
*/

View File

@@ -1,6 +1,6 @@
/**
******************************************************************************
* @file STM32F4xx_IAP/inc/menu.h
* @file STM32F4xx_IAP/inc/menu.h
* @author MCD Application Team
* @version V1.0.0
* @date 10-October-2011
@@ -17,7 +17,7 @@
*
* <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
******************************************************************************
*/
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MENU_H
@@ -34,6 +34,7 @@ typedef void (*pFunction)(void);
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
void Main_Menu(void);
void jump_to_app(void);
#endif /* __MENU_H */