文章目录
0.安装Prerequisite
去stm官网下载安装好stmcubemx。
到波特率动下载安装好编译工具链,除了clion一个都不能缺!
记得添加到环境变量,这样命令行才能执行你输入的命令。
工具链包括:arm-gcc,openocd,stlink等。

Ninja的安装我忘了,朋友们请参考一下其它教程。
1. 配置项目 (仅一次)
进入工程目录后
务必先删除 build 文件夹,确保路径正确
Remove-Item -Recurse -Force build
配置项目:指定使用 Ninja 引擎和 ARM 工具链文件
cmake -B build -G Ninja -DCMAKE_TOOLCHAIN_FILE="cmake/gcc-arm-none-eabi.cmake"
这里的"cmake/gcc-arm-none-eabi.cmake"是stm32cubemx自动在工程文件下生成的,帮我们省了很多力气。
2. 编译代码
cmake --build build
3. 命令行烧录 (ST-Link + F103)
openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c "program build/lit.elf verify reset exit"
4. CMake 自动化 (在 CMakeLists.txt 末尾添加)
添加后可使用: cmake --build build -t flash
add_custom_target(flash
COMMAND openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c "program ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.elf verify reset exit"
DEPENDS ${PROJECT_NAME}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
5. 常用查找命令
找工具链文件位置
Get-ChildItem -Recurse -Filter "gcc-arm-none-eabi.cmake" | Select-Object FullName
找 Ninja 位置
where.exe ninja
找编译器版本
arm-none-eabi-gcc --version
6. 可以打包成一个psl文件
vscode编辑代码,编译烧录到powershell,实现轻量化。
7. 文本编辑:vscode
代码跳转功能:
如ESP逃离clion中所讲述的方法。
配置文件xxx.jason可以参考:
{
"configurations": [
{
"name": "STM32F103C8T6",
"compilerPath": "E:/Ctool/DevEnv/GNU-tools-for-STM32/bin/arm-none-eabi-gcc.exe",
"compileCommands": "${workspaceFolder}/build/compile_commands.json",
"intelliSenseMode": "windows-gcc-arm",
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}
8. 添加新文件
使用cmake+ninja时,
如何被编译器识别并包含进编译过程,如何实现新文件的代码跳转。
这两个问题其实是一个问题。
这两个问题的核心其实都在于让 CMake 感知到新文件的存在。只要 CMake 知道了,编译器就能编译它;只要 CMake 生成了编译数据库,VS Code 就能实现精准跳转。
以 STM32CubeMX 生成的 CMake 项目为例,操作分为以下三步:
1. 修改 CMakeLists.txt (让编译器识别)
找到STM32CubeMX 生成的项目中的根目录下的 CMakeLists.txt 。
- 添加源文件 (.c):
找到定义源码变量(如set(SOURCES ...))的地方,将你的新.c文件路径添加进去。target_sources(${CMAKE_PROJECT_NAME} PRIVATE Core/Src/my_file.c # ... 其他文件 ) - 添加头文件路径 (.h):
如果你的头文件在新的文件夹里,必须告诉 CMake 去哪里找。target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE Core/Inc #这个是mx自动加的目录,你要是放在这,就不用改动 My_Drivers/Inc # 假设这是你的新头文件目录 )
2. 生成编译数据库 (实现代码跳转的关键)
按之前的命令行,编译一下。
- 结果: 运行 CMake 配置后,
build文件夹下会生成一个compile_commands.json文件。这个文件记录了每一个源文件是用什么参数、哪些宏、哪些包含路径编译的。VScode代码跳参考的就是它。
总结
- 改 CMakeLists: 把
.c加到target_sources,把目录加到target_include_directories。—— 解决“能编译”。 - 编译一下
- VS Code自动 将
compile_commands.json拿来用 。
9. ST的user manual
user manual是用库写代码时候的重要参考。
只要你下载了stmcubemx,加载过库,就能找到相应库的user manual。
C:\Users\asus\STM32Cube\Repository\STM32Cube_FW_F1_V1.8.7\Drivers\STM32F1xx_HAL_Driver
不用去网上专门找pdf,官方的文本跳转更方便。

2037

被折叠的 条评论
为什么被折叠?



