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
14build_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目录下编写业务代码。
自定义库路径
- 将需要的库文件 ( 或自己写的文件 ) (包含.c .h ) 放入lib 文件夹的自定义文件夹 中
- 头文件引用 , 需注意相对路径 , 或在 platformio.ini 的build_flags中添加代码路径 -Ilib/func1
- 坑: 文件夹名需要全小写? 否则编译时会找到Func1 与 func1 两个定义…
如
- lib
- func1
- func1.c
- func1.h
- readme .md
- func2
- func2.c
- func2.h
- func1
FreeRTOS配置坑
2025年02月20日
STM32CubeMX配置好Freertos后 , platformio中编译找不到”FreeRTOS.h”
- 将Middlewares文件夹移动到Core/Src文件夹下。
- 在platformio.ini中添加代码路径
1
2
3build_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
6Import("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"]
) - 最后编译即可.