killy0492 发表于 2020-11-24 21:19

HC32F460 IAP远程升级跳转到APP后进中断异常

跳转前的关中断   关功能引脚都做了,跳转到APP后能正常运行,但只要进中断就会异常死机。 中断向量偏移照着STM32类似那样做的,还是不行。搞了快一周了 ,头大啊D:/1.png

killy0492 发表于 2020-11-24 21:20

          SCB->VTOR = 0 | (0x20000 & (uint32_t)0x1FFFFF80);          
    ClkInit();
          //SCB->VTOR = 0 | 0x10000;
          __enable_irq();
    USART_init();
                LED_init();

huquanz711 发表于 2020-11-25 18:52

跳转APP之前关中断没?

killy0492 发表于 2020-11-25 19:19

huquanz711 发表于 2020-11-25 18:52
跳转APP之前关中断没?

IAP内就只使用了一个串口中断用于接收APP二级制的文件,跳转前使用__disable_irq(); 关过中断,好像还是不行的   

liangshuang95 发表于 2020-11-25 21:02

你先把串口外设关掉,然后看看能正常运行不?

lidi911 发表于 2020-11-26 07:21

楼主可以按照5楼的做法,先把外设关掉看能不能正常启动。这种情况一般还是程序问题。

martinhu 发表于 2020-11-26 08:50

boot里面如果使用了中断,那么在跳转之前,需要使用interrupt.c里面resign函数,释放掉这个中断,否则,在app里面再次中断的时候,就会异常。

Puremr 发表于 2020-11-26 08:57

可以参考楼上的这个说法,在跳转之前,需要使用interrupt.c里面resign函数,释放掉这个中断,否则,在app里面再次中断的时候,就会异常。

killy0492 发表于 2020-12-24 16:03

martinhu 发表于 2020-11-26 08:50
boot里面如果使用了中断,那么在跳转之前,需要使用interrupt.c里面resign函数,释放掉这个中断,否则,在a ...

回复迟了,不好意思。果然是这个问题,在跳转前释放后都能正常跑起来了,多谢多谢!

lesheng002 发表于 2020-12-25 21:38

martinhu 发表于 2020-11-26 08:50
boot里面如果使用了中断,那么在跳转之前,需要使用interrupt.c里面resign函数,释放掉这个中断,否则,在a ...


void                net_reset_stme32f_mcu(void)
{
    __set_PRIMASK(1);
        if(((*(vu32*)(APP_START_ADDR+4))&FLASH_ADDR_MASK)==FLASH_START_ADDR)//判断是否为0X00XXXXXX.
        {       
                if(((*(vu32*)APP_START_ADDR)& MCU_RAM_ADDR_MASK)==MCU_RAM_START_ADDR)        //检查栈顶地址是否合法.
                {
            __ASM("CPSIDI");
              Dma_DisableChannel(USART_DMA_TX_CHAN);
                        Dma_Disable();
            Uart_DisableIrq(MY_USART,UartRxIrq);             ///<使能串口接收中断
            EnableNvic(MY_USART_IRQ, IrqLevel3, FALSE);       ///<系统中断使能
            
                        jump2app=(iapfun)*(vu32*)(APP_START_ADDR+4);                //用户代码区第二个字为程序开始地址(复位地址)               
                        MSR_MSP(*(vu32*)APP_START_ADDR);                                        //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
            __set_MSP(*(vu32*)(APP_START_ADDR));
                        jump2app();                                                                        //跳转到APP.
                }
        }
}


请问HC32L176这个芯片要如何处理,我用串口进行更新升级,串口又用DMA传输,在重新启动APP前都关闭了,但APP不能正常启动。

martinhu 发表于 2020-12-26 23:44

lesheng002 发表于 2020-12-25 21:38
请问HC32L176这个芯片要如何处理,我用串口进行更新升级,串口又用DMA传输,在重新启动APP前都关闭了, ...

F460之所以要做中断resign的释放操作,是因为他的中断向量和中断请求是自由映射的,而176不存在这样的功能。
你要debug试试boot有没有成功跳转到app,
如果成功跳转到app了,那么是运行到哪里有问题,
如果不能正常跳转,是运行到哪一步?
还要,app里面的中断向量表做偏移了吗?

csv7k1 发表于 2020-12-31 15:03

你要debug试试boot有没有成功跳转到app,
如果成功跳转到app了,那么是运行到哪里有问题,

为什么跳转了就出现问题了呀?

aoo 发表于 2020-12-31 17:20

千人QQ群:206032332
页: [1]
查看完整版本: HC32F460 IAP远程升级跳转到APP后进中断异常