我的程序大致过程如下:
IO初始化部分
/***************************************************************************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5; //输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //输入速度2MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //输入输出模式
GPIO_Init(GPIOA, &GPIO_InitStructure); //A组GPIO初始化
EXTI 初始化部分:
EXTI_InitTypeDef EXTI_InitStructure; //EXTI初始化结构定义
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource5);//管脚选择
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//事件选择
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//触发模式
EXTI_InitStructure.EXTI_Line = EXTI_Line5 ; //线路选择
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//启动中断
EXTI_Init(&EXTI_InitStructure);//初始化
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource4);//管脚选择
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//事件选择
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//触发模式
EXTI_InitStructure.EXTI_Line = EXTI_Line4 ; //线路选择
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//启动中断
EXTI_Init(&EXTI_InitStructure);//初始化
....
程序执行后,如果在EXTI4脚上有低电平,不进EXTI4中断,反而进EXTI9_5中断:
void EXTI9_5_IRQHandler(void)
{
Exti9_5Handler();
}
......
void Exti9_5Handler()
{
if (EXTI_GetFlagStatus(EXTI_Line5)>0)//
{
.....
}
}
并且那个if语句条件还能为真,我看了下寄存器,当时EXTI->PR=0x48
从中断出来后EXTI->PR=0x16
不知是哪儿不对,请大侠们帮看看,谢了先!
|