可以试试下面的代码,我测试使用后没有问题,代码中的HAL_DeInit()必须调用,经测试可以正常跳转
[C] 纯文本查看 复制代码 /*
******************************************************************************************************
* 函 数 名: JumpToBootloader
* 功能说明: 跳转到系统BootLoader //ref stm32AN2606
* 形 参: 无
* 返 回 值: 无
******************************************************************************************************
*/
static void JumpToBootloader(void)
{
void (*SysMemBootJump)(void);
if(wdg_dev)
rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);
HAL_DeInit();
HAL_RCC_DeInit();
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
__disable_irq();
__IO uint32_t BootAddr = 0x1FFFF000; /* STM32系统BootLoader地址 */
SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));
__set_MSP(*(uint32_t *) BootAddr);
SysMemBootJump();
while (1);
}
MSH_CMD_EXPORT_ALIAS(JumpToBootloader, reboot_loader, jump to system memory);
|