写了一个外部中断的程序,用到的外部中5到9这5个中断源。由于外部中断5-9是一个中断向量,所以我在中断函数里判断是那个中断发生,点亮相应的LED灯。 写完的程序仿真后发现外部中断源5到9任意一个中断源发生后,在中断函数里的判断失去作用,LED灯都会亮,我想不明白什么原因。群里兄弟帮忙分析一下。程序如下:
[mw_shl_code=c,true]void key_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 |GPIO_Pin_6 |GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void exit_Configuration(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
key_init();
EXTI_InitStructure.EXTI_Line = EXTI_Line5 | EXTI_Line6 |EXTI_Line7 | EXTI_Line8 | EXTI_Line9;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
EXTI_ClearFlag(EXTI_Line5 |EXTI_Line6 |EXTI_Line7 | EXTI_Line8 |EXTI_Line9);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource5 |GPIO_PinSource6 | GPIO_PinSource7 |GPIO_PinSource8 |GPIO_PinSource9);
}
//------------------------------------------
void EXTI9_5_IRQHandler(void)
{
delay_ms(10);//消抖
if(SET==EXTI_GetITStatus(EXTI_Line5));
{
SET_LED0;
delay_ms(50);
}
if(SET==EXTI_GetITStatus(EXTI_Line6));
{
SET_LED1;
delay_ms(50);
EXTI_ClearITPendingBi(EXTI_Line5|EXTI_Line6|EXTI_Line7|EXTI_Line8|EXTI_Line9); //清除LINE0上的中断标志位
}[/mw_shl_code]
|