STM32_GCC_CMAKE环境搭建
参考模板地址: https://gitee.com/lzh-2022/stm32-learning/tree/master/Templates
1 环境安装
1.1 CMake
-
下载链接
https://github.com/Kitware/CMake/releases/download/v4.2.1/cmake-4.2.1-windows-x86_64.msi
-
配置环境变量
C:\Program Files\CMake\bin
1.2 Ninja
-
下载链接
https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-win.zip
-
配置环境变量
C:\Program Files\ninja-win
1.3 ARM GCC
-
下载链接
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
-
配置环境变量
C:\Program Files\Arm\GNU Toolchain mingw-w64-x86_64-arm-none-eabi\bin
1.4 OpenOCD
-
下载链接
-
配置环境变量
C:\Program Files\openocd\bin
1.5 Vscode
- 插件
- STM32CubeIDE for Visual Studio Code
- ......
2 CMake工程创建
2.1 工程结构
CMake: 存放编译工具链文件Ld: 存放链接脚本文件Startup: 存放裸机启动相关文件User: 存放用户相关文件Library: 存放标准库相关文件
2.2 Presets预设文件
{
"version": 3,
"configurePresets": [
{
"name": "Debug",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"toolchainFile": "${sourceDir}/CMake/arm-none-eabi-toolchain.cmake",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
}
],
"buildPresets": [
{
"name": "Debug",
"configurePreset": "Debug"
}
]
}
generator: 使用Ninja构建系统binaryDir: 指定生成文件目录toolchainFile: 指定编译工具链文件
3.3 编译工具链文件
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR cortex-m3)
set(TOOLCHAIN_PREFIX arm-none-eabi-)
set(FLAGS "-fdata-sections -ffunction-sections -Wl,--gc-sections -Wno-comment")
set(CMAKE_C_FLAGS ${FLAGS})
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc CACHE INTERNAL "")
set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER} CACHE INTERNAL "")
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++ CACHE INTERNAL "")
set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy CACHE INTERNAL "")
set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size CACHE INTERNAL "")
set(CMAKE_EXECUTABLE_SUFFIX ".elf")
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
3.4 CMakeLists.txt
cmake_minimum_required(VERSION 3.30)
project("app")
enable_language(C ASM)
set(CMAKE_C_STANDARD 99)
set(cpu_PARAMS
-mthumb
-mcpu=cortex-m3
)
message(${CMAKE_COMMAND})
set(sources_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/Startup/startup.S
${CMAKE_CURRENT_SOURCE_DIR}/Startup/system_stm32f10x.c
${CMAKE_CURRENT_SOURCE_DIR}/User/main.c
${CMAKE_CURRENT_SOURCE_DIR}/User/stm32f10x_it.c
)
# 源文件路径
set(SRC_DIRS
${CMAKE_SOURCE_DIR}/User
${CMAKE_SOURCE_DIR}/Startup
${CMAKE_SOURCE_DIR}/Library
)
# 自动收集源文件
set(sources_SRCS "")
foreach(dir IN LISTS SRC_DIRS)
file(GLOB_RECURSE FOUND LIST_DIRECTORIES false ${dir}/*.c ${dir}/*.s ${dir}/*.S)
list(APPEND sources_SRCS ${FOUND})
endforeach()
set(include_DIRS
${CMAKE_CURRENT_SOURCE_DIR}/Startup
${CMAKE_CURRENT_SOURCE_DIR}/Library
${CMAKE_CURRENT_SOURCE_DIR}/User
)
set(linker_script_SRC
${CMAKE_CURRENT_SOURCE_DIR}/Ld/linker.ld
)
set(compiler_OPTS
)
set(linker_OPTS
# --specs=nosys.specs
-Wl,-Map=app.map
-Wl,--print-memory-usage
)
# --------------------- 构建目标 -------------------------
add_executable(app)
target_sources(app PUBLIC ${sources_SRCS})
target_include_directories(app PRIVATE
${include_DIRS}
)
target_compile_definitions(app PRIVATE
STM32F10X_MD
USE_STDPERIPH_DRIVER
)
target_compile_options(app PRIVATE
${cpu_PARAMS}
${compiler_OPTS}
)
target_link_options(app PRIVATE
-T${linker_script_SRC}
${cpu_PARAMS}
${linker_OPTS}
)
add_custom_command(TARGET app POST_BUILD
COMMAND ${CMAKE_SIZE} $<TARGET_FILE:app>
COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:app> app.hex
COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:app> app.bin
)
SRC_DIRS: 源文件目录列表,可自定义添加include_DIRS: 头文件目录列表,可自定义添加
file自动收集源文件,导致新建文件时需重新进行一次cmake配置
3.5 调试配置文件
- 需要插件
- STM32Cube Debug Generic GDB Server
- 需要安装
openocd
- 需要安装
- STM32Cube Debug STLink GDB Server
- STM32Cube Debug Generic GDB Server
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "stlinkgdbtarget",
"request": "launch",
"name": "STM32Cube: STM32 Launch ST-Link GDB Server",
"origin": "snippet",
"cwd": "${workspaceFolder}",
"preBuild": "${command:st-stm32-ide-debug-launch.build}",
"runEntry": "main",
"imagesAndSymbols": [
{
"imageFileName": "${workspaceFolder}/build/Debug/app"
}
]
},
{
"type": "stgdbtarget",
"request": "launch",
"name": "STM32Cube: STM32 Launch Generic GDB Server",
"origin": "snippet",
"cwd": "${workspaceFolder}",
"preBuild": "${command:st-stm32-ide-debug-launch.build}",
"program": "${workspaceFolder}/build/Debug/app",
"gdb": "${command:st-stm32-ide-debug-launch.get-gdb-executable}",
"deviceName": "${command:st-stm32-ide-debug-launch.get-device-name}",
"deviceCore": "${command:st-stm32-ide-debug-launch.get-core-name}",
"deviceTrustzone": "${command:st-stm32-ide-debug-launch.get-trustzone-status}",
"serverExe": "openocd",
"serverParameters": [
"-f",
"interface/cmsis-dap.cfg",
"-f",
"target/stm32f1x.cfg"
],
"serverHost": "localhost",
"serverPort": "3333",
"serverCwd": "C:/Program Files/openocd/bin",
"runEntry": "main",
"imagesAndSymbols": [
{
"imageFileName": "${workspaceFolder}/build/Debug/app",
"imageOffset": "",
"symbolFileName": "${workspaceFolder}/build/Debug/app",
"symbolOffset": ""
}
]
}
]
}
- STM32Cube: STM32 Launch ST-Link GDB Server
- 适合ST-Link使用
- STM32Cube: STM32 Launch Generic GDB Server
- 这里使用
openocd启用dap方式调试stm32f103c8t6
- 这里使用
3 构建流程
3.1 配置
$ cd template_std
$ cmake --preset Debug
-- The C compiler identification is GNU 15.2.1 -- The CXX compiler identification is GNU 15.2.1 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: C:/Program Files/Arm/GNU Toolchain mingw-w64-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc.exe - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: C:/Program Files/Arm/GNU Toolchain mingw-w64-x86_64-arm-none-eabi/bin/arm-none-eabi-g++.exe - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- The ASM compiler identification is GNU -- Found assembler: C:/Program Files/Arm/GNU Toolchain mingw-w64-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc.exe C:/Program Files/CMake/bin/cmake.exe -- Configuring done (1.0s) -- Generating done (0.0s) -- Build files have been written to: D:/Embedded/codes/stm32/CMake/000 Templates/template_std/build/Debug
3.2 构建
$ cmake --build --preset Debug
Memory region Used Size Region Size %age Used RAM: 1976 B 20 KB 9.65% FLASH: 2696 B 64 KB 4.11% text data bss dec hex filename 2692 4 1972 4668 123c D:/Embedded/codes/stm32/CMake/000 Templates/template_std/build/Debug/app
4 Vscode使用流程
- 使用Vscode打开项目
- 选择cmake预设,删除缓存重新配置
- 构建
- 根据调试工具选择配置烧录调试

浙公网安备 33010602011771号