定义了三个外部中断口。PA3,PA7和PA4。但是PA4和PA7的下降沿触发进入中断服务程序时,发现有影响,PA7中断后随即PA3也发生了中断,PA4中断也会发生PA3的中断。。。。配置情况:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
。。。。。。。。。。。。。。。。。。。。
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);
EXTI_InitStructure.EXTI_Line = EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource4);
EXTI_InitStructure.EXTI_Line = EXTI_Line4;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
。。。。。。。。。。。。。。。。。。。 IO口定义
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。中断服务程序
void EXTI3_IRQHandler(void)
{
int i;
if(EXTI_GetITStatus(EXTI_Line3) != RESET)
{
printf("\nThe left pull down\r\n");
/* Clear the EXTI line 3 pending bit */
EXTI_ClearITPendingBit(EXTI_Line3);
}
for(i=0;i<1000;i++);
}
void EXTI4_IRQHandler(void)
{
int i;
if(EXTI_GetITStatus(EXTI_Line4) != RESET)
{
printf("\nThe center pull down\r\n");
/* Clear the EXTI line 3 pending bit */
EXTI_ClearITPendingBit(EXTI_Line4);
}
for(i=0;i<1000;i++);
}
。。。。。。。。。。。。。。。。。。。。。。。。。串口打印如下: right后出现了left两个事件。(没有消抖动)
(由于太难描述了。PA7口略),,,求教
|