初级会员

- 积分
- 54
- 金钱
- 54
- 注册时间
- 2014-12-17
- 在线时间
- 4 小时
|
5金钱
按键key2接PE15,按下时为低电平,查询方式时没有问题,但是想改成中断,却遇到问题
中断函数如下:
#include "exti.h"
#include "delay.h"
#include "key.h"
#include "led.h"
u8 KEY1_STATUS;
u8 KEY2_STATUS;
u8 KEY3_STATUS;
u8 KEY4_STATUS;
u8 KEY5_STATUS;
u8 KEY6_STATUS;
//初始化PE15为中断输入.
void EXTIX_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
//GPIOA.10 中断线以及中断初始化配置 发射按钮中断
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource15);
EXTI_InitStructure.EXTI_Line=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_InitStruct中指定的参数初始化外设EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //使能按键所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
}
void EXTI15_10_IRQHandler(void) //发射按钮中断服务程序
{
KEY1_STATUS = 0;
if (EXTI_GetITStatus(EXTI_Line10) != RESET)
{
delay_ms(20);
if(KEY2 ==0)
{
KEY1_STATUS = 1;
}
}
EXTI_ClearITPendingBit(EXTI_Line15); //清除EXTI10线路挂起位
}
主函数如下:
int main(void)
{
delay_init(); //延时初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
Led_Init(); //初始化led
Key_Init(); //初始化按键
Digitron_Init(); //初始化数码管
EXTIX_Init(); // 中断初始化
while(1)
{ static int temp = 0; //初始化静态变量
if(KEY1_STATUS == 1 && temp == 0)
{
Led_On(LED1);//点亮LED灯的程序,试过,没什么问题
}
}
}
|
|