STM32F429无法从APP跳转到系统bootloader,之前f103和f407也无法跳转,后面看了论坛帖子更改HAL_RCC_DeInit();的顺序后就可以了,但这次却不行。
[C] 纯文本查看 复制代码 static void JumpToBootloader(void)
{
uint32_t i = 0;
void (*SysMemBootJump)(void); /*声明一个函数指针*/
__IO uint32_t BootAddr = 0x1FFF0000;
/*关闭全局中断*/
__disable_irq();
HAL_DeInit();
/*设置所有时钟到默认状态,使用HSI时钟*/
HAL_RCC_DeInit();
/*关闭滴答定时器,恢复到默认值*/
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
/* 关闭所有中断,清除中断挂起标志 */
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();
} |