EXTI中断/事件控制器,管理了控制器的20根中断/事件线。每个对应了一个边沿检测器,可以实现输入信号的上升沿或者下降沿检测,EXTI可以实现对每个中断或者事件的单独配置
这里中断通常是指GPIO的中断 事件可以是AD/DA转换 TIM定时器等···
通过书上的EXTI 功能框图可以清楚的知道配置EXTI中断的具体过程
这里拿EXTI控制GPIO为例:
编程要领:
1)初始化用来产生中断的GPIO
2)初始化EXTI
3)配置NVIC
4)编写中断函数
这里只贴出配置EXTI和中断函数的编写:
voidEXTI_Key_config(void) { GPIO_InitTypeDefGPIO_InitStructure; EXTI_InitTypeDefEXTI_InitStructure; //配置中断优先级EXTI_NVIC_Config(); //开启KEY相关GPIO的外设时钟RCC_APB2PeriphClockCmd( KEY1_GPIO_CLK, ENABLE); //选择控制的引脚GPIO_InitStructure.GPIO_Pin=KEY1_GPIO_PIN; //选择输出方式为浮空输出GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //设置引脚速率为50MHZGPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //调用库函数,初始化GPIOGPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure); //初始化EXTIGPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); RCC_APB2PeriphClockCmd( KEY1_GPIO_CLK, ENABLE); //配置EXTI的中断线EXTI_InitStructure.EXTI_Line=EXTI_Line0; //配置EXTI模式EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //配置触发类型EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStructure); }
voidEXTI0_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line0) !=RESET ) { LED_TOGGLE; } EXTI_ClearITPendingBit(EXTI_Line0); //清除中断}