抛弃Keil罢,这篇文章将会介绍如何使用VSCode中的PlatformIO插件来配置一个STM32的多平台开发环境。
前言
博主本人并没有系统的学习过STM32的相关知识,此前接触的嵌入式相关内容也仅限于Arduino框架,因此这个环境是我入门STM32的第一个环境,我也尽了自己最大的努力来使这个环境尽可能的顺手,并且在能学习新东西的情况下保留我自己原有的开发习惯。写成了这个教程来供大家参考。由于水平有限,这篇难免有所不足,希望大家可以在评论区分享自己的看法。
模组
这个开发环境分为以下几个部分
- STM32CubeMX软件来生成STM32的初始化配置和程序框架,并且提供库文件
- PlatformIO平台来提供各种外部库文件的安装,各种工具(下载工具、调试工具等)的配置和程序的编译环境
- VSCode作为IDE的框架
CubeMX的安装与配置
STM32CubeMX能够同时兼容Win、Mac和Linux三大平台,下载地址https://www.st.com/zh/development-tools/stm32cubemx.html
现在的CubeMX已经不需要额外安装java运行环境了,能正常打开就算成功
关于该软件,可以参考以下文章,在此不做过多介绍了
STM32CubeMX介绍、下载与安装
STM32CubeMX入门教程(一)
platformIO的安装与配置
安装
打开VSCode,扩展商店搜索PlatformIO,安装即可
代理设置
和许多其他工具一样,PlatformIO的主要坑就是国内的网络环境问题。
在首次安装平台(Platform)时、新建工程时、编译时、上传时都会联网下载相关的软件包。并且大多数时候并没有关于下载进度的提示,导致很多时候会出现卡住的情况
因此,设置代理时必要的,关于代理设置,不论是Win下还是Mac/Lin下,都是通过设置环境变量实现的
可以参考 PlatformIO使用中遇到的坑
1 | Mac/Lin举例 |
你需要把这段代码加到.bashrc
或者.zshrc
中
完成后通过以下命令测试
1 | curl http://google.com |
均有获取到内容则成功
环境安装
VSCode打开后点击下方蓝条的主页图标,或者左侧点击外星人图标再选择PIO Home
-OPEN
即可进入PlatformIO主页
主页左侧,可以管理项目、库、开发板、和平台
对于STM32开发,首先安装ST STM32
Platform
在Platform菜单,Embedded选项卡中搜索安装即可
另外,安装也可以使用命令行进行(可以看到下载进度)
左侧选项卡中,点击PlatformIO Core CLI
,VSCode下方会打开PIO命令行
1 | pio platform install ststm32 |
即可
新建项目
PIO Home,左侧Project
菜单,新建项目
根据你的开发需求选择对应的MCU或开发板,对于CubeMX生成的代码,选择CubeMX框架
如果CubeMX已经生成好代码,项目名与Cube中项目名相同,项目目录为项目名文件夹的上层目录
首次使用某MCU或者首次使用某框架,需要下载对应组件,需要挂上代理稍等(5分钟左右)
配置项目
官方对于platformio.ini
文件格式的文档 “platformio.ini” (Project Configuration File)
项目新建后会自动打开,PIO的默认代码源文件在项目文件夹下的src目录,与CubeMX不同
修改文件夹下的platformio.ini
文件,新建一些配置项
1 | [platformio] |
然后尝试点击下方工具栏的勾号编译
上传程序
默认的上传方式是STLink,即插即用,其他方式可以通过修改platformio.ini
定义
1 | [env:xxxxxxxx] #在你对应的env部分中添加 |
点个灯试试
以外置晶振的STM32F103C8T6为例,LED引脚PA8
生成框架
打开CubeMX,进入MCU Selector,搜索并选择F103C8T6
在引脚配置中,选择对应引脚,单击配置为GPIO_Output
模式
右击引脚,设置UserLabel为LED
左侧功能栏中,选择RCC,配置HSE为外部晶振,此外建议打开调试功能,选择对应的调试模式
下一步进入时钟配置,时钟树可改可不改,点个灯而已
然后进入Project Manager,配置名称与路径,Toolchain选择Makefile
右上角GenerateCode,结束
PIO配置
打开PIO Home,新建项目,选择MCU和Framework,目录与Cube相同
完成后打开工程,发现左侧已经有Core等文件夹,生成的代码已经导入了
修改platformio.ini
,尝试编译
写代码
打开main.c
,写入点灯代码
找到main
函数的while(1)
循环,所有代码应写在对应的USER CODE BEGIN
和USER CODE END
注释之间
1 | /* USER CODE BEGIN WHILE */ |
编译上传,成功
若没有在CubeMX中打开调试功能,能上传程序,但是只能上传一次,后续需要手动复位才能重新上传