各位大神好,遇到一个奇怪的问题,我从APP跳转到bootloader不成功,但是bootloader升级没有问题,重新上电也可以运行,但是就是无法跳转成功,源代码如下,希望有人能解答下!
void JumpToBootloader(void)
{
uint32_t i=0;
void (*SysMemBootJump)(void); // 申明一个函数指针
__IO uint32_t BootAddr = 0x08000000; //boot地址
__set_PRIMASK(1); //关全局中断
//关定时器
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
//关闭所有中断,清除所有中断挂起标志
HAL_RCC_DeInit();
//
for (i = 0; i < 8; i++)
{
NVIC->ICER=0xFFFFFFFF;
NVIC->ICPR=0xFFFFFFFF;
}
__set_PRIMASK(0); //开全局中断
// 跳转到系统BootLoader,首地址是MSP,地址+4是复位中断服务程序地址
SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));
//设置主堆栈指针
__set_MSP(*(uint32_t *)BootAddr);
//在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针
__set_CONTROL(0);
//跳转到系统BootLoader
SysMemBootJump();
//跳转成功的话,不会执行到这里,用户可以在这里添加代码
while (1)
{
}
}
|