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


Nucleo Board: 저가형, 아두이노 핀 호환, 빠른 프로토타이핑
Discovery Kit: 디스플레이, 센서 등 부가 장치 포함
Eval Board: 상용에 가까운 기능, 모든 주변장치 테스트 가능

ST 공식 무료 IDE (Eclipse 기반, GCC 사용)
디버깅, 코드 생성, 프로젝트 관리 지원등의 역할을 한다.

핀 설정, 클럭 트리 구성, 주변장치 초기화 자동 코드 생성
HAL/LL 드라이버 기반 코드를 자동 생성한다.

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

실시간 변수 모니터링 & 시각화 툴
| 툴 이름 | 역할 | 사용 예시 | 포함/관계 |
|---|---|---|---|
| STM32CubeIDE | STM32용 통합 개발 환경 (IDE). 코드 작성, 빌드, 디버깅까지 다 할 수 있음. (Eclipse + GCC + GDB 기반) | 펌웨어 코드 작성 후 F5로 빌드 & ST-LINK로 디버깅 | CubeMX 기능이 내장되어 있음 (= CubeMX를 IDE 안에서 바로 사용 가능) |
| STM32CubeMX | 핀/클럭/주변장치 초기화 코드 생성기. GUI로 핀맵 설정하면 자동으로 HAL/LL 기반 초기화 코드 만들어 줌 | GPIO를 입력/출력으로 설정하고, USART2를 115200bps로 세팅 후 초기화 코드 생성 | 단독 프로그램이기도 하고, CubeIDE 안에도 내장되어 있음 |
| STM32CubeProgrammer | MCU에 펌웨어 업로드(플래싱) & 메모리 접근 툴. ST-LINK, JTAG, UART, DFU(USB) 등 다양한 방법으로 다운로드 가능 | 빌드된 .elf나 .bin 파일을 보드에 굽기, 플래시 메모리 읽기/잠금, 보안 옵션 설정 | CubeIDE에서도 자동으로 호출되지만, 독립적으로도 사용 가능 |
| STM32CubeMonitor | MCU 런타임 상태 모니터링 & 시각화 툴. 실시간 변수 모니터링, 그래프 플로팅, 통신 패킷 분석 가능 | UART로 들어오는 센서 데이터를 그래프 실시간 플로팅, FreeRTOS 태스크 상태 확인 | IDE에 포함 X (독립 툴). 주로 디버깅·튜닝 보조용 |
GUI 기반 MCU 선택 (예: STM32F103C8)
GUI 기반 핀맵 설정: PA9=USART1_TX, PA10=USART1_RX
GUI 기반 클럭 설정: 72MHz HSE
코드 생성 → main.c, HAL 초기화 코드 자동 생성
자동 생성된 프로젝트 열기
main.c에 printf("Hello STM32"); 추가
빌드 (Ctrl+B) → .elf/.bin 파일 생성
보드를 USB로 연결
.bin 파일 MCU 플래시에 업로드
UART로 MCU의 출력 모니터링
실시간 변수 값 시각화 (예: 센서 값 그래프 확인)
STM32CubeIDE / CubeMX를 설치할 때 자동으로 포함돼서 같이 설치되는 라이브러리들이다.
ST에서 제공하는 하드웨어 추상화 API
예: HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
장점: 코드 가독성↑, 이식성↑ (보드 바꿔도 코드 수정 최소화)
단점: 내부적으로 함수 호출이 많아 오버헤드 존재 → 성능 약간 손해
HAL (Hardware Abstraction Layer) 은 하드웨어 추상화 계층을 의미한다.
HAL Driver 는 HAL을 실제로 구현한 구현체(라이브러리)를 말한다.
레지스터에 직접 접근하는 함수 집합 (HAL보다 더 하드웨어에 가까움)
예: LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_5);
장점: 속도 빠름, 코드 크기 작음
단점: 이식성↓, 코드 난이도↑ (하드웨어 이해 필요)
ARM에서 제공하는 Cortex-M 계열용 표준 API
Cortex-M 코어 공통 기능 (NVIC, SysTick, DSP, RTOS API 등)
예:
인터럽트 우선순위 설정: NVIC_SetPriority(EXTI0_IRQn, 1);
시스템 클럭 읽기: SystemCoreClockUpdate();
ST의 HAL/LL도 결국 CMSIS 위에 얹혀서 동작함
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: 소켓 통신 구현