200字
Linux上STM32编译环境配置
2026-04-05
2026-04-05

博主从很久以前就想把工作环境彻底换成Linux了。本来前阵子装了Arch,并玩了一小段时间。奈何实验室突然接了个指定使用STC32G的项目,又用了半年Windows……

现在总算是回到了其他平台的开发。先简单配置了STM32的编译环境。

前期准备

编译、调试工具

Debian/Ubuntu:

sudo apt install -y gcc-arm-none-eabi stlink-tools gdb-multiarch make cmake

Arch:

sudo pacman -S --noconfirm arm-none-eabi-gcc stlink gdb make cmake
包名 用途
gcc-arm-none-eabi / arm-none-eabi-gcc ARM 交叉编译工具链
stlink-tools / stlink ST-Link 烧录工具
gdb-multiarch / gdb 调试器
make 构建工具
cmake 构建系统(可选,我使用的项目使用 Makefile)

STM32CubeMX

从官网上获取软件:下载链接

解压后直接有一个可执行文件,打开安装即可。

CubeMX配置

GUI操作和Windows上的CubeMX几乎没任何区别,就不展开说明了。

需要注意的是Project ManagerToolchain / IDE选项,其中的MDK-ARM是Keil的编译器,Linux需要使用的话还需要Windows兼容层,最好别选。可以选择MakefileCMake

Toolchain/IDE

后续内容以Makefile为例。

代码编辑

使用自己习惯的Text Editor即可。博主习惯VS Code,也可以试试比较次世代的neovim之类的体验。

Makefile配置

在项目根目录下生成的Makefile文件并不包含你写代码时自己加的文件。需要在根目录下Makefile的如下地方补上:

.c文件

######################################
# source
######################################
# C sources
C_SOURCES =  \
Core/Src/main.c \
Core/Src/gpio.c \
Core/Src/dac.c \
Core/Src/usart.c \
Core/Src/stm32f4xx_it.c \
Core/Src/stm32f4xx_hal_msp.c \
Drivers/STM32F4xx_HAL_Driver/省略了\
Core/Src/system_stm32f4xx.c \
Core/Src/sysmem.c \
Core/Src/syscalls.c \
从这里开始仿照上方格式加上你的.c文件

.h文件

# C includes
C_INCLUDES =  \
-ICore/Inc \
-IDrivers/STM32F4xx_HAL_Driver/Inc \
-IDrivers/STM32F4xx_HAL_Driver/Inc/Legacy \
-IDrivers/CMSIS/Device/ST/STM32F4xx/Include \
-IDrivers/CMSIS/Include \
仿照上方格式加入头文件引用文件夹

自动化编译、烧录

到此为止便可以通过bash命令编译烧录了。但是每次都手动敲命令未免太繁琐。我们可以写一个简单的构建脚本 build.sh(当然,连这都嫌麻烦直接让你的AI agent去编译烧录也可以)

#!/bin/bash
set -e

BUILD_DIR="build"
PROJECT_NAME="你的项目名"

# 解析参数
CLEAN=0
FLASH=0

for arg in "$@"; do
    case $arg in
        -c|--clean) CLEAN=1 ;;
        -f|--flash) FLASH=1 ;;
        -h|--help)
            echo "Usage: $0 [-c|--clean] [-f|--flash] [-h|--help]"
            exit 0 ;;
    esac
done

# 清理
[ $CLEAN -eq 1 ] && make clean

# 编译
make -j$(nproc)

# 烧录
if [ $FLASH -eq 1 ]; then
    st-flash write ${BUILD_DIR}/${PROJECT_NAME}.bin 0x08000000
fi

使用方式:

./build.sh          # 编译
./build.sh -c       # 清理后编译
./build.sh -f       # 编译并烧录
./build.sh -c -f    # 清理 + 编译 + 烧录

这样就能一键完成编译烧录了,省时省力。

build_flash

调试

待后续更新…

评论