macOS STM32 개발환경 구성

STM32CubeIDE는 다양한 플랫폼을 지원하고 있어, 설치 및 사용에는 큰 문제가 없으나 이클립스 자체가 무겁기 때문에 CLI 환경으로 GDB 및 이미지 다운로드를 하려고 한다.

 

최신 버전의 STM32CubeIDE(v1.15.x) 버전을 업데이트하고 STM32CubeIDE에 포함된 컴파일러, ST-Link 및 ST GDB 서버를 CLI 환경으로 사용하기 위해 아래 경로에 각 플러그인의 실행경로를 링크 파일로 생성하여 실행 경로를 설정하였다.

기존 nRF가 사용하는 arm-compiler 버전이 있어, STM32CubeIDE에서 사용하는 arm-compiler 버전을 명시하여 링크파일을 생성하였고, 이 경로를 cmake에서 컴파일 경로로 설정하면 된다. 따라서 이번 프로젝트를 진행하는 사람도 가능하면 동일한 경로에 링크파일을 생성하는 것을 권장한다.

 

위와 같은 경로에 CubeIDE에서 사용하는 플러그인의 실행경로를 링크파일로 생성한 후, 각자 shell 환경의 실행 경로 및 동적 라이브러리 경로를 아래와 같이 설정하도록 한다.

$ vi ~/.zshrc

...
export PATH="/opt/toolchains/gcc-arm-none-eabi/bin:$PATH" # for nRF
export PATH="/opt/toolchains/stm32prog/bin":$PATH
export PATH="/opt/toolchains/stlink-gdb/bin":$PATH

export LD_LIBRARY_PATH=/opt/toolchains/stlink-debug/bin/native/mac_x64:$LD_LIBRARY_PATH

 

ST-Link 이미지 다운로드 설정

$ sudo vi /opt/toolchains/stm32prog/bin/stlink
 
#!/bin/sh
STM32_Programmer_CLI -c port=SWD -w $1.elf -v -ob displ -rst

STM32Programmer 다운받아 설치할 경우 GUI 환경에서 각종 이미지 파일을 다운로드하거나 STM32 내부 플래시를 삭제할 수 있으나, 빌드하고 바로 다운로드할 경우는 위와 같은 커맨드로 간단히 실행할 수 있다.

 

ST-GDB-Server 설정

$ sudo vi /opt/toolchains/stlink-gdb/bin/stlink-gdb-server

#!/bin/sh

ST-LINK_gdbserver -p 61234 -r 15 -e -d -cp /opt/toolchains/stm32prog/bin

GDB-Server에서 사용할 포트 및 각종 옵션을 위와 같은 스크립트로 작성하면 간단히 실행할 수 있으며, 반드시 LD_LIBRARY_PATH를 설정해야 한다.

 

ARM-Compiler 설정

STM32_TOOLCHAIN_PATH := /opt/toolchains/arm-none-eabi-12.3/bin/arm-none-eabi-gcc
CHIPSET := STM32G474
STM32_FW_ROOT := $(BASEDIR)/external/STM32CubeG4
OUTBIN = $(BUILDIR)/$(PROJECT).bin

all: prepare_build
	$(info building...)
	$(Q)cmake --build $(BUILDIR)

prepare_build:
	$(info $@...)
	$(Q)cmake \
		-GNinja \
		-B$(BUILDIR) \
		-DSTM32_CHIPSET=$(CHIPSET) \
		-DSTM32_FW_DIR=$(STM32_FW_ROOT) \
		-DCMAKE_C_COMPILER=$(STM32_TOOLCHAIN_PATH) \
		-DCMAKE_BUILD_TYPE=RelWithDebInfo
...

ARM Core를 사용하는 여러 칩셋이 있으며, nRF, ESP, STM32등이 있다. 기존 프로젝트에서 10.3 버전을 사용하였기 때문에 신규 프로젝트에서는 ARM-Compiler 실행 경로를 설정하지 않고, Makefile에서 컴파일러 경로를 설정하도록 한다.

STM32 GDB 사용 방법

GDB 서버를 사용하기 위해서는 빌드시  Debug 모드(-O0, -g)로 빌드하여 map 파일을 참조하여 GDB에서 trace가 가능하도록 빌드해야 한다. 만약 Release 또는 RelWithDebInfo 모드(-O3)로 빌드할 경우 런타임 환경에서 소스 트래킹이 불가능하다는 것을 인지한다.