void EXTI_Configuration(void)
{
EXTI_InitTypeDef EXTI_InitStructure; //定义枚举类型
EXTI_DeInit();//初始化EXTI的缺省项
EXTI_ClearFlag(EXTI_Line0);//清除中断的标志位
//EXTI要设置的是中断线、工作模式、触发方式、中断线使能ENABLE DISABLE
//工作模式:事件Event,中断Interrupt
//触发方式:上升沿Rising、下降沿Falling、上升沿和下降沿Rising_Falling
EXTI_InitStructure.EXTI_Line = EXTI_Line0 ;//设置中断线 主要是看用到的那些引脚
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_PinSource0);
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;//定义枚举类型
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//设置优先级分组长度
//有5中选择:NVIC_PriorityGroup_0 NVIC_PriorityGroup_1
//NVIC_PriorityGroup_2 NVIC_PriorityGroup_3 NVIC_PriorityGroup_4
//优先级分组只能设置一次
//EXTI_Line0
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//对应数据手册来设置NVIC线
//对应数据手册 将我们要用到的EXTI事件线 对应到NVIC中
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级
//抢占优先级,也叫先占优先级 在0组的时候,我们可以设置的参数只能为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;//响应优先级
//响应优先级 在0组的时候,我们可以设置的参数是0~15
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
NVIC_Init(&NVIC_InitStructure);
if(EXTI_GetITStatus(EXTI_Line0) == SET)
{
// delay_ms(10);
// if(EXTI_GetITStatus(EXTI_Line0) == RESET)
{
temp1 = GPIOA->ODR;
temp1 = temp1 & 0X0100;
temp2 = GPIOD->ODR;
temp2 = temp2 & 0X0004;
if(temp1&&temp2)
{
GPIOA->ODR &= 0XFEFF;
GPIOD->ODR &= 0XFFFB;
}
else
{
GPIOA->ODR |= 1<<8;
GPIOD->ODR |= 1<<2;
}
// GPIOA->ODR &= 0XFEFF;
// GPIOD->ODR &= 0XFFFB;
EXTI_ClearFlag(EXTI_Line0); //清除中断标志(必须)
EXTI_ClearITPendingBit(EXTI_Line0);
}
程序如上,但是检测不到WK_UP按键,请问一下,检测高电平可以这样检测不啊?同样的程序,用来检测KEY1的时候,就可以检测到,但是出现的问题是不是很灵敏,请问应该怎么解决。。
|