목차
[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 에서 구매하실 수 있습니다.


좋은 자료 감사합니다.