用VScode作为stm32开发平台(platformIO

VScode真是个宝,啥都能写,啥平台都能用。本篇教你如何使用VScode配合cubeMX实现一键下载。

1. 硬件

正点原子stm32F103RC开发版(只看芯片型号就行),ST-link调试器。

2. 环境配置

我的os是Win10,理论上Mac和Linux桌面版都可以运行。

首先,安装Vscode和cubeMX,本篇默认以上软件已经安装好。

a. 安装platformIO插件

在VScode中,在插件市场搜索。首次安装时间较长,因为它要安装核心组件platformIO-core,可以理解为它的后端. 去买杯饮料,或者吃个鸡, 回来差不多就好了.

b. 新建platformIO工程

安装好后, 打开Home Page:

image
image

在右侧Quick Access栏中,有4个选项。可以看得出来,PIO对Arduino的支持比较好。但是此时我们需要的是STM32+CubeMX。

点击New Project打开project配置界面:

image

点击Finish后,如果是首次配置的话,又是一段漫长的等待(一把王者农药或者恰鸡)

image

完成后,VSCode会自动重新加载到该项目文件夹。到这里,一个PIO工程就初始化完成了。

3. 配合CubeMX代码生成

有两种方式可以使其完美配合。

a.1 (建议) 将已有的.ioc文件放入PIO工程根目录下

然后在CubeMX里重新打开这个.ioc文件重新generate code即可。

a.2 新建CubeMX工程

这个有点麻烦,新建的工程必须是空文件夹所以不建议。文章末尾给了一个骚操作思路。

然后CubeMX的Toolchain选项中改为这两个之一:

image

在用CubeMX生成代码之前先做三件事情:

image

上图是PIO工程的默认项目目录,其中:

1. 将include目录重命名为Inc

2. 将src目录重命名为Src

3. 编辑platformio.ini,在最下面添加:


[platformio]

include_dir=Inc

src_dir=Src

然后就可以在CubeMX中点击生成代码了。

4. 刷写MCU

如果要同时连接串口(USB)和调试器到MCU,一定要先插调试器!

编辑platformio.ini, 添加上传工具选项和debug工具选项:


[env:genericSTM32F103RC]

platform = ststm32

board = genericSTM32F103RC

framework = stm32cube

debug_tool = jlink

upload_protocol = jlink

[platformio]

include_dir=Inc

src_dir=Src

这里用的是jlink.如果使用stlink,将上述两项jlink修改为stlink即可.

PIO有多种上传方式可以选择,甚至可以用串口方式烧写,具体用法可以到PIO官网查看.

通过调试器连接板子(ST-Link或者J-link亲测都行)后,点击upload:

image

若是第一次使用,PIO会开始自动下载OpenOCD等开源工具以及jlink或者STlink的驱动,又可以来一盘农药或者恰鸡了。

上传成功:

image

5. 在VSCode里Debug

由于在上一步中已经在platformio.ini里指定了debug_tool,现在可以按下VSCode中最万能的F5按键,一键对stm32进行debug操作。

image

6. 后话

最近在上嵌入式这门课,一开始用Keil uVision这个ide,编码下载调试啥都能干,但是缺点就是颜值不大行,而且有些臃肿了。对于用惯了VScode的我来说实在是用不方便,尤其是在智能补全这方面,keil真的不行。

过了两三次实验课,开始用cubeIDE(cubeMX)。因为之前用keil实在是学不到什么东西,所有东西都是调正点原子在教程里写好的库。当然也不是不能学,但是实在是懒惰,不想去深究源码,以后真的要做什么东西估计还是不会做。

cubeIDE, 虽然直接套了Eclipse的一层壳,但是代码补全以及刷写MCU实在是不符合习惯,最终还是放弃.

最近有同学说Clion用OpenOCD工具链刷FreeRTOS时炸掉。至少我在PIO里,openOCD刷FreeRTOS时没问题的。不过PIO刷cubeMX的FreeRTOS又得多操作一点东西,下期单独开个帖子讲。

7.快速操作

理论上建立这样一个工程只需要目录下有俩文件,一是platformio.ini,二是xxx.ioc。实际上我新建工程也是这么干的,直接复制原有工程的这两个文件就然后点击upload按钮就初始化完成了。

推荐阅读更多精彩内容