STM32-嵌入式-03-EXTI中断的分析及应用

       EXTI中断/事件控制器,管理了控制器的20根中断/事件线。每个对应了一个边沿检测器,可以实现输入信号的上升沿或者下降沿检测,EXTI可以实现对每个中断或者事件的单独配置

    这里中断通常是指GPIO的中断   事件可以是AD/DA转换  TIM定时器等···

通过书上的EXTI 功能框图可以清楚的知道配置EXTI中断的具体过程

这里拿EXTI控制GPIO为例:

编程要领:

1)初始化用来产生中断的GPIO

2)初始化EXTI

3)配置NVIC

4)编写中断函数

这里只贴出配置EXTI和中断函数的编写:

void EXTI_Key_config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	EXTI_InitTypeDef EXTI_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;   
	//设置引脚速率为50MHZ
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
	//调用库函数,初始化GPIO
	GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);	
	
	//初始化EXTI
	GPIO_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);	
	
}
void EXTI0_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line0) != RESET )
	{
		LED_TOGGLE;
	}
		EXTI_ClearITPendingBit(EXTI_Line0);
        //清除中断
}

猜你喜欢

转载自blog.csdn.net/weixin_41445387/article/details/82819589