按键运用中断点亮LED

主程序

#include "sys.h"
#include "EXTI.h"
#include "led.h"

int main(void)
{
	//1.配置优先级分组
	NVIC_Configuration();
	Led_Init();
	EXTI_KEY_Init();
	while(1)
	{
	
	
	
	}

}

 void EXTI15_10_IRQHandler(void)
{


	if(EXTI_GetFlagStatus(EXTI_Line10) == 1)
 {
  LED = 0;
 EXTI_ClearFlag(EXTI_Line10);
 
 }
 
if(EXTI_GetFlagStatus(EXTI_Line11) == 1)
 {
  LED = 1;
 EXTI_ClearFlag(EXTI_Line11);
 
 }
 
 
}

LED灯初始化

#include "sys.h"
#include "EXTI.h"
#include "led.h"

int main(void)
{
	//1.配置优先级分组
	NVIC_Configuration();
	Led_Init();
	EXTI_KEY_Init();
	while(1)
	{
	
	
	
	}

}

 void EXTI15_10_IRQHandler(void)
{


	if(EXTI_GetFlagStatus(EXTI_Line10) == 1)
 {
  LED = 0;
 EXTI_ClearFlag(EXTI_Line10);
 
 }
 
if(EXTI_GetFlagStatus(EXTI_Line11) == 1)
 {
  LED = 1;
 EXTI_ClearFlag(EXTI_Line11);
 
 }
 
 
}

中断初始化

#include "EXTI.h"


void EXTI_KEY_Init(void)//配置PB11为下降沿触发
{
	GPIO_InitTypeDef GPIO_InitStructure; 
	EXTI_InitTypeDef EXTI_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;

	
//2.配置管脚时钟和复用时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO,ENABLE);

//3.配置GPIO为上拉输入
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_10; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
	GPIO_Init(GPIOB, &GPIO_InitStructure); 

//4.配置GPIO口为外部中断模式
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource11);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource10);
	
//5.配置EXTI中断触发模式
	EXTI_InitStructure.EXTI_Line = EXTI_Line11 ;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);
	
	EXTI_InitStructure.EXTI_Line = EXTI_Line10;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);
	
//6.配置EXTI的中断优先级

	NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);

}

猜你喜欢

转载自blog.csdn.net/wanwan_xiuxiu/article/details/80385011
今日推荐