配置如下:
[mw_shl_code=c,true]void Nvic_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); [/mw_shl_code]
[mw_shl_code=c,true] NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn ; //开启EXTI15_10中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级 0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
[/mw_shl_code]
[mw_shl_code=c,true]void Exti_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设模块时钟使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//外部中断线配置,选择中断线管脚
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource12); [/mw_shl_code]
[mw_shl_code=c,true] GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource13); [/mw_shl_code]
[mw_shl_code=c,true] GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14); [/mw_shl_code]
[mw_shl_code=c,true] GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource15); [/mw_shl_code]
[mw_shl_code=c,true]
//对中断线进行中断设置
EXTI_InitStructure.EXTI_Line = EXTI_Line12 | EXTI_Line13 | EXTI_Line14 | EXTI_Line15 ;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设置为中断请求,非事件请求
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //设置中断触发方式为下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //外部中断使能
EXTI_Init(&EXTI_InitStructure); //初始化中断
//清空中断标志
EXTI_ClearITPendingBit(EXTI_Line12);
EXTI_ClearITPendingBit(EXTI_Line13);
EXTI_ClearITPendingBit(EXTI_Line14);
EXTI_ClearITPendingBit(EXTI_Line15);
}[/mw_shl_code]
[mw_shl_code=c,true]void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line12) != RESET)
{
}
////////////////////////////////////////
else if(EXTI_GetITStatus(EXTI_Line13) != RESET)
{
}
////////////////////////////////////////
else if(EXTI_GetITStatus(EXTI_Line14) != RESET)
{
}
////////////////////////////////////////
else if(EXTI_GetITStatus(EXTI_Line15) != RESET)
{
}
///////////////////////////////////////
EXTI_ClearITPendingBit(EXTI_Line12);
EXTI_ClearITPendingBit(EXTI_Line13);
EXTI_ClearITPendingBit(EXTI_Line14);
EXTI_ClearITPendingBit(EXTI_Line15);
}[/mw_shl_code]
现象:
进入EXTI15_10_IRQHandler后,每次不管是那根线触发中断,都只进第一个中断;也就是我把line12,13 ,14,15哪根线写在
|