我的IAP和APP中都开启了USART1接收中断,但是在APP执行过程中,当USART1接收到数据时,只能跳转到IAP中的USART1中断处理函数,不会执行APP的中断处理函数。网上有的方法都尝试过了,还是不行。我在APP中加入了按键控制发送,就是按下按键后,就通过USART1发送一个1给上位机,是可以实现的,也就是串口是正常的,但就是进不了APP的中断处理函数。我的APP在FLASH起始地址及中断向量便宜设置如下:
int main()
{
SCB->VTOR = FLASH_BASE | 0x3000;
RCC_INIT();
USART_GPIO_INIT();
NVIC_INIT();
USART_INIT();
LED_Init();
while(1)
{
LED_Sets(0x0F);
}
}
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.
}
}
一周热门 更多>