STM32 에코시스템

YUN·2025년 8월 18일

[기본적인 CS]

목록 보기
14/21

STM32CubeIDE를 이용한 STM32 따라하기(김남수, 이진형) 책을 읽으며 정리한 내용입니다.


1. 하드웨어 (Hardware)

STM32 MCU 패밀리

  • Cortex-M0/M0+, M3, M4, M7, M33, H7, U5 등 다양한 라인업

개발 보드

  • Nucleo Board: 저가형, 아두이노 핀 호환, 빠른 프로토타이핑

  • Discovery Kit: 디스플레이, 센서 등 부가 장치 포함

  • Eval Board: 상용에 가까운 기능, 모든 주변장치 테스트 가능

2. 소프트웨어 (Software Tools)

(1) STM32CubeIDE

ST 공식 무료 IDE (Eclipse 기반, GCC 사용)

디버깅, 코드 생성, 프로젝트 관리 지원등의 역할을 한다.

(2) STM32CubeMX

핀 설정, 클럭 트리 구성, 주변장치 초기화 자동 코드 생성

HAL/LL 드라이버 기반 코드를 자동 생성한다.

(3) STM32CubeProgrammer

플래싱 및 펌웨어 업로드, 메모리 접근, 보안 설정 가능

(4) STM32CubeMonitor

실시간 변수 모니터링 & 시각화 툴

(5) 부가 설명

툴 이름역할사용 예시포함/관계
STM32CubeIDESTM32용 통합 개발 환경 (IDE). 코드 작성, 빌드, 디버깅까지 다 할 수 있음. (Eclipse + GCC + GDB 기반)펌웨어 코드 작성 후 F5로 빌드 & ST-LINK로 디버깅CubeMX 기능이 내장되어 있음 (= CubeMX를 IDE 안에서 바로 사용 가능)
STM32CubeMX핀/클럭/주변장치 초기화 코드 생성기. GUI로 핀맵 설정하면 자동으로 HAL/LL 기반 초기화 코드 만들어 줌GPIO를 입력/출력으로 설정하고, USART2를 115200bps로 세팅 후 초기화 코드 생성단독 프로그램이기도 하고, CubeIDE 안에도 내장되어 있음
STM32CubeProgrammerMCU에 펌웨어 업로드(플래싱) & 메모리 접근 툴. ST-LINK, JTAG, UART, DFU(USB) 등 다양한 방법으로 다운로드 가능빌드된 .elf.bin 파일을 보드에 굽기, 플래시 메모리 읽기/잠금, 보안 옵션 설정CubeIDE에서도 자동으로 호출되지만, 독립적으로도 사용 가능
STM32CubeMonitorMCU 런타임 상태 모니터링 & 시각화 툴. 실시간 변수 모니터링, 그래프 플로팅, 통신 패킷 분석 가능UART로 들어오는 센서 데이터를 그래프 실시간 플로팅, FreeRTOS 태스크 상태 확인IDE에 포함 X (독립 툴). 주로 디버깅·튜닝 보조용

(6) 사용 예시 (순서)

🧐 CubeMX (또는 CubeIDE 안의 CubeMX)

  • GUI 기반 MCU 선택 (예: STM32F103C8)

  • GUI 기반 핀맵 설정: PA9=USART1_TX, PA10=USART1_RX

  • GUI 기반 클럭 설정: 72MHz HSE

  • 코드 생성 → main.c, HAL 초기화 코드 자동 생성

🧐 CubeIDE

  • 자동 생성된 프로젝트 열기

  • main.c에 printf("Hello STM32"); 추가

  • 빌드 (Ctrl+B) → .elf/.bin 파일 생성

🧐 CubeProgrammer

  • 보드를 USB로 연결

  • .bin 파일 MCU 플래시에 업로드

🧐 CubeMonitor

  • UART로 MCU의 출력 모니터링

  • 실시간 변수 값 시각화 (예: 센서 값 그래프 확인)

3. 펌웨어 라이브러리 (Firmware)

STM32CubeIDE / CubeMX를 설치할 때 자동으로 포함돼서 같이 설치되는 라이브러리들이다.

(1) HAL (Hardware Abstraction Layer)

  • ST에서 제공하는 하드웨어 추상화 API

  • 예: HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

  • 장점: 코드 가독성↑, 이식성↑ (보드 바꿔도 코드 수정 최소화)

  • 단점: 내부적으로 함수 호출이 많아 오버헤드 존재 → 성능 약간 손해

🧐 HAL과 HAL Driver

HAL

HAL (Hardware Abstraction Layer) 은 하드웨어 추상화 계층을 의미한다.

HAL Driver

HAL DriverHAL을 실제로 구현한 구현체(라이브러리)를 말한다.

(2) LL (Low Layer)

  • 레지스터에 직접 접근하는 함수 집합 (HAL보다 더 하드웨어에 가까움)

  • 예: LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_5);

  • 장점: 속도 빠름, 코드 크기 작음

  • 단점: 이식성↓, 코드 난이도↑ (하드웨어 이해 필요)

(3) CMSIS (ARM 제공)

  • ARM에서 제공하는 Cortex-M 계열용 표준 API

  • Cortex-M 코어 공통 기능 (NVIC, SysTick, DSP, RTOS API 등)

  • 예:

    • 인터럽트 우선순위 설정: NVIC_SetPriority(EXTI0_IRQn, 1);

    • 시스템 클럭 읽기: SystemCoreClockUpdate();

  • ST의 HAL/LL도 결국 CMSIS 위에 얹혀서 동작함

(4) 미들웨어

  • HAL/LL 위에서 동작하는 응용 계층 라이브러리

  • 기능: USB, Ethernet, FreeRTOS, FATFS, BLE 등

  • 예:

    • FATFS: f_open(&fil, "file.txt", FA_CREATE_ALWAYS | FA_WRITE);

    • FreeRTOS: xTaskCreate(Task1, "Task1", 128, NULL, 1, NULL);

    • LwIP: 소켓 통신 구현

4. RTOS 및 OS 지원

(1) FreeRTOS 지원 (STM32CubeMX에서 자동 통합 가능)

(2) Zephyr RTOS, Azure RTOS ThreadX 등도 지원

(3) Linux 지원 (STM32MP1 시리즈 - Cortex-A7 + Cortex-M4 듀얼코어)

profile
안녕하세요. 전자공학부 학부생의 공부 기록입니다.

0개의 댓글