목차
[WAT-STM32-2.8] 23번 예제 EXTI 외부 인터럽트 사용
WAT-STM32-2.8 예제 중 21번, 22번 예제를 포함하여 앞의 예제에서 스위치 입력 실험을 하였는데
스위치를 눌렀 때 LED 가 바로 반응하지 않고 약간 딜레이가 있는 듯 했을 겁니다.
이것은 폴링방식을 사용했기 때문입니다.
즉 스위치를 눌렀을 때 다른 기능을 수행하고 있었다면 그 기능이 완료된 후 스위치를 인식하는 방식이었습니다.
이번 예제부터는 외부인터럽트를 사용하여
스위치가 눌러지는 순간 바로 LED 를 켜보겠습니다.
아래 코드는 처음 보실 수 있는데, “외부 인터럽트 루틴”이라고 하며
외부 입력이 있을 때(여기서는 스위치가 눌렸을 때) 호출되는 함수입니다.
/**------------------------------------------------------- * @ EXTI0_IRQHandler * @ key 1 눌리면 ***------------------------------------------------------*/ void EXTI0_IRQHandler(void) /* Key 1 */ { if(EXTI_GetITStatus(EXTI_Line0) != RESET) { delay(150000); if(KEY1IBB == 0) { /* LED1 toggle */ LED1OBB = ~LED1OBB; //printf("\n\r Key 1 interrupt \n\r"); } while(KEY1IBB == 0); delay(150000); /* Clear the EXTI Line 0 */ /* 다음 인터럽트를 위해 초기화 */ EXTI_ClearITPendingBit(EXTI_Line0); } }
동작은 앞의 예제와 동일하며
KEY1이 눌리면 LED1이
KEY2가 눌리면 LED3이 토글 됩니다.
주요 코드
main.c 파일입니다.
// WAT_STM3228_23 EXIT (외부 인터럽트) 실험 // KEY1 눌리면 LED1 toggle // KEY2 눌리면 LED3 toggle // 출처: https://docs.whiteat.com/?p=4306 // #include "WAT_STM32F103RB_LIB.h" int main(void) { /* 모든 LED 초기화 */ WAT_STM32_LEDInit(LED1); WAT_STM32_LEDInit(LED2); WAT_STM32_LEDInit(LED3); .................. (중략)........... /* 인터럽트 초기화 */ NVIC_GroupConfig(); /* KEY 인터럽트 사용으로 초기화 */ SZ_STM32_KEYInit(KEY1, BUTTON_MODE_EXTI); SZ_STM32_KEYInit(KEY2, BUTTON_MODE_EXTI); while (1) { } }
STM32F10x_it.c 파일 (인터럽트 처리 파일)
/**------------------------------------------------------- * @ EXTI0_IRQHandler * @ key 1 눌리면 ***------------------------------------------------------*/ void EXTI0_IRQHandler(void) /* Key 1 */ { if(EXTI_GetITStatus(EXTI_Line0) != RESET) { delay(150000); if(KEY1IBB == 0) { /* LED1 toggle */ LED1OBB = ~LED1OBB; //printf("\n\r Key 1 interrupt \n\r"); } while(KEY1IBB == 0); delay(150000); /* Clear the EXTI Line 0 */ /* 다음 인터럽트를 위해 초기화 */ EXTI_ClearITPendingBit(EXTI_Line0); } }
결과화면
KEY1 이 눌리면 LED1이 토글,
KEY2 가 눌리면 LED3이 토글됩니다.
WAT-STM32-2.8보드 전체 예제
제품 구매
WAT-STM32-2.8 [STM32F103RB Board + 2.8인치 TFT LCD 터치 세트] 는 https://kit128.com/goods/view?no=221 에서 구매하실 수 있습니다.
좋은 자료 감사합니다.