天天看点

STM32 IAP升级

问题:

IAP程序跳转到APP程序,APP初始化卡死。

解决:

IAP程序跳转前将外设时钟恢复为禁止状态。

__HAL_RCC_TIM14_CLK_DISABLE();
           

跳转代码:

typedef __IO uint32_t  vu32;
typedef  void (*iapfun)(void);				//定义一个函数类型的参数. 
iapfun jump2app; 
#define APPLICATION_START_ADDRESS   ((uint32_t)0x08010000)//APP文件的起始地址
void iap_load_app(uint32_t appxaddr)
{ 
	if(((*(__IO uint32_t*)appxaddr)&0x2FFE0000)==0x20000000)	//检查栈顶地址是否合法.
	{ 
		jump2app=(iapfun)*(__IO uint32_t*)(appxaddr+4);		//用户代码区第二个字为程序开始地址(复位地址)		
		__set_MSP(*(__IO uint32_t*)appxaddr);					//初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
		jump2app();									//跳转到APP.
	}
}	
           

APP程序中设置

STM32 IAP升级

继续阅读