从IAP跳转到APP无法运行

2019-10-15 22:21发布

本帖最后由 hyarcher25 于 2016-12-14 09:34 编辑

STM32F107,用以太网UDP进行IAP实验。IAP:0x8000000,APP:0x8010000
第一次将IAP程序下载到芯片,然后用上位机写APP程序可以实现跳转,之后APP返回IAP模式后,再次进行升级后,便无法运行APP程序了。
使用了systick中断,但参考网上教程说使用__set_PRIMASK(1);关闭所有中断,之后进入其它程序初始化执行__set_PRIMASK(0);开启所有中断即可。
查看了论坛里面的有此问题的帖子,但还是没有解决。。。请各位大神指点!
IAP-TO-APP跳转:
void iap_load_app(u32 appxaddr)
{
        if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)        
        {
                __set_PRIMASK(1);
                jump2app=(iapfun)*(vu32*)(appxaddr+4);        
                MSR_MSP(*(vu32*)appxaddr);                                       
                jump2app();                                                        
        }
}


APP-TO-IAP跳转:
void IAPRun(void)
{
      __set_PRIMASK(1);
      jump2app=(iapfun)*(vu32*)(IAP_ADDR+4);                        
      __set_MSP(*(vu32*)IAP_ADDR);                                
      jump2app();                                                               
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
hyarcher25
1楼-- · 2019-10-16 03:41
原因已找到。APP中AD采样使用了DMA,跳转之前没有关闭
正点原子
2楼-- · 2019-10-16 07:19
帮顶
hyarcher25
3楼-- · 2019-10-16 07:25
 精彩回答 2  元偷偷看……
hyarcher25
4楼-- · 2019-10-16 11:37
顶一下。
swallow_sw
5楼-- · 2019-10-16 14:36
hyarcher25 发表于 2016-12-8 15:37
原因已找到。APP中AD采样使用了DMA,跳转之前没有关闭

能说的仔细一点吗?我也遇到这个问题,程序跳转之后进不了中断
hyarcher25
6楼-- · 2019-10-16 19:31
swallow_sw 发表于 2016-12-21 17:16
能说的仔细一点吗?我也遇到这个问题,程序跳转之后进不了中断

ADC_DMACmd(ADC1, DISABLE);

我的程序使用了AD采样,用了DMA,所以在跳转前面加上这个语句,跳转就好了

一周热门 更多>