STM32CubeMX 配置引脚并生成代码模板,在 Platformio + VSCode 环境下开发、编译、上传。

业务代码写在模板代码 /* User Code Begins *//* User Code Ends */ 之间。此时再次生成模板代码将不会删除业务代码。

Pinout&Configuration —> SystemCore —> SYS —> Debug 需要设置为Serial Wire。否则芯片的调试接口将被锁死。

1、安装STM32CubeMX、VSCode、PlatformIO for VSCode 扩展。
2、打开STM32CubeMX配置引脚并生成代码模板。

  • 在Code Generator中选择Copy only the necessary library files这个选项
  • Toolchain / IDE 选择MakeFile ,最后GENERATE CODE

3、打开PlatformIO,新建项目:

  • 项目名称需与STM32CubeMX配置的项目名称相同
  • 开发板Board选择需与STM32CubeMX配置的板相同。
  • 开发框架Framework选择STM32Cube
  • 路径Location选择STM32CubeMX生成的代码模板路径的上一级。
  • 新建项目后,在platformio.ini中添加代码路径、上传器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    build_type = debug                    ; 默认为release , 此处设置为debug方便调试 按F5
    debug_tool = stlink ; 调试工具
    build_flags = -Wl,-u,_printf_float ; 实现串口float数据打印
    -ICore/Src/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS ; FreeRTOS相关文件路径
    -ICore/Src/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3 ; FreeRTOS相关文件路径
    -ICore/Src/Middlewares/Third_Party/FreeRTOS/Source/include ; FreeRTOS相关文件路径
    -L Core/App ; 链接库路径
    -liqmathlib ; 自定义库 iqmathlib.a

    [platformio]
    src_dir = Core/Src ;代码路径 or Core 搜索子文件夹
    include_dir = Core/Inc ;头文件路径

    upload_protocol = stlink ;根据下载器选择stlink 或 jlink

4、最后即可在Core/Src目录下编写业务代码。

platformio目录配置文档

自定义库路径

  • 将需要的库文件 ( 或自己写的文件 ) (包含.c .h ) 放入lib 文件夹的自定义文件夹
  • 头文件引用 , 需注意相对路径 , 或在 platformio.ini 的build_flags中添加代码路径 -Ilib/func1
  • 坑: 文件夹名需要全小写? 否则编译时会找到Func1 与 func1 两个定义…

  • lib
    • func1
      • func1.c
      • func1.h
      • readme .md
    • func2
      • func2.c
      • func2.h

FreeRTOS配置坑

2025年02月20日
STM32CubeMX配置好Freertos后 , platformio中编译找不到”FreeRTOS.h”

  • 将Middlewares文件夹移动到Core/Src文件夹下。
  • 在platformio.ini中添加代码路径
    1
    2
    3
    build_flags = -ICore/Src/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS
    -ICore/Src/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3
    -ICore/Src/Middlewares/Third_Party/FreeRTOS/Source/include
  • (可选?)在platformio.ini中添加extra_scripts = pre:hardfloat.py , 并同级目录下创建hardfloat.py文件,内容如下
    1
    2
    3
    4
    5
    6
    Import("env")
    env.Append(
    LINKFLAGS=["-mfloat-abi=hard", "-mfpu=fpv4-sp-d16"],
    CCFLAGS=["-mfloat-abi=hard", "-mfpu=fpv4-sp-d16"],
    ASFLAGS=["-mfloat-abi=hard", "-mfpu=fpv4-sp-d16"]
    )
  • 最后编译即可.

参考链接1
参考链接2*