STM32F411配置外部中断(标准库)

前言

本期博客是纯代码分享

代码

和F1的区别是复用的变化改为使用以下函数

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);//SYSCFG时钟初始化

配置代码

void Exti_init(void)
{
    
    
	
	EXTI_InitTypeDef EXTI_InitStructure;
  	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);//SYSCFG时钟初始化
	KEY_Init();	
  	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource0);
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource1);
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource3);
	
	EXTI_InitStructure.EXTI_Line = EXTI_Line0;//外部中断线0
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能外部中断线1
	EXTI_Init(&EXTI_InitStructure);
	
	EXTI_InitStructure.EXTI_Line = EXTI_Line1;//外部中断线1
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能外部中断线1
	EXTI_Init(&EXTI_InitStructure);
	
	EXTI_InitStructure.EXTI_Line = EXTI_Line3;//外部中断线3
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能外部中断线1
	EXTI_Init(&EXTI_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;			
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;					
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								
  	NVIC_Init(&NVIC_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;			
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;				
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								
  	NVIC_Init(&NVIC_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;			
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	
 	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;					
 	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								
 	NVIC_Init(&NVIC_InitStructure);

	

}

中断代码

void EXTI0_IRQHandler(void)
{
    
    
	if(EXTI_GetFlagStatus(EXTI_Line0) == SET)//	确定中断线0的中断
	{
    
    
	  keyflag=1;
	}
	EXTI_ClearITPendingBit(EXTI_Line0);//清除中断标志
}

void EXTI1_IRQHandler(void)
{
    
    
	if(EXTI_GetFlagStatus(EXTI_Line1) == SET)//	确定中断线1的中断
	{
    
    
	  keyflag=2;
	}
	EXTI_ClearITPendingBit(EXTI_Line1);//清除中断标志
}

void EXTI3_IRQHandler(void)
{
    
    
	if(EXTI_GetFlagStatus(EXTI_Line3) == SET)//	确定中断线3的中断
	{
    
    
	  keyflag=3;
	}
	EXTI_ClearITPendingBit(EXTI_Line3);//清除中断标志
}

猜你喜欢

转载自blog.csdn.net/lllmeimei/article/details/132628303