最近研究出来一套新的针对STM32 HAL库开发的工具链,也是延续上一篇对PlatformIO文章进行深入探索。不得不说,PlatformIO是一个非常强大的嵌入式开发平台,也希望以后PlatformIO可以支持更多的嵌入式芯片和框架。
这一套工具链是Linux+VSCode+PlatformIO+STM32CubeMX+stlink-tools,其中Linux我使用的是Debian12.5,在windows下将stlink-tools替换为其他的下载工具,不使用PlatformIO上传即可,本文对此不做赘述。
用STM32F103C8T6最小系统板板载灯闪烁做例子。
前置准备
硬件准备
需要准备STM32F103C8T6最小系统板和stlink下载器,将3V3、GND、SWCLK、SWDIO四个引脚用杜邦线连接起来。

STM32CubeMX安装
进入STM32CubeMX下载地址,选择最新版下载(STM32CubeMX使用依赖java运行环境,请自行安装)

下载完后在命令行进入下载文件夹中,输入(文件名请按自己的修改)
unzip en.stm32cubemx-lin-v6-11-1.zip -d ~/stm32cubemx
cd ~/stm32cubemx
./SetupSTM32CubeMX-6.11.1
往下一直选Next即可,安装完成后在~/.bashrc文件最下面添加以下内容
if [ -x ~/STM32CubeMX/STM32CubeMX ]; then
alias cubemx='~/STM32CubeMX/STM32CubeMX'
fi
再输入source ~/.bashrc
,以后在命令行中输入cubemx回车即可打开STM32CubeMX
stlink-tools安装
在命令行中输入
sudo apt update
sudo apt upgrade
sudo apt install stlink-tools
插上系统板,在命令行输入st-info --probe
,看到类似下面内容即安装成功

项目构建和上传
使用STM32CubeMX生成项目
1、打开STM32CubeMX,点击ACCESS TO MCU SELECTOR

2、在栏中输入stm32f103c8t6,选择芯片,点击Start Project

3、点击System Core,点击SYS,Debug选为Serial Wire

4、点击RCC,按图选择

5、点击右边PC13引脚(板载LED在这个引脚上),选GPIO_Output

6、点击Clock Configuration,将HCLK改为72,敲两下回车

6、点击Project Manager,点击Project,输入项目名称,选择项目文件夹所在位置,将Toolchain/IDE选为Makefile

7、点击Code Generator,勾选下面两项,点击GENERATE CODE

配置PlatformIO对项目读取
1、用VSCode打开项目文件夹,在项目根目录添加platformio.ini文件,输入以下内容
[platformio]
default_envs = stm32f103c8t6 ;选择开发环境
src_dir = ./ ;将项目根目录作为源文件目录,因为Makefile在根目录下
[env:stm32f103c8t6]
platform = ststm32 ;选择STM32开发平台
board = genericSTM32F103C8 ;选择STM32F103C8开发板
board_build.ldscript = ./STM32F103C8Tx_FLASH.ld ;选择项目链接脚本
build_flags = ;添加编译标签
-D STM32F103xB ;添加宏定义
-I Core/Inc ;添加头文件路径
-I Drivers/CMSIS/Include
-I Drivers/CMSIS/Device/ST/STM32F1xx/Include
-I Drivers/STM32F1xx_HAL_Driver/Inc
-I Drivers/STM32F1xx_HAL_Driver/Inc/Legacy
build_src_filter = ;添加源文件路径
+<startup_stm32f103xb.s>
+<Core/Src>
+<Drivers/>
upload_protocol = custom ;自定义上传工具
upload_command = st-flash write $SOURCE 0x08000000 ;使用stlink的上传命令
debug_tool = stlink ;设定调试器
2、重新打开项目文件夹,让PlatformIO读取到配置文件
编译上传
1、在main.c中对应位置写入以下内容,按Ctrl+S保存
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
HAL_Delay(500);

2、将板上boot跳线帽都置零
3、点击底部栏对钩按钮进行编译,出现SUCCESS表示无问题
4、点击底部栏箭头按钮进行上传,出现SUCCESS表示无问题,这时板上LED开始闪烁

结语:这一套工具链不太适合初学者的,需要有一定Linux基础,对C语言编译工具链有一定了解,但是如果能搞明白会对自己在嵌入式方面有很大提升。
Comments NOTHING