IAP不跳转到APP

2019-07-14 14:01发布

芯片STM32F103RBT6,APP起始地址:0x8005000
IAP程序擦除了 0x800500以后的Flash区域,擦除正常,烧写正常


APP,keil设置,Flash起始地址设了 0x8005000,选择了生产 Bin文件
APP的main函数一开始就设置了tica, SimSun, sans-serif"> SCB->VTOR = FLASH_BASE | 0x5000;


然后IAP程序中到了这个函数,直接走的是else....  
//执行用户程序
void ExecuteUserPro(void)
{
    //判断用户是否已经下载程序,因为正常情况下此地址是栈地址。
    if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)                //若没有这一句的话,即使没有下载程序也会进入而导致跑飞。
    {
        debugOUT("Execute user Program !");
        //跳转至用户代码
        JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
        Jump_To_Application = (pFunction) JumpAddress;


        //初始化用户程序的堆栈指针
        __set_MSP(*(__IO uint32_t*) ApplicationAddress);
        Jump_To_Application();
    }
    else
    {
        debugOUT("no user Program..");
        debugOUT("Restart the device and");
        BSP_TimClose(TIM_3);//停止闪烁
        IO_RESET(eLED_1);//常亮LED
        while(1)
        {
        }
    }
}




何故?求解!


====================================================================================================
谢谢大家
原因找到了,就是APP烧录的时候,出错了,无意偏移了64字节,导致比对失败,本想开源的,但是诸多问题在里边,项目紧,放弃了自动更新的功能,以后做好了在拿出来~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。