일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 아두이노 구조
- 3d print
- 엔더3
- Arduino
- 필라멘트
- 아두이노 레퍼런스
- 3d
- STM32
- 아두이노 소프트웨어
- nucleo-f446re
- 임베디드개발
- 3D프린트
- STM32CubeIDE
- 3d printer
- 아두이노 문법
- Arduino IDE
- PLA
- 아두이노 IDE
- reference
- 프린트
- 3D프린터
- Arduino Reference
- 엔더
- ender3
- printer
- 아두이노
- ENDER-3
- 3D 프린트
- 3D 프린터
- Today
- Total
키위백과의 잡동사니
STM32CubeIDE 예제: 외부 인터럽트(External Interrupt) 본문
이번에는 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 활성화 등 실제 시스템에서 자주 쓰이는 인터럽트의 흐름을 직접 경험해 보았습니다.
'프로젝트 > 밸런싱 로봇' 카테고리의 다른 글
STM32CubeIDE 예제: TIM2을 이용한 PWM으로 LD2 LED 깜빡이기 (0) | 2025.07.21 |
---|---|
PWM이란? (0) | 2025.07.20 |
인터럽트(Interrupt)란? - 사고가 났을 때 에어백이 펴지는 이유 (0) | 2025.07.19 |
STM32CubeIDE: ST-LINK 업그레이드 방법 (0) | 2025.07.17 |
STM32CubeIDE 예제: LED 제어 (0) | 2025.07.17 |