我看到过一段代码,是从bootloader跳转到APP的,这代码是不是只能用在自己写的bootloader上,程序如果进入到系统bootloader,应该只能硬件复位才能跳转到APP吧
[C] 纯文本查看 复制代码 static void JumpToApp(void)
{
uint32_t i=0;
void (*SysMemBootJump)(void); /*声明一个函数指针*/
__IO uint32_t BootAddr = 0x8001800; /* APP程序地址*/
/*关闭全局中断*/
__disable_irq();
/*关闭滴答定时器,恢复到默认值*/
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
/*设置所有时钟到默认状态,使用HSI时钟*/
HAL_RCC_DeInit();
/* 关闭所有中断,清除中断挂起标志 */
for (i = 0; i < 8; i++)
{
NVIC->ICER[i]=0xFFFFFFFF;
NVIC->ICPR[i]=0xFFFFFFFF;
}
/* 使能全局中断 */
__enable_irq();
/* 跳转到系统 BootLoader,首地址是MSP,地址 +4 是复位中断服务程序地址 */
SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));
/* 设置主堆栈地址*/
__set_MSP(*(uint32_t *)BootAddr);
/*在RTOS工程,这条语句很重要,设置为特权模式,使用MSP指针 */
__set_CONTROL(0);
/* 跳转到系统 BootLoader */
SysMemBootJump();
}
|