인프런 커뮤니티 질문&답변
GPIO 에 대한 질문입니다.
해결된 질문
작성
·
27
답변 1
0
안녕하세요, 답변 남겨드립니다.
영상에서 말씀하신 “GPIOA~E가 있고, 각각이 16개 기능이 있어서 총 80개 핀이 칩에 담겨 있다”는 표현은, 조금 더 정확하게 말하면 “GPIO 포트가 5개 있고, 각 포트가 16개의 비트(라인)를 가진다 → 내부적으로 최대 80개의 GPIO 라인이 설계되어 있다”는 뜻이라고 이해하시면 좋습니다.
먼저 용어를 하나씩 정리해 보겠습니다.
STM32F103 같은 MCU에서 GPIOA, GPIOB, GPIOC … 이런 이름은 “포트(Port)” 이름입니다. 하나의 포트는 16비트 레지스터로 구성되어 있고, 그 16비트 각각이 하나의 GPIO 핀에 대응됩니다. 그래서
Port A → PA0, PA1, …, PA15 (총 16개)
Port B → PB0, PB1, …, PB15 (총 16개)
…
이런 식으로 최대 포트 A~E까지 있으면 이론적으로는
5개 포트 × 16비트 = 80개
즉, 내부 설계 관점에서 80개의 GPIO 라인이 존재한다고 말할 수 있습니다. 여기서 강의에서 “16개 기능”이라고 표현한 부분은 엄밀히 말하면 “16개의 GPIO 라인(=핀, 비트)”라고 보시는 게 더 정확합니다.
다만 중요한 포인트는, 데이터시트 상에 이렇게 80개의 GPIO가 “논리적으로” 정의되어 있다고 해서, 여러분이 쓰는 패키지(LQFP48, LQFP64, BGA 등)에 실제로 80개의 물리 핀이 다 나와 있다는 뜻은 아니라는 점입니다. 예를 들어 LQFP48 패키지를 쓰면, 내부에는 PA0~PE15까지 라인이 설계돼 있어도, 그 중 일부만 실제 패키지 패드에 연결되고 나머지는 “unbonded”라서 밖으로 안 나옵니다. 그래서 CubeMX에서 핀맵을 볼 때 어떤 포트 비트는 회색으로 막혀 있거나, 해당 패키지에서는 사용 불가로 표시되는 경우가 생깁니다.
또 하나 헷갈리기 쉬운 부분이 “하나의 PAx 핀이 여러 기능을 가진다”는 개념입니다. STM32에서는 각 핀이 기본적으로는 GPIO(일반 입출력)로 동작하지만, 같은 핀을 USART, SPI, I2C, TIM(타이머 채널) 같은 주변장치의 Alternate Function으로도 쓸 수 있습니다. 예를 들어 데이터시트에서
PA9 → GPIO 기능 + USART1_TX 기능
PA10 → GPIO 기능 + USART1_RX 기능
PB6 → GPIO 기능 + I2C1_SCL 기능
PB7 → GPIO 기능 + I2C1_SDA 기능
이런 식으로 표시됩니다. 이때 중요한 것은 “핀 개수가 늘어나는 것”이 아니라 “하나의 물리 핀에 여러 주변기능이 멀티플렉서로 매달려 있다”는 것입니다. 실제로는 PA9이라는 한 개 패드가 있고, 내부에서 “지금은 GPIO로 쓸래?”, “지금은 UART TX로 쓸래?”를 레지스터 설정으로 선택하는 구조입니다. 그래서
내부 GPIO 라인 수: 최대 80개 (포트 A~E × 16비트)
각 GPIO 라인에 매달린 주변 기능: 핀마다 2~4개 정도 Alternate Function이 붙어 있음
이렇게 보시면 됩니다.
현업 PCB 설계 관점에서 정량적으로 감을 잡으려면, 다음 순서를 머릿속에 그려보시면 좋습니다. 예를 들어 STM32F103 LQFP64 패키지를 써서 보드를 설계한다고 가정하겠습니다. 데이터시트 기준으로 이 패키지는 대략 51개 내외의 I/O가 외부로 나옵니다(숫자는 패키지에 따라 조금씩 다릅니다). 논리적으로는 80개의 GPIO 라인이 정의돼 있지만, 실제로는 그 중 50개 남짓만 패드로 나옵니다. 이 50개 중 일부는 전용 기능(전원, 그라운드, NRST, OSC_IN/OUT, BOOT0 등)으로 잡혀 있으니, 애플리케이션에서 걸 수 있는 “실질적인 GPIO/주변 핀 수”는 예를 들어 40개대 중반 정도가 됩니다. 이 40여 개 핀 각각에 대해 “여기는 UART TX/RX, 여기는 SPI, 여기는 ADC 입력, 남는 곳은 GPIO” 식으로 CubeMX에서 매핑하면서, 어떤 포트/비트가 실제로 쓰이는지 정리하는 것이 MCU Pin Mapping 작업입니다.
실제로 프로젝트를 하나 예로 들면,
모터 제어 PWM 출력에 6핀(3상 하이/로우)
UART 디버깅용 2핀(USART1_TX/RX)
I2C 센서용 2핀(SCL/SDA)
ADC 센싱용 4핀
LED 제어용 4핀
버튼 입력용 3핀
Ethernet, DAC, 기타 인터페이스 추가
이런 식으로 요구사항을 나열한 뒤, CubeMX에서
“PWM은 TIM1_CH1~3 / CH1N~3N이 있는 PA8~PA11 등”
“UART는 PA9/PA10 또는 PB6/PB7 중 패키지에서 가능한 조합”
“ADC는 ADC1_IN0~INx에 해당하는 PA0, PA1, PB0 …”
같은 식으로 배치를 합니다. 이 때 화면에서 보이는 PA0~PE15가 바로 강의에서 말한 “총 80개의 논리 GPIO 라인”이고, 그 중 회색으로 막힌 비트는 현재 패키지에서는 외부로 안 나온 비트라고 이해하시면 됩니다.
정리하면,
GPIOA~E가 있다 → 최대 5개의 GPIO 포트 모듈이 있다
각 포트는 16비트 폭이다 → PA0~PA15처럼 16개의 GPIO 라인이 있다
따라서 내부적으로는 5 × 16 = 80개의 GPIO 라인이 설계되어 있다
하지만 실제 패키지에서 외부로 나오는 물리 핀 수는 패키지에 따라 더 적을 수 있고, 각 핀은 GPIO 외에도 여러 Alternate Function을 선택해서 쓸 수 있다
이렇게 이해하시면 강의에서 하신 설명이 훨씬 자연스럽게 느껴지실 겁니다.




