今天在写外部按键触发LED灯点亮的软件。
按键分别接PE6、PC12、PF8。用这三个端口分别控制三个灯点亮,外部中断配置函数如下:
void ExTI_InitCfg()
{
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_ClearITPendingBit(EXTI_Line6); //清中断标志
EXTI_ClearITPendingBit(EXTI_Line12);
EXTI_ClearITPendingBit(EXTI_Line8);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource6);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource12);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF,EXTI_PinSource8);
EXTI_InitStructure.EXTI_Line = EXTI_Line6 | EXTI_Line12 | EXTI_Line8;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
由于EXTI6和EXTI8都属于EXTI9_5_IRQChannel,所以中断处理部分我写成这样,从我的中断中,我知道这样处理不对,因为结果是一个按键两个灯都亮了。
void EXTI9_5_IRQHandler(void)
{
GPIO_SetBits(GPIOE, GPIO_Pin_2);
EXTI_ClearITPendingBit(EXTI_Line6);
GPIO_SetBits(GPIOE, GPIO_Pin_5);
EXTI_ClearITPendingBit(EXTI_Line7);
}
所以想请问大家:怎么让小灯分别被不同的按键驱动点亮?STM32的外部中断中,中断响应函数相同的I/O是否不能在同一个工程中使用?
|