EXTI 인 터 럽 트 인 스 턴 스

프로그램 기능:EXTI 인 터 럽 트 를 사용 하여 버튼 밝기 LED 를 실현 합 니 다.버튼 을 한 번 누 르 면 LED 상태 가 한 번 뒤 집 힌 다.
프로그램 에서 GPIOE.2 의 중단 선 2 를 엽 니 다.하강 선 트리거 인 터 럽 트 로 설정 합 니 다.
//exti.h
#ifndef __EXTI_H__
#define __EXTI_H__

#include "stm32f10x.h"
#include "MyTime.h"
#include "bitband.h"

void EXTI_Configuration(void);
void EXTI2_IRQHandler(void) ;

#endif

//exti.c
#include "exti.h"
#include "key.h"

void EXTI_Configuration(void)
{
	EXTI_InitTypeDef EXTI_InitStruct;
	NVIC_InitTypeDef NVIC_InitStruct;
	//1)    IO     
	KEY_Configuration();
	
	//2)   IO      ,   IO           。
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);     
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);
	
	//3)       ,       
	EXTI_InitStruct.EXTI_Line = EXTI_Line2;
	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_InitStruct.EXTI_LineCmd = ENABLE;
	
	EXTI_Init(&EXTI_InitStruct);
	
	//4)      (NVIC),     		
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitStruct.NVIC_IRQChannel = EXTI2_IRQn; 
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	
	NVIC_Init(&NVIC_InitStruct);
}
	
//5)        。 
void EXTI2_IRQHandler(void) 
{ 
        MyDelay_ms(10);                                            //   
        if(KEY2==0)                                                //  KEY2 
        {     
					LED0=!LED0; 
        }                 
        EXTI_ClearITPendingBit(EXTI_Line2);    //   LINE2              
}

//main.c
#include "MyTime.h"
#include "exti.h"

int main(void)
{
	MySysTick_Init();
	//   
	GPIO_Configuration();
	
	EXTI_Configuration();	
	
	while(1);
	
}

주:IO 포트 외부 인 터 럽 트 를 사용 하 는 일반적인 절차: 
1)    IO     。 //KEY_Configuration
2)   IO      ,   IO           。 
3)       ,       。 
4)      (NVIC),     。 
5)        。

좋은 웹페이지 즐겨찾기