昨天写的一个外部中断的程序,其中用到两个外部中断,每个中断只能触发一次,主函数运行正常,但是如果第一个中断触发完就不能再继续触发,只能触发第二个中断去。每个中断均只能触发一次。一下是中断的服务函数和初始化函数:
void EX
ti15_10_IRQHandler(void){delay_ms(10); //消抖 if(KEY0==0) //按键0{GPIOB->CRH&=0XFF0FFFFF; GPIOB->CRH|=0X00300000; GPIOB->ODR|=0<<13; delay_ms(1000);GPIOB->ODR|=1<<13;}else if(KEY1==0)//按键1{ GPIOB->CRH&=0XFFF0FFFF; GPIOB->CRH|=0X00030000; GPIOB->ODR|=0<<12; delay_ms(1000);GPIOB->ODR|=1<<12;}KEY0==1;KEY1==1;EXTI->R=1<<13; //清除LINE13上的中断标志位 EXTI->R=1<<15; //清除LINE15上的中断标志位}//外部中断初始化程序//初始化PA0,PA13,PA15为中断输入.void EXTIX_Init(void){//RCC->APB2ENR|=1<<2; //使能PORTA时钟//JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD
GPIOC->CRL&=0XFFFFFFF0;//PA0设置成输入 GPIOC->CRL|=0X00000008; GPIOC->CRH&=0X0F0FFFFF;//PA13,15设置成输入 GPIOC->CRH|=0X80800000; GPIOC->ODR|=1<<13; //PA13上拉,PA0默认下拉GPIOC->ODR|=1<<15; //PA15上拉
//Ex_NVIC_Config(GPIO_C,0,RTIR); //上升沿触发Ex_NVIC_Config(GPIO_C,13,FTIR);//下降沿触发Ex_NVIC_Config(GPIO_C,15,FTIR);//下降沿触发
//MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //抢占2,子优先级2,组2MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2 }