typedefvoid(*pFunction)(void);/*!
* @brief 跳转到应用程序段
* 执行条件:无
* @param[in1] : 用户代码起始地址.
*
* @retval: 无
*/voidjump_to_app(uint32_t app_addr){
pFunction jump_to_application;uint32_t jump_address;/* Check if valid stack address (RAM address) then jump to user application */if(((*(__IO uint32_t*)app_addr)&0x2FFE0000)==0x20000000){/* Jump to user application */
jump_address =*(__IO uint32_t*)(app_addr +4);
jump_to_application =(pFunction) jump_address;/* Initialize user application's Stack Pointer */__set_MSP(*(__IO uint32_t*) jump_address);jump_to_application();}}#defineFLASH_JUMP_ADDR(0x08008000)intmain(void){/*
初始化程序省略.....
*/if(((FLASH_JUMP_ADDR+4)&0xFF000000)==0x08000000)//Judge if start at 0X08XXXXXX.{jump_to_app(FLASH_JUMP_ADDR);// Jump to APP}while(1){}}
APP应用程序(在APP代码值需要设定代码偏移地址)
#defineVECT_TAB_OFFSET0x8000/*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
需要去掉注释,有的库函数需要去掉,有的不需要,根据库函数实际情况进行调整
/* #define USER_VECT_TAB_ADDRESS */