使用STM32L433 的串口IAP升级,app程序正常写入到FLASH中了,但是跳转APP程序后却不运行。是什么原因?
调整代码
if(((*(vu32*)(FLASH_APP1_ADDR+0x00000004))&0xFF000000)==0x08000000)
{
HAL_UART_Transmit_IT(&huart3 , (uint8_t *)"RAN_APP" , 7);
HAL_Delay(100);
iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码
}
void iap_load_app(uint32_t appxaddr)
{
if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
{
__disable_irq();
jump2app=(iapfun)*(vu32*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址)
MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
jump2app(); //跳转到APP.
}
}
app程序就是一个串口打印。以前用STM32F303的芯片是好的,后来因为STM32L4芯片FLASH只能双字写入,所以自己做了修改,但是就出问题了