[임베디드] GPIO란 무엇인가? 2
이전 GPIO란 무엇인가? 의 GPT 답변에 이어 조금 더 자세히, 코드도 알아보았다.
GPIO (General Purpose Input/Output)는 MCU가 외부와 신호를 주고받기 위한 다목적 핀이다.
이 핀을 입력 모드(input)로 설정하면 센서의 값을 읽을 수 있고,
출력 모드(output)로 설정하면 릴레이, LED, 모터 등을 제어할 수 있다.
1.1 입력 모드
스위치나 센서를 읽을 때 사용한다.
입력 모드는 외부에서 전압이 걸리면 MCU가 이를 감지하는 방식이다. WET 접점을 감시한다고 볼 수 있다.
하지만 여기에는 '풀업(Pull-up)' 또는 풀다운(Pull-down) 저항 개념이 꼭 필요하다.
1.1.1 풀업 / 풀다운 저항이란?
입력 핀은 신호가 연결되지 않으면 부동(floating) 상태가 된다.
이때 전기적 잡음에 따라 입력 값이 랜덤하게 튈 수 있는데, 이를 막기 위해 풀업 또는 풀다운 저항을 사용한다.
MCU는 핀의 전압을 측정하다가 기준(3.3V시스템 기준 1.5~2V) 보다 높으면 High(1) 낮으면 Low(0)으로 읽는다.
Pull-up 방식 : 입력이 없을 때 HIGH 유지, 입력 시 LOW
즉 LOW(평시) -> HIGH(입력발생) -> LOW(평시)
Pull-down 방식 : 입력이 없을 때 LOW 유지
작 HIGH(평시) -> LOW(입력발생) -> HIGH(평시)
예시로 스위치를 눌렀을 때만 GND가 연결되어 LOW로 읽히는 회로를 들 수 있다.
(출처 : https://velog.io/@audgus47/%ED%92%80%EC%97%85-%ED%92%80%EB%8B%A4%EC%9A%B4-%ED%94%8C%EB%A1%9C%ED%8C%85)
---
1.2 출력 모드: 장치 제어하기
GPIO를 출력 모드로 설정하면, HIGH (3.3V 또는 5V) 또는 LOW (0V) 전압을 출력해 외부 장치를 동작시킬 수 있다.
예: GPIO 핀을 HIGH로 만들면 LED가 켜지고, LOW면 꺼진다.
코드 예시 (STM32 HAL):
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // HIGH 출력
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // LOW 출력
코드 예시 (아두이노):
// 핀 13번(내장 LED)을 출력으로 설정하고 ON/OFF 제어하기
void setup() {
pinMode(13, OUTPUT); // 13번핀을 출력으로 설정
}
void loop() {
digitalWrite(13, HIGH); // 13번 핀에 3.3V or 5V 출력지시 → LED ON
delay(1000); // 10초간 딜레이
digitalWrite(13, LOW); // 0V 출력 → LED OFF
delay(1000); // 10초간 딜레이
}
1.3 인터럽트란?
MCU는 일반적으로 while(1) 루프에서 명령을 반복하지만,
외부 이벤트(버튼 누름 등)를 감지하기 위해 인터럽트를 사용하면 더 빠르고 효율적으로 반응할 수 있다.
1.3.1 인터럽트 흐름
버튼 눌림 → 신호 LOW 발생 → 인터럽트 요청(IRQ) → MCU 즉시 반응 → 핸들러 함수 실행
1.3.2 인터럽트 설정 핵심 요소
엣지(Edge) 감지: Rising Edge(LOW→HIGH), Falling Edge(HIGH→LOW)
인터럽트 핸들러: 이벤트가 발생했을 때 실행되는 함수
NVIC 설정: 우선순위와 활성화
---
1.4 실생활 예시
버튼을 누르면 LED가 켜진다 → GPIO 입력 + 출력
온도센서가 일정 수준 이상이면 경고 출력 → GPIO + 인터럽트
릴레이 모듈 ON/OFF → 출력 HIGH/LOW 제어
---
1.6 참고자료
Understanding GPIO | EmbetronicX
https://embetronicx.com/tutorials/tech_devices/understanding-the-microcontroller-gpio-gpio-working-explained/
STM32 External Interrupt Tutorial – ControllersTech
https://controllerstech.com/external-interrupts-in-stm32/
Pull-up/Pull-down Explained – SparkFun
https://learn.sparkfun.com/tutorials/pull-up-resistors/all