STM32 纯命令行开发 (摆脱 IDE 篇)

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代码跳参考的就是它。

总结

  1. 改 CMakeLists:.c 加到 target_sources,把目录加到 target_include_directories。—— 解决“能编译”
  2. 编译一下
  3. 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,官方的文本跳转更方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值