STM32F207启动跳转IAP

实现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的分配)
APP ROM地址

资料

中断向量表便宜设置

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值