该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
把两个按键设置中断,分别是Line2和Line4,现在只有Line2有效,把Line2删了,Line4也会有效,但怎么才能让两个都有效呢?是哪里设置错了,还是内部冲突了?
下面是程序:
main()函数已设置:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
#include "exti.h"
void exti_init()
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Pin=k_left;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
EXTI_InitStructure.EXTI_Line=EXTI_Line2;
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_PortSourceGPIOE, GPIO_PinSource2);
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);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource4);
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
下面是中断入口函数:
void EXTI2_IRQHandler()
{
if(EXTI_GetITStatus(EXTI_Line2)==SET)
{
EXTI_ClearITPendingBit(EXTI_Line2);
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==Bit_RESET)
{
key=0.1;
}
while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0);
}
}
void EXTI4_IRQHandler()
{
if(EXTI_GetITStatus(EXTI_Line4)==SET)
{
EXTI_ClearITPendingBit(EXTI_Line4);
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==Bit_RESET)
{
key=0.2;
}
while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0);
}
}