카테고리 없음

[6주차] STM32 개발환경과 라즈베리파이 GPIO 이해

2026. 5. 3. 22:45

VEDA 주간 학습 정리

[6주차] STM32 개발환경과 라즈베리파이 GPIO 이해

이번 주 학습을 한 문장으로 정리하면: STM32 개발환경을 안정적으로 준비하고, 통신 방식의 큰 흐름과 GPIO 안정화 개념까지 함께 정리한 주간

작성일: 2026.04.30

이번 주 학습 목표

  • 직렬통신, SPI, 병렬통신의 차이를 큰 흐름으로 정리하기
  • STM32CubeIDE와 STM32CubeF4 패키지 기반 개발환경을 안정적으로 준비하기
  • STM32 프로젝트 생성 시 보드 선택과 펌웨어 버전 관리 흐름 익히기
  • 풀업 저항과 풀다운 저항의 차이를 이해하고 GPIO 입출력 개념 정리하기

1. 통신 종류 먼저 정리하기

STM 보드를 다루기 전에, 장치들이 어떤 방식으로 데이터를 주고받는지부터 정리했다. 통신 방식은 단순히 선을 어떻게 연결하느냐의 문제가 아니라, 시스템 구조와 속도, 확장성, 제어 방법까지 함께 결정하는 기준이 된다.

통신 방식 핵심 특징 정리 포인트
직렬통신 한 줄의 데이터 흐름을 따라 순서대로 전송한다 UART는 비동기, USART는 동기 방식까지 확장해서 이해할 수 있다
SPI 통신 데이터 라인과 제어 라인이 분리되어 있고, 마스터 1대가 여러 슬레이브를 제어할 수 있다 1대 N 구조를 만들기 좋고, 임베디드 주변장치 연결에서 자주 등장한다
병렬통신 여러 선을 묶어 한 번에 데이터를 전달한다 속도는 빠르지만 배선과 자원 관리 측면에서는 더 복잡해질 수 있다

2. STM32 개발환경 준비

이번 주 실습 보드는 STM32F401RETX였다. STM32 개발은 보드만 있다고 바로 시작되는 구조가 아니라, IDE와 펌웨어 패키지 버전까지 함께 맞춰야 안정적으로 자동 코드 생성과 디버깅을 진행할 수 있다.

  1. STM32CubeIDE 설치: 기본 개발 환경을 먼저 준비한다. 통합개발환경 내려받기 링크
  2. STM32CubeF4 패키지 확보: STM32F4 계열 보드를 위한 펌웨어 리소스를 준비한다. MCU 패키지 내려받기 링크
  3. IDE에 로컬 패키지 등록: 보드 설정과 코드 자동 생성을 위해 필요한 패키지를 IDE에 연결한다.
  4. 설치 상태 확인: 실제 프로젝트 생성 전에 패키지가 정상 인식되는지 확인한다.
STM32CubeF4 패키지 다운로드 화면

STM32CubeF4 패키지를 먼저 준비해 두면 이후 프로젝트 설정 과정이 훨씬 매끄럽다.

STM32CubeIDE 패키지 매니저 화면

IDE 안에서는 Embedded Software Package Manager를 통해 로컬 패키지를 직접 등록할 수 있다.

STM32 로컬 패키지 열기 화면

다운로드한 패키지를 IDE에서 직접 불러와 연결하면 원하는 버전을 기준으로 환경을 맞출 수 있다.

STM32 패키지 설치 확인 화면

패키지 설치가 끝나면 프로젝트 생성 전에 버전이 정상 등록되었는지 확인해 두는 것이 중요하다.

3. STM32 프로젝트 생성 흐름

STM32 프로젝트는 그냥 새 프로젝트를 여는 것에서 끝나지 않는다. 보드를 정확히 선택하고, 펌웨어 버전을 맞추고, 기본 주변장치 초기화 옵션까지 검토해야 이후의 설정이 꼬이지 않는다.
이번 주에는 STM IDE와 Cube 버전을 맞추고 프로젝트를 생성하는데 시간을 많이 썼다.

  • 새 STM 프로젝트를 생성한 뒤, 사용 보드를 검색해 정확한 타겟을 선택한다.
  • 프로젝트 생성 시점부터 펌웨어 버전을 1.28.0 기준으로 맞춘다.
  • Initialize all peripherals with their default Mode 옵션은 No로 두고 시작한다.
  • .ioc 파일의 Project Manager에서 펌웨어 패키지 이름과 버전을 다시 한 번 확인한다.
STM32 보드 검색 화면

프로젝트 시작점은 보드 선택이다.
아쉽게도 보드 선택 이미지는 없고 그 다음 단계부터 설명대로 하면 된다.

STM32 펌웨어 버전 선택 화면

프로젝트 생성 단계에서부터 사용할 펌웨어 버전을 명확히 고정해 두는 습관이 중요했다.

STM32 기본 초기화 모드 설정 화면

STM Cube에서 설정과 펌웨어 버전이 옳바르게 적용되었는지 확인한다.

정리 메모

STM32CubeIDE는 자동 생성 기능이 강력하지만, 그만큼 시작할 때 버전과 옵션을 명확히 관리해야 한다. 이번 주에는 "프로젝트가 만들어지는 과정 자체를 이해하는 것"이 실습만큼 중요하다는 점이 인상적이었다.

4. ST-Link 업그레이드 확인

보드에 코드를 올리거나 디버깅을 시작할 때는 ST-Link 상태도 함께 확인해야 한다. 처음 연결할 때 업그레이드 안내가 보이면 바로 반영해 두는 편이 이후 흐름을 훨씬 단순하게 만든다.

ST-Link 업그레이드 안내 화면

디버깅 전 업그레이드 안내가 보이면 미루지 않고 먼저 반영하는 편이 좋다.

ST-Link 업그레이드 도구 화면

IDE의 Help > ST-Link Upgrade 경로에서 업데이트 모드로 진입해 펌웨어를 정리할 수 있다.

5. 풀업과 풀다운

하드웨어 입력을 받을 때는 단순히 스위치를 연결하는 것만으로 끝나지 않는다. 입력 핀이 애매한 상태로 떠 있으면 값이 흔들릴 수 있기 때문에, 기본 상태를 분명히 만들어 주는 저항 구성이 필요하다. 여기서 등장하는 개념이 바로 풀업 저항과 풀다운 저항이다.

구분 기본 상태 버튼 동작 시 특징
풀업 (Pull-up) 기본값이 High 눌렀을 때 Low 노이즈에 강하고 MCU 내부 저항을 활용하는 경우가 많다
풀다운 (Pull-down) 기본값이 Low 눌렀을 때 High 직관적이지만 외부 저항이 필요한 경우가 많다

풀업 저항 (Pull-up)

신호선을 전원 쪽으로 끌어올려 기본 상태를 High로 두는 방식이다. 스위치를 누르면 입력이 Low로 바뀌는 active low 구조이며, 일반적으로 가장 많이 사용된다.

[ 스위치 OFF (기본 상태) ]          [ 스위치 ON (눌렀을 때) ]
     Vcc (5V)                          Vcc (5V)
      |                                 |
    [ R ] (저항)                      [ R ] (저항)
      |                                 |
      +------> [입력 핀: 1 (High)]       +------> [입력 핀: 0 (Low)]
      |                                 |
    --+-- (스위치 열림)                --+-- (스위치 닫힘)
                                        |
                                       GND (0V)

풀다운 저항 (Pull-down)

신호선을 그라운드 쪽으로 끌어내려 기본 상태를 Low로 두는 방식이다. 스위치를 누르면 High가 되는 active high 구조이며, 직관적이지만 외부 저항 구성이 필요한 경우가 많다.

[ 스위치 OFF (기본 상태) ]          [ 스위치 ON (눌렀을 때) ]
     Vcc (5V)                          Vcc (5V)
      |                                 |
    --+-- (스위치 열림)                --+-- (스위치 닫힘)
      |                                 |
      +------> [입력 핀: 0 (Low)]        +------> [입력 핀: 1 (High)]
      |                                 |
    [ R ] (저항)                      [ R ] (저항)
      |                                 |
     GND (0V)                          GND (0V)

버튼을 누르지 않았을 때는 안정적으로 High를 유지하고, 눌렀을 때만 Low로 떨어지는 구조라서 입력 상태를 예측하기 쉽고, 내부 풀업을 지원하는 MCU도 많기 때문이다.

입력 설계에서 기억할 점

  • 입력 핀은 기본 상태가 분명해야 한다
  • 버튼 입력은 논리값뿐 아니라 하드웨어 안정성까지 함께 고려해야 한다
  • MCU 내부 기능을 활용하면 회로를 더 간단하게 구성할 수 있다

마무리

이번 주는 STM32로 넘어오면서 개발환경 준비의 중요성을 제대로 체감한 시간이었다. 단순히 IDE를 설치하는 것을 넘어, 보드에 맞는 펌웨어 패키지와 프로젝트 생성 옵션, 디버거 상태까지 함께 관리해야 실습이 안정적으로 이어진다는 점을 확인할 수 있었다.

동시에 GPIO 입력 회로에서 풀업과 풀다운이 왜 필요한지도 함께 정리하면서, 임베디드 개발은 소프트웨어와 하드웨어를 분리해서 보기보다 하나의 흐름으로 이해해야 한다는 점을 다시 느꼈다. 다음 주에는 실제 주변장치 제어와 핀 설정이 더 익숙해질 수 있도록 이어서 정리해 보고 싶다.