GPIO 기초 정리: 입력·출력부터 풀업·풀다운까지

카드뉴스

GPIO는 핀 하나가 아니라 MCU와 회로 사이의 통로입니다

GPIO를 처음 배울 때 가장 많이 헷갈리는 부분은 “핀에 1을 쓴다”는 표현입니다. 실제 임베디드 코드에서는 물리 핀을 직접 만지는 것이 아니라, GPIO 주변장치의 레지스터 값을 바꾸고 그 결과가 출력 드라이버를 거쳐 핀 전압으로 나타납니다. 그래서 GPIO 기초는 LED를 켜는 예제 하나로 끝나지 않습니다. 코드, 레지스터, 출력 회로, 보드 전원, 외부 부품이 한 흐름으로 연결됩니다.

출력 모드에서는 MCU가 핀 상태를 만들어냅니다. LED, 릴레이 입력, 칩 셀렉트, 모스펫 게이트 제어처럼 외부 회로에 하이 또는 로우 신호를 내보내는 경우가 여기에 들어갑니다. 다만 출력 레지스터에 1을 썼다고 항상 원하는 동작이 보장되는 것은 아닙니다. 핀의 전압 레벨, 소스·싱크 전류 한계, 외부 저항, 부하 전류를 같이 봐야 합니다. 펌웨어에서 값은 맞게 썼는데 LED가 켜지지 않는다면 회로 연결, 극성, GND 공통 여부부터 확인해야 합니다.

출력 타입도 확인해야 합니다. push-pull은 하이와 로우를 모두 적극적으로 구동하고, open-drain은 보통 로우만 끌어내리며 하이 상태에는 풀업이 필요합니다. I2C처럼 여러 장치가 같은 선을 공유하는 회로에서는 이 차이가 중요합니다. GPIO 설정을 볼 때 mode만 보지 말고 output type과 speed까지 같이 보는 이유입니다.

입력 모드에서는 플로팅과 기준 전압을 먼저 봐야 합니다

입력 GPIO는 외부 버튼, 센서 출력, 인터럽트 신호를 읽을 때 사용합니다. 이때 중요한 문제는 핀을 아무 데도 안정적으로 묶어두지 않았을 때 생기는 플로팅입니다. 플로팅 상태에서는 입력 버퍼가 0과 1 사이에서 흔들릴 수 있고, 코드에서는 버튼이 눌린 것처럼 보이거나 노이즈가 들어온 것처럼 보일 수 있습니다.

풀업과 풀다운은 이 문제를 줄이기 위한 기본 설정입니다. 풀업은 기본 상태를 1 쪽으로, 풀다운은 기본 상태를 0 쪽으로 잡아줍니다. 버튼 회로를 볼 때는 “눌렀을 때 0이 되는가, 1이 되는가”를 먼저 그려봐야 합니다. 내부 풀업을 쓰는지 외부 저항을 쓰는지에 따라 회로 안정성, 소비 전류, 노이즈 여유가 달라질 수 있습니다.

Alternate Function을 모르면 핀이 안 움직이는 이유를 찾기 어렵습니다

같은 물리 핀이라도 항상 GPIO로만 쓰이지는 않습니다. UART TX/RX, SPI, I2C, Timer PWM, ADC 입력처럼 다른 주변장치 기능으로 바뀔 수 있습니다. 이 설정을 Alternate Function이라고 부릅니다. 따라서 핀 제어가 안 될 때는 단순히 코드 한 줄만 볼 것이 아니라 클럭 enable, mode 설정, output type, pull-up/down, speed, alternate function 번호를 순서대로 확인해야 합니다.

실무 디버깅에서는 데이터시트와 회로도를 함께 봅니다. 핀 이름이 맞는지, 보드 커넥터까지 실제로 이어지는지, 다른 주변장치와 충돌하지 않는지 확인해야 합니다. GPIO를 제대로 이해하면 비트 연산, 레지스터 제어, 인터럽트, 타이머 PWM까지 이어지는 임베디드 기초가 훨씬 덜 끊겨 보입니다.

댓글 남기기