问题: STM32F407 未加下面 清除所有中断标志位;IAP无法跳转到APP;
原因:开了定时器,配置了中断,在执行时为清除中断,导致程序无法跳转;
void flash_load_application(uint32_t application_address)
{
/* 清除所有中断标志位 */
for (uint8_t i = 0; i < 8; i++)
{
NVIC->ICER[i]=0xFFFFFFFF;
NVIC->ICPR[i]=0xFFFFFFFF;
}
/* 先关闭全局中断 */
__disable_irq() ; //关闭总中断
if(((*(uint32_t*)application_address)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
{
/* 跳转到用户应用程序 */
JumpAddress = *(__IO uint32_t*)(application_address+4); //用户代码区第二个字为程序开始地址(复位地址)
Jump_To_Application = (pFunction) JumpAddress;
/* 初始化用户应用程序的堆栈指针 */
__set_MSP(*(__IO uint32_t*)application_address); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
Jump_To_Application(); //跳转到APP.
}
}