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条回答
午夜狼嚎
1楼-- · 2019-07-24 22:35
 精彩回答 2  元偷偷看……
szczyb1314
2楼-- · 2019-07-25 00:51
 精彩回答 2  元偷偷看……
szczyb1314
3楼-- · 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.
        }
}
午夜狼嚎
4楼-- · 2019-07-25 07:47
szczyb1314 发表于 2018-9-6 11:22
void iap_load_app(u32 appxaddr)
{
        NVIC_DeInit();

好的,谢谢,我试试
午夜狼嚎
5楼-- · 2019-07-25 13:09
szczyb1314 发表于 2018-9-6 11:22
void iap_load_app(u32 appxaddr)
{
        NVIC_DeInit();

我试过了,还是不行
午夜狼嚎
6楼-- · 2019-07-25 17:41
一起哈皮 发表于 2018-9-6 14:11
你工程没改VECT_TAB_OFFSET的值,就不要把SystemInit放进工程里,因为系统初始化函数会初始化中断向量表的 ...

我就在APP里设置了中断向量表的偏移SCB->VTOR = FLASH_BASE | 0x3000;  没有加入systeminit

一周热门 更多>