[WAT-STM32-2.8]23번 예제 EXTI 외부인터럽트 사용

[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 터치 세트

제품 구매

WAT-STM32-2.8 [STM32F103RB Board + 2.8인치 TFT LCD 터치 세트] 는 https://kit128.com/goods/view?no=221 에서 구매하실 수 있습니다.

1 댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다