实现IAP跳转需要的设置内容

IAP程序的设置
1 中断向量表
2 MSP
3 PC

APP程序的设置
1 中断向量表
2 ROM地址

IAP代码

3种C的跳转方式

//#1
typedef struct APP_INFO{
    void (*Application)(void);
}APP_INFO;
APP_INFO app_info;
//#2
typedef void (*Application)(void) ; 
Application pApplication;
//#3
void (*Application2)(void) ; 

跳转代码

void Jump_To_App(uint32_t addr){
   uint32_t* appAddr;
   appAddr = addr;
   if(((*appAddr)& 0x2FFE0000 ) == 0x20000000){//good 0X20000000 - 0X2001FFFF
       SCB->VTOR =  addr;//设置中断向量表地址
       __set_MSP(*appAddr);//设置MSP
//IAP跳转#1
//       app_info.Application = *(appAddr+1);
//       app_info.Application();  
//IAP跳转#2
       pApplication = *(appAddr+1);//设置跳转地址
       pApplication();//设置PC跳转
//IAP跳转#3
//     Application2 = *(appAddr+1);  
//     Application2();   

   }   
}

注意的问题:函数内声明的变量的赋值在改变MSP后赋值改变。所以要么声明为全局变量,要么在改变MSP后再赋值。

APP程序的设置

1 中断向量表 system_stm32f2xx.c

#define VECT_TAB_OFFSET  0x00 //设置为烧写ROM的地址偏移量
void SystemInit(void)
{
.....
#ifdef VECT_TAB_SRAM
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
#else
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif
.....
}

2 ROM地址(注意擦写sector的分配)
STM32F207启动跳转IAP

资料

STM32F207启动跳转IAP

相关文章:

  • 2021-04-15
  • 2021-11-30
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-12
  • 2021-12-12
猜你喜欢
  • 2021-11-18
  • 2021-06-07
  • 2022-12-23
  • 2022-03-08
  • 2021-12-04
  • 2021-12-04
  • 2021-11-16
相关资源
相似解决方案