注:STM32F407VGT6 with STM32F4 DSP and standard peripherals library v1.8.0
外部中断源码
//中断服务函数
void EXTI2_IRQHandler(void)
{
delay_ms(10);
if (KEY==0)
{
LED=~LED;
}
EXTI_ClearITPendingBit(EXTI_Line2);
}
//中断初始化函数
void EXTIX_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure; //中断初始化结构体定义
NVIC_InitTypeDef NVIC_InitStructure; //中断优先级结构体定义
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOE,ENABLE);
//使能IO口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
//使能SYSCFG时钟
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource2);
//配置GPIO与中断线的映射关系
//中断初始化结构体配置
EXTI_InitStructure.EXTI_Line=EXTI_Line2;
//选定为中断线2
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
//配置为中断模式
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
//配置中断触发方式
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
//使能中断线
EXTI_Init(&EXTI_InitStructure);
//初始化外部中断
//中断优先级结构体配置
NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;
//选定为中断通道2
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;
//配置抢占优先级(主优先级)
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x00;
//配置响应优先级(从优先级)
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
//使能中断通道
NVIC_Init(&NVIC_InitStructure);
//初始化中断优先级
}
还需在主函数中加入
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置优先级分组 EXTIX_Init(); //初始化外部中断
外部中断的一般配置步骤:
1.使能SYSCFG时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
2.初始化IO口为输入
GPIO_Init();
3.设置IO口与中断线的映射关系
大专栏 STM32 一个初始化EXTI的例子s="highlighter-rouge">SYSCFG_EXTILineConfig();
4.初始化线上中断,设置触发条件等
EXTI_Init();
5.配置中断分组(NVIC),并使能中断
NVIC_Init();
6.编写中断服务函数
EXTIx_IRQHandler();
7.清除中断标志位
EXTI_ClearITPendingBit();