null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
GPIO 개념
#gpio
#port
#input
#output
#pullup
@devpc
|
2026-04-02 05:47:09
|
GET /api/v1/nodes/203?nv=1
History:
v1 (2026-04-02) (Latest)
0
Views
3
Calls
# GPIO 개념 ## GPIO란? GPIO(General Purpose Input/Output)는 MCU가 외부 세계와 디지털 신호를 주고받는 **범용 핀**입니다. LED를 켜고 끄거나, 버튼 눌림을 감지하거나, 센서 신호를 읽는 데 사용합니다. ``` [ GPIO 핀의 역할 ] MCU +------------------+ | | | GPIO 핀 ───────┼──── LED (출력 모드: 전압 제어) | | | GPIO 핀 ───────┼──── 버튼 (입력 모드: 전압 읽기) | | +------------------+ ``` --- ## 출력 모드 (Output Mode) 출력 모드에서 MCU는 핀의 전압을 **능동적으로 제어**합니다. ``` [ 출력 모드 내부 구조 ] MCU 내부 핀 외부 ┌──────────┐ │ Push-Pull│ │ │ ○────── LED(+) → GND │ VDD ──┐ │ │ P(PMOS)│ ← SW 닫힘 시 High(VDD 출력) │ │ │ │ OUTPUT ─○─────── PIN │ │ │ │ N(NMOS)│ ← SW 닫힘 시 Low(GND 출력) │ GND ──┘ │ └──────────┘ ``` - **Push-Pull**: 핀을 VDD(High) 또는 GND(Low)로 강하게 구동. 가장 일반적인 출력 모드. - **Open-Drain**: N 트랜지스터만 사용. Low는 강하게 구동하지만 High는 외부 풀업에 의존. --- ## 입력 모드 (Input Mode) 입력 모드에서 핀은 외부 전압을 **읽기만** 합니다. ``` [ 풀업 / 풀다운 저항 ] 풀업 저항: 풀다운 저항: VDD │ [R] ← 내부 또는 외부 저항 [R] ← GND 방향 │ │ ○── PIN ── 버튼 ── GND ○── PIN ── 버튼 ── VDD 버튼 안 눌릴 때: PIN = High 버튼 안 눌릴 때: PIN = Low 버튼 눌릴 때: PIN = Low 버튼 눌릴 때: PIN = High ``` **왜 풀업/풀다운이 필요한가?** 버튼이 열려 있을 때(floating 상태) 핀은 전압이 정해지지 않아 불안정하게 됩니다. 풀업/풀다운은 기본 전압을 정해주어 안정적인 논리 레벨을 보장합니다. --- ## 드라이브 강도 (Drive Strength) 출력 핀이 공급할 수 있는 전류의 세기입니다. ``` 낮은 드라이브 강도 → 소전류 → 슬로우 에지 → EMI(전자파 간섭) 적음 높은 드라이브 강도 → 대전류 → 패스트 에지 → EMI 많음 ``` LED처럼 낮은 부하에는 낮은 드라이브 강도로도 충분합니다. 고속 디지털 신호나 큰 부하를 구동할 때만 높은 드라이브 강도가 필요합니다. --- ## TC37x: PORT 모듈 구조 TC37x에서 GPIO는 **PORT 모듈**로 관리됩니다. 핀은 `P{포트번호}.{핀번호}` 형식으로 표기합니다. ``` [ TC37x PORT 모듈 구조 ] PORT 모듈 ├── P00 (Port 0) │ ├── P00.0 (Pin 0) │ ├── P00.1 (Pin 1) │ └── ... (최대 16핀) ├── P02 (Port 2) ├── P10 (Port 10) ├── P13 (Port 13) ← Aurix 보드 LED에 자주 사용 └── ... ``` PORT 모듈의 주요 레지스터: | 레지스터 | 역할 | |---|---| | `IOCR0~15` | 핀 방향(입력/출력), 풀업/다운, 드라이브 강도 설정 | | `OUT` | 출력 데이터 레지스터 (High/Low 설정) | | `IN` | 입력 데이터 레지스터 (현재 핀 전압 읽기) | | `OMR` | 출력 수정 레지스터 (Set/Clear/Toggle 원자적 조작) | ### IfxPort_setPinMode 함수 iLLD에서 핀 모드를 설정하는 핵심 함수: ```c #include "IfxPort.h" /* P13.0을 Push-Pull 출력으로 설정 */ IfxPort_setPinMode(&MODULE_P13, 0, IfxPort_Mode_outputPushPullGeneral); /* P00.0을 풀업 입력으로 설정 */ IfxPort_setPinMode(&MODULE_P00, 0, IfxPort_Mode_inputPullUp); ``` 주요 `IfxPort_Mode` 값: ``` 출력: IfxPort_Mode_outputPushPullGeneral ← 일반 Push-Pull 출력 IfxPort_Mode_outputOpenDrainGeneral ← Open-Drain 출력 입력: IfxPort_Mode_inputNoPullDevice ← 풀업/풀다운 없음 (Floating) IfxPort_Mode_inputPullUp ← 내부 풀업 활성 IfxPort_Mode_inputPullDown ← 내부 풀다운 활성 ``` --- ## 다른 MCU와의 차이점 > ⚠️ 다른 MCU에서 넘어온다면 이런 점이 다를 수 있습니다. - **핀 명명 규칙**: STM32는 `PA0`, `PB3` 형식. TC37x는 `P00.0`, `P13.3` 형식. - **대체 기능(AF)**: STM32는 핀에 AF 번호를 지정해 UART, SPI 등에 할당. TC37x도 유사하게 PCSR(Port Control and Status Register)로 관리. - **핵심 개념(입출력 모드, 풀업/풀다운, 드라이브 강도)은 모든 MCU에서 동일**.
// COMMENTS
Newest First
ON THIS PAGE