키위백과의 잡동사니

STM32CubeIDE 예제: 외부 인터럽트(External Interrupt) 본문

프로젝트/밸런싱 로봇

STM32CubeIDE 예제: 외부 인터럽트(External Interrupt)

KiwiPedia 2025. 7. 19. 23:27

이번에는 STM32의 EXTI(External Interrupt)를 활용해서, Blue Push Button(B1)을 누르면 LED(LD2)가 반응하도록 만들어보겠습니다.

 

EXTI란?

EXTI (External Interrupt)는 외부에서 들어오는 신호(버튼, 센서 등)에 반응하는 인터럽트를 처리하는 기능입니다.
STM32에서는 각 GPIO 핀에 EXTI 라인을 연결해 이벤트를 감지할 수 있도록 해줍니다.

간단히 말해, 특정 GPIO에 이벤트가 발생하면 (예: 버튼을 누르면), MCU가 이를 감지하고 미리 설정한 함수를 실행하는 거예요.

 

1. 기존 프로젝트 닫고 새 프로젝트 생성

먼저 기존 프로젝트를 닫고 새로운 프로젝트를 생성합니다. 저는 프로젝트명을 EXTI로 지정했습니다.

 

2. PC13에 B1 버튼 연결 확인

EXTI.ioc 설정 화면에서 PC13 핀에 B1 [Blue PushButton]이 연결된 것을 확인할 수 있습니다.

 

3. GPIO 설정 확인

좌측 메뉴에서 System Core > GPIO를 클릭하면 GPIO 설정 목록이 나타납니다.

 

4. PC13 설정 확인

  • GPIO mode: External Interrupt Mode with Falling edge trigger detection
  • GPIO Pull-up/Pull-down: No pull-up and no pull-down
  • User Label: B1 [Blue PushButton]

해당 설정 그대로 사용합니다.

 

5. NVIC 인터럽트 활성화

System Core > NVIC 탭으로 이동한 후 EXTI line[15:10] interrupts 항목을 체크하여 활성화합니다.

 

6. main.c에 flag 변수 추가

전역 변수로 uint8_t flag = 0;를 선언합니다. 이 변수는 인터럽트가 발생했는지 확인하는 용도로 사용됩니다.

uint8_t flag = 0;
 

7. main 함수 수정

while 루프 안에서 flag 값이 1이면 LED를 토글하고 다시 0으로 초기화하는 코드를 작성합니다.

while (1)
{
	if (1 == flag)
	{
		HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
		flag = 0;
	}
}

 

 

8. EXTI 콜백 함수 작성

 

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	flag = 1;
}

외부 인터럽트가 발생하면 이 함수가 호출되고, flag가 1로 설정됩니다.

 

9. 결과 확인

보드의 하늘색 버튼(B1)을 누르면 LED(LD2)가 반짝이는 것을 확인할 수 있습니다.

버튼을 누를 때마다 외부 인터럽트가 발생하고, 그에 따라 LED가 토글됩니다.

 

이번 실습을 통해 외부 인터럽트 설정, 콜백 함수 구현, NVIC 활성화 등 실제 시스템에서 자주 쓰이는 인터럽트의 흐름을 직접 경험해 보았습니다.

Comments