IAP升级程序后,APP无法进入中断

2019-07-21 00:34发布

我的IAP和APP中都开启了USART1接收中断,但是在APP执行过程中,当USART1接收到数据时,只能跳转到IAP中的USART1中断处理函数,不会执行APP的中断处理函数。网上有的方法都尝试过了,还是不行。我在APP中加入了按键控制发送,就是按下按键后,就通过USART1发送一个1给上位机,是可以实现的,也就是串口是正常的,但就是进不了APP的中断处理函数。我的APP在FLASH起始地址及中断向量便宜设置如下: 1.png

int main()
{

        SCB->VTOR = FLASH_BASE | 0x3000;
       
        RCC_INIT();
        USART_GPIO_INIT();
        NVIC_INIT();
        USART_INIT();
        LED_Init();
        while(1)
        {
                LED_Sets(0x0F);
        }
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
49条回答
szczyb1314
2019-07-25 05:10
午夜狼嚎 发表于 2018-9-6 11:18
加在APP还是IAP呢?

void iap_load_app(u32 appxaddr)
{
        NVIC_DeInit();
        RCC_DeInit();
        __asm("CPSID   I");       
        GPIO_DeInit(GPIOA);GPIO_DeInit(GPIOB);GPIO_DeInit(GPIOC);
        GPIO_DeInit(GPIOD);
        GPIO_DeInit(GPIOE);GPIO_DeInit(GPIOF);GPIO_DeInit(GPIOG);
        if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)        //检查栈顶地址是否合法.
        {
                jump2app=(iapfun)*(vu32*)(appxaddr+4);                //用户代码区第二个字为程序开始地址(复位地址)               
                MSR_MSP(*(vu32*)appxaddr);                                        //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
                jump2app();                                                                        //跳转到APP.
        }
}

一周热门 更多>