此处配置GPA0引脚口为按键,下降沿触发
1.开启GPIO时钟开启EXTI相关时钟
RCC_ APB2PeriphClockCmd(RCC_ APB2Periph_ SYSCFG, ENABLE);
2.对应引脚使用GPIO_init();配置为输入模式
3.使用SYSCFG_EXTILineConfig() ;
选择一个引脚连接对应的一个外部中断线(EXTI0-15)
4.使用EXTI_Init();选择模式(中断模式,事件模式(不会以中断机制处理))(上升沿,下降沿,边缘触发);
5.配置刚开启的外部中断优先级(中断管理,优先级管理)涉及:仲裁器 配置中断优先级函数NVIC_Init();
void keyinit(void)
{
//定义语句,三个结构体 io exti nvic
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
//使能时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
//将pa0引脚配置如下
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //输入模式
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //上下拉选择 浮空
GPIO_Init(GPIOA, &GPIO_InitStructure);
//将pa0连接到外部中断exti0(重要!)
//SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOx(引脚组), EXTI_PinSourcex(引脚口));
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
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;//ENABLE开启
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//全局编号 6
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;//抢占优先级(第一优先级)
//0到15级,值越低,优先级越高
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;//响应优先级(第二优先级)
//0到15级,值越低,优先级越高
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
中断服务函数
void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
//响应处理代码
EXTI_ClearITPendingBit(EXTI_Line0);//清除中断标志
}
}

EXTI模块使用

此处配置GPA0引脚口为按键,下降沿触发
1.开启GPIO时钟开启EXTI相关时钟
RCC_ APB2PeriphClockCmd(RCC_ APB2Periph_ SYSCFG, ENABLE);
2.对应引脚使用GPIO_init();配置为输入模式
3.使用SYSCFG_EXTILineConfig() ;
选择一个引脚连接对应的一个外部中断线(EXTI0-15)
4.使用EXTI_Init();选择模式(中断模式,事件模式(不会以中断机制处理))(上升沿,下降沿,边缘触发);
5.配置刚开启的外部中断优先级(中断管理,优先级管理)涉及:仲裁器 配置中断优先级函数NVIC_Init();
void keyinit(void)
{
//定义语句,三个结构体 io exti nvic
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
//使能时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
//将pa0引脚配置如下
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //输入模式
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //上下拉选择 浮空
GPIO_Init(GPIOA, &GPIO_InitStructure);
//将pa0连接到外部中断exti0(重要!)
//SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOx(引脚组), EXTI_PinSourcex(引脚口));
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
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;//ENABLE开启
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//全局编号 6
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;//抢占优先级(第一优先级)
//0到15级,值越低,优先级越高
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;//响应优先级(第二优先级)
//0到15级,值越低,优先级越高
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
中断服务函数
void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
//响应处理代码
EXTI_ClearITPendingBit(EXTI_Line0);//清除中断标志
}
}

EXTI模块使用

举报