임베디드 시스템에서 디지털 IO는 MCU가 외부 환경과 0 또는 1의 논리적 신호로 통신하는 가장 기본적인 수단이다.
여기서 0은 Low 전압 (보통 0V), 1은 **High 전압 (보통 VDD, 예: 3.3V)**를 의미한다.
교수님 예시:
"스위치를 누르면 입력(0 또는 1)이 감지되고, LED를 켜라 → 출력(1)을 발생시킴"
이를 통해 GPIO 핀은 입력도 되고 출력도 되는 양방향 통신의 물리적 포트임을 알 수 있다.
| 용어 | 의미 |
|---|---|
| VIL | 0으로 인식되는 최대 전압 (예: 0~0.8V) |
| VIH | 1로 인식되는 최소 전압 (예: 2.0~3.3V) |
| 불확정 영역 | 그 사이 전압 → 동작 보장 불가 (노이즈 발생 가능) |
| 출력 상태 | 설명 |
|---|---|
| 0 (Low) | GND 또는 0V에 가까운 전압 |
| 1 (High) | MCU의 공급 전압 VDD 수준 (예: 3.3V 또는 1.8V) |
교수님 강조:
1.8V 동작 MCU에 5V 입력 신호를 연결하면 오버볼티지로 칩이 손상될 수 있다.
이때 필요한 것이 바로 **레벨 컨버터(level shifter)**이다.

교수님 설명 요약:
"스위치는 눌렀다(0)/안 눌렀다(1)의 입력 신호를,
LED는 껐다(0)/켰다(1)의 출력 신호를 의미한다.
MCU는 이 양방향 디지털 신호를 입출력 핀을 통해 처리한다."
핀을 floating 상태로 두면 신호가 불안정해진다. 이를 방지하기 위해 내부 또는 외부 풀업/풀다운 저항을 사용한다.
| 방식 | 설명 | 입력 상태 |
|---|---|---|
| Pull-up | VDD 쪽으로 저항 연결 | 기본값 High |
| Pull-down | GND 쪽으로 저항 연결 | 기본값 Low |
교수님 예시:
"스위치가 안 눌렸을 때는 풀업 저항을 통해 High로 유지,
스위치를 누르면 GND로 연결되어 Low로 바뀐다."
LED는 동작 전압이 제한적이다. 예: 빨간 LED 1.8V, 파란 LED 2.7V
MCU가 3.3V 출력을 하면 저항이 없을 경우 과전류로 LED가 타버릴 수 있다.
예:
디지털 출력의 On/Off 비율을 조절하여 아날로그처럼 동작하게 만드는 방식이다.
| 용도 | 예시 |
|---|---|
| 밝기 조절 | LED 밝기 30% |
| 속도 제어 | 서보 모터 속도 50% |
주기(Cycle) 중 On의 비율을 Duty Cycle이라 하며,
예: 10ms 중 5ms가 On이면 → Duty = 50%
교수님 예시:
“밤에는 LED 밝기를 5%만 주고 싶다면, PWM으로 Duty를 조절하면 된다.”
| 레지스터 | 역할 |
|---|---|
| MODER | 입출력 방향 설정 |
| ODR | 출력 데이터 설정 |
| IDR | 입력 값 읽기 |
| PUPDR | Pull-up / Pull-down 설정 |
| OSPEEDR | 출력 속도 설정 |
| OTYPER | 출력 타입(Open-drain, Push-pull) |
MCU의 각 핀은 멀티플렉서를 통해 다양한 기능(GPIO, ADC, UART 등)을 선택할 수 있다.
핀 수를 줄여 칩 크기와 가격을 줄이기 위한 일반적인 설계 기법이다.
#define GPIOD_MODER (*(volatile unsigned long*)0x40020C00)
GPIOD_MODER |= (1 << 24); // PD12 출력으로 설정
→ 구조체 기반으로도 가능:
typedef struct {
volatile uint32_t MODER;
...
} GPIO_TypeDef;
#define GPIOD ((GPIO_TypeDef *)0x40020C00)
GPIOD->MODER |= (1 << 24);
#include "mbed.h"
DigitalOut led(PA_5);
int main() {
while (1) {
led = !led;
wait(0.5);
}
}
BusOut myleds(PA_5, PA_6, PA_7, PB_6);
myleds = 0b1010; // 한 줄에 4개의 LED 출력값 설정
BusIn을 사용하면 여러 스위치를 한꺼번에 읽을 수 있음BusOut으로 제어하면 숫자 패턴을 손쉽게 출력 가능예: 숫자 8은 모든 Segment ON (0b1111111),
숫자 1은 B, C만 ON (0b0000110)
| 항목 | 설명 |
|---|---|
| Digital IO | MCU가 외부 세계와 0/1 신호로 소통 |
| GPIO | General-Purpose I/O, 핀을 통해 입출력 |
| 입력 | 스위치, 센서 신호를 읽음 |
| 출력 | LED, 릴레이 등을 제어 |
| Pull-up/down | 핀의 기본 상태를 유지함 |
| PWM | 디지털로 아날로그처럼 동작 (밝기/속도 제어) |
| MUX | 핀에 다양한 기능을 선택적 할당 |
| 프로그래밍 | 레지스터 직접 접근 or Mbed API 사용 |
| BusIn/Out | 병렬 입출력 처리 |
| 7-Segment | LED를 디지털 패턴으로 구성된 숫자 표시장치 |