GPIO: 핀 하나의 모든 설정
입력과 출력, 푸시풀과 오픈드레인, 풀업, 속도, 대체 기능. STM32 GPIO 레지스터 하나하나가 회로의 어떤 부분인지 정리했습니다.
설정 레지스터 (STM32F4 기준)
| 레지스터 | 설정 |
|---|---|
| MODER | 입력 / 출력 / 대체 기능(AF) / 아날로그 |
| OTYPER | 푸시풀 / 오픈드레인 |
| OSPEEDR | 출력 에지 속도 |
| PUPDR | 풀업 / 풀다운 / 없음 |
| IDR | 입력 값 읽기 |
| ODR | 출력 값 |
| BSRR | 원자적으로 비트 켜기 / 끄기 |
| AFR | 대체 기능 번호 (UART, SPI, 타이머 …) |
설정 고르는 법
- 버튼 입력: 입력 + 내부 풀업, 버튼은 그라운드로
- LED, MOSFET 게이트: 출력 푸시풀
- I2C: 대체 기능 + 오픈드레인 (+ 외부 풀업)
- ADC 입력: 아날로그 모드 (디지털 입력 회로를 끊어 누설과 노이즈 감소)
- 쓰지 않는 핀: 아날로그 모드 또는 출력 LOW
출력 속도
OSPEEDR을 높이면 에지가 날카로워져 고속 통신에 유리하지만 노이즈와 링잉이 커집니다. LED나 릴레이는 가장 낮게 둡니다.
원자적 쓰기
ODR |= x는 읽기-수정-쓰기라서 인터럽트와 경쟁할 수 있습니다. BSRR에 쓰면 한 번의 쓰기로 특정 비트만 바뀌어 안전합니다.