974 字
5 分钟
现代化的嵌入式工作流-支持Cpp20

基于STM32CubeMX & XMake的现代化嵌入式工作流#

项目目录#

项目的目录一般来说会像这样:

-----根目录
    |---bsp (存放CubeMX生成的文件,包括STM32的各种配置)
        |---HAL 
            |--- ...
            |--- ...
            |--- makefile (确保makefile在此目录下)
    |---app (用户代码目录,存放你自己写的逻辑代码)
        |---app.cpp
        |---app.hpp
    |---build (XMake编译后产生的构建文件夹)
        |--- ...
    |---script
        |--- read_hal_makefile.lua (读取makefile的脚本)
    |---xmake.lua (XMake编译选项文件)

这里有一个模板仓库:

lisiiii
/
modern-embedded-workflow
Waiting for api.github.com...
00K
0K
0K
Waiting...

我们的工作流程是:

使用STM32CubeMX生成代码、配置开发板 -> 写C++/C代码逻辑 -> XMake读取STM32CubeMX生成的makefile,调用gnu-arm工具链编译我们的代码 -> 使用OZone或JLink相关工具烧录


实现的效果#

图形化的、简单的引脚配置——以点灯为例#

设置LED对应的引脚为GPIO_output,并给他一个别名(CubeMX会帮你做好所有的初始化工作,你一行代码都不需要写) alt text 与繁杂的HAL库分离开来,你可以简单地写C/C++代码 alt text 一键烧录 alt text


准备工作#

下载CubeMX IDE#

我们需要STM32CubeMX作为我们的代码生成器,帮助我们生成各种繁琐的配置代码。

点击跳转: STM32CubeMX官网

alt text 推荐6.12.0版本

下载VSCode作为我们的代码编辑器#

点击跳转: VSCode官网

下载安装XMake作为我们的构建工具#

下载链接(windows)

或者你也可以根据你的系统自选下载: XMake-github

安装gnu-arm工具链#

在vscode的插件商店搜索EIDE,然后安装 alt text 完成后,找到左边的EIDE图标,按图指示安装这两个工具 alt text

开始开发#

STM32CubeMX的配置#

  • 注意:遇到让你下载的弹框一定要选择下载

打开我们的STM32CubeMX,选择MCU型号 alt text 我们使用F103C8T6 alt text 配置Debug模式方便烧录和调试 alt text 配置外部时钟以方便我们使用更高频率 alt text Clock Configuration里就可以改成72MHZ了(遇到弹框OK即可) alt text ProjectManager里面我们设置成生成Makefile,项目名自定,路径随便(我们待会还要改) alt text

alt text

先点个LED吧!

我的芯片LED引脚是PB2,这里我选择PB2将其改成GPIO_Output模式 alt text 右键它给他起个名字(这样在代码里也可以使用) alt text 先生成代码 alt text 找到生成代码的文件夹,我们需要复制.ioc这个文件,其余的都删除 alt text 将其复制到 你的项目目录/bsp/HAL/ 下,然后双击打开 alt text 这回再生成代码,路径就是对的了 alt text alt text

XMake的配置#

VSCode进入xmake.lua所在目录(即项目根目录),输入

xmake f --sdk="你的gnu-arm工具链目录"

一般eide安装的默认在“用户”文件夹下的.eide文件夹里,就像这样: alt text 这样证明已经配置成功,我们可以开始写代码了!

写代码#

我们在 app 文件夹下存放我们的代码逻辑

  • app.hpp (这样写可以让我们在只支持C语言的开发板上写C++)
    #pragma once 
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    void entrypoint();
    #ifdef __cplusplus
    }
    #endif
    
  • app.cpp
    #include <main.h> //这里包含上我们STM32CubeMX生成的main.c主函数
    #include "app/app.hpp"
    
    void entrypoint() {
        // 这里写主逻辑
        while (true) {
            HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
            HAL_Delay(200);
        }
    }
    

回到 main.c 文件 (项目目录\bsp\HAL\Core\Src\main.c

把我们写的entrypoint函数放进去(注意添加在所有初始化函数完成之后) alt text 包含进我们的 app.hpp alt text

最后在根目录执行 xmake alt text

大功告成!

alt text

build下就生成了可以烧录的elf文件

如果用OZone烧录#

alt text alt text alt text 这样配置后最终按下这个小按钮就可以烧录了 alt text

现代化的嵌入式工作流-支持Cpp20
https://fuwari.vercel.app/posts/现代化的嵌入式工作流-支持cpp20/
作者
Lrinaus
发布于
2024-12-15
许可协议
CC BY-NC-SA 4.0