初级会员

- 积分
- 153
- 金钱
- 153
- 注册时间
- 2014-9-8
- 在线时间
- 23 小时
|

楼主 |
发表于 2014-12-3 22:02:10
|
显示全部楼层
回复【2楼】xuande:
---------------------------------
今天做了这样的实验 将PC6  C7  C8都连接一个按键作为外部中断输入端,结果出现这样的情况:按三个中的任意一个按键,都会进中断,但是进中断函数后 无法判断是哪个触发了中断,有时按PC6按键 结果程序跳进了if(EXTI_GetITStatus(EXTI_Line7) != RESET)这里 或者if(EXTI_GetITStatus(EXTI_Line8) != RESET) 请问这是什么问题?我的程序是不是哪里错了? 请有经验的大指点一下 谢谢
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource7);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);
EXTI_InitStructure.EXTI_Line=EXTI_Line6|EXTI_Line7|EXTI_Line8;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
void EXTI9_5_IRQHandler(void)
{
/*
delay_ms(10); //消抖
if(KEY0==0) {
LED0=!LED0;
}
EXTI_ClearITPendingBit(EXTI_Line5); //清除LINE5上的中断标志位
*/
if(EXTI_GetITStatus(EXTI_Line6) != RESET)
{
EXTI_ClearFlag(EXTI_Line6);
EXTI_ClearITPendingBit(EXTI_Line6);
}
if(EXTI_GetITStatus(EXTI_Line7) != RESET)
{
EXTI_ClearFlag(EXTI_Line7);
EXTI_ClearITPendingBit(EXTI_Line7);
}
if(EXTI_GetITStatus(EXTI_Line8) != RESET)
{
EXTI_ClearFlag(EXTI_Line8);
EXTI_ClearITPendingBit(EXTI_Line8);
}
} |
|