PlatformIO开发之STM32点灯(基于arduino框架)

前段时间,看一些开源项目时,发现是基于PlatformIO IDE编写的,然后去查了下这个IDE,功能性还是挺强大的,不过国内好像是没找到特别详细的一个教程。为此试下毒。

PlatformIO 官方手册
参考文档

1.PlatformIO 介绍

PlatformIO 是一个跨平台、跨架构、多框架、专业的 嵌入式系统工程师和编写应用程序的软件开发人员的工具 用于嵌入式产品。

PlatformIO IDE 是下一代物联网集成开发环境。

  • 跨平台构建系统,没有对操作系统软件的外部依赖:
    • 800+ 板
    • 35+ 开发平台
    • 20+ 框架
  • 调试
  • 远程开发
  • 单元测试
  • C/C++智能代码补全
  • 用于快速专业开发的 C/C++ Smart Code Linter
  • 数百个流行图书馆的图书馆经理
  • 具有多个窗格的多项目工作流程
  • 主题支持深色和浅色
  • 串口监视器
  • 带有 内置终端 PlatformIO Core (CLI) 和 CLI 工具的 ( pio, platformio)
  • 内置 PlatformIO 主页 。

2.PlatformIO的安装(以下称PIO)及IDE的功能介绍

1.安装PIO

直接在VScode的插件里搜索 PlatformIO,然后安装即可(挺方便的)
在这里插入图片描述我这里是已经安装好了,故第3步那是显示的禁用,首次安装时,这是是显示的安装。
安装完成后,在vscode左侧,有会一个像蚂蚁头像(或外星人头像的图标,我也不清楚这叫啥图标了…),然后在底部会有 房子 √ → 的图标(若安装完,没这些图标,可以重启下VScode)
在这里插入图片描述

2.PIO功能介绍

在这里插入图片描述

  • 房子的图标,点击打开 PIO主页
  • √ ,点击运行
  • →,点击下载
  • 垃圾桶,点击清理编译过程生成的文件
  • 小插头,点击后会启动命令行的串口监视助手;
  • 小命令行,点击后新建一个终端窗口;

打开PIO主页,在主页的顶部有一个导航栏,有用的就是前进后退的按钮和账户相关的交互元素
在左侧有Home、project、Inspect、Libraries、Boards、Platforms和Devices七个标签页,下面分别简单说明一下。

Home 标签页

进入Platformio 的主页显示的就是 Home 标签页,标签页内从上到下可以依次看到以下内容:

  • Show at startup 的复选框,勾上后,每次启动 vs code 就会启动这个主页;
  • Quick Access 下有四个操作按钮,分别是:
    • New Project:用于新建工程;
    • Import Arduino Project:用于导入电脑中已经存在的 Arduino 工程;
    • Open Project:用于打开已经存在的 Platformio 工程;
    • Project Examples:用于打开本机已经安装的单片机平台的例程工程;
  • Recent News:显示最新 Platformio 信息;

project 标签页

显示最近打开的工程

Inspect 标签页

用于检测项目,可以看到代码占用了多少RAM和Flash等信息,具体看文档介绍.
在这里插入图片描述

Libraries 标签页

在这里插入图片描述ibraries 标签页是管理库的接口,这里只简单说明一下,主要包含四个标签页:

  • Registry 标签页 :这个页面是有一个搜索框,搜索框内没有内容的时候,会在搜索框下面显示所有可用的库,搜索框中输入关键词就会过滤显示相关的库。
    点击想要安装的库,就会进入这个库的详细页面,这个页面里有安装按钮、例程、使用方法等操作接口。
  • Installed 标签页:这里主要展示本机已经安装的第三方库。
  • Built-in 标签页:这里显示已安装平台内置的库。
  • Updates 标签页:展示需要更新的库。

Boards 标签页

这个标签页用来展示 Platformio 支持的开发板列表,最上方的搜索框内可以输入关键词过滤显示相关的开发板,比如输入 Arduino 就会显示Arduino的开发板。

列表中每个条目显示一个开发板,包含信息:
在这里插入图片描述

Platforms 标签页

这个标签页用来管理平台支持,比如我的这里安装了三个平台的支持:

  • Espressif 8266
  • Native
  • ST STM32
    这三个条目可以点进去查看平台详细信息和对平台进行一定操作。标签页内还包含所有的嵌入式、桌面平台的相关管理项,同时也有框架展示的标签页,可以通过这里的每个条目了解对应框架的信息和使用方法。

Devices 标签页

这里显示连接电脑的硬件设备,比如串口、数字逻辑设备和网络设备。

3.创建工程

  • 开发板(正点原子精英板)
  • 串口下载线
  • Jlink

嵌入式的第一步,点个灯,现在我们来创建个点灯工程,在主页中,点击 New project,
在这里插入图片描述
然后点击finish,等待(注意第一次生成的时候需要下载资源,会比较慢,可找加快github的访问的方法或科学上网),我这工程名是blink,板子是正点原子的精英板,故选择STM32F103ZE的芯片,架构选择arduino(可选择其他架构,如STM32Cube),当前的例子是采用的arduino架构。

创建完成后,会打开对应的工程:
在这里插入图片描述
红框内是新建项目的文件,

  • .pio 文件夹:存放编译产生的中间文件和最后生成的执行文件;
  • lib 文件夹:存放库文件;
  • src 文件夹:存放源文件,其内部默认生成名为 main.cpp 的源文件;
  • platformio.ini:工程的配置文件

编写代码 mai.cpp文件下增加两个灯的引脚,然后进行翻转,让其闪烁

#include <Arduino.h>

#define LED_PIN0 PB5
#define LED_PIN1 PE5

void setup() {
  // put your setup code here, to run once:
  pinMode(LED_PIN0,OUTPUT);
  pinMode(LED_PIN1,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(LED_PIN0,HIGH);
  digitalWrite(LED_PIN1,HIGH);
  delay(1000);
  digitalWrite(LED_PIN0,LOW);
  digitalWrite(LED_PIN1,LOW);
  delay(1000);
}

编写完成后,点击 底部栏的 √ 图标进行编译
在这里插入图片描述第一次编译通常要比较耗时,按照我上面说的(找github的加速工具或科学上网),等显示编译成功,就OK了,然后就开始进行下载到板子上
Github加速工具

使用串口下载

点击 → 按钮,显示报错(我这个时候是将正点原子的串口下载线连到电脑上了),
在这里插入图片描述
这里显示报错是,默认使用的stlink,那么我使用串口下载的话,那么将这个下载改成串口下载即可,
在这里插入图片描述在ini配置文件中,增加这两行,将下载方式改为串口下载,并固定COM8下载(这是因为我这不仅仅只插了这一个端口,可查看电脑的设备管理器,看你用的是哪个端口,若电脑上只接了一个连到开发板的端口,则不需要固定端口,会自动监测)。

添加完这两行后,再点击编译(√),通过后再下载(→),

在这里插入图片描述现在下载成功了,可以看到开发板的两个灯在进行闪烁。

【注意事项】:

  • 在进行下载的时候,注意要将开发板的Boot0接正,Boot1接地,同时当你下载完后,再点击下载时,会报错,故下载完后再下载,需要先点击板子的复位键,然后在点击下载(→),即可下载成功。
  • Boot0接正,Boot1接地时,点击开发板的电源按键时(给开发板断电),然后在重新上电,开发板的两个灯不会闪烁了,这时需要将Boot0接地,Boot1接地,然后在重新上电,才能正常执行代码
    在这里插入图片描述这是开发板中使用手册的说明。

使用Jlink下载

修改ini文件,将其改成Jlink下载
在这里插入图片描述
【注意】:首次通过Jlink或串口下载时都需要下载资源才能下载到板子上,等资源下载完成后,点击下载(→),即可下载到板子上,
在这里插入图片描述还有一点要注意
下载完后发现板子上没有现象(此时我是Jlink(只用到了JLINK的四根线)给板子上供电的),boot0和boot1都是接地,
然后我断开Jlink,通过串口线给板子供电时,正常现象灯闪烁,故单纯以Jlink供电,不能让板子正常工作

对于STlink下载的话,应该和Jlink差不多,手上也没STlink,有的朋友可以试试。

4.关于ini 文件的简单使用

上面我们使用了串口下载和Jlink下载,那么可不可以单纯一个开关,进行选择是串口下载还是Jlink下载呢?
于是进行了下面测试,在ini文件中,增加部分代码
在这里插入图片描述如图,然后我点击底部栏的编译(√) ,发现编译了两份工程
在这里插入图片描述然后我点击PIO得到蚂蚁图标,发现在工程任务中有两份我创建的工程,并且在每份工程中都有编译,下载等功能
在这里插入图片描述此时我是串口下载线与电脑连上,故点击STM32F103ZE_Serial工程的build
在这里插入图片描述
只编译了STM32F103ZE_Serial工程,然后点击STM32F103ZE_Serial下的upload按钮,进行下载
在这里插入图片描述正常下载。
那么针对这个功能,可以发散性想下,可以将工程中编译不同条件下的宏(开关)定义在这,即可进行选择性编译。
针对于ini配置文件,了解不多,具体还是要看官方手册是怎样应用的

测试

在这里插入图片描述

在Jlink工程中增加了一个标识符,然后在main.cpp中代码修改为如下,正常情况下,下载Jlink工程,两个灯闪烁,下载serial工程,一个灯闪烁。

void loop() {
  // put your main code here, to run repeatedly:
  #ifdef jLINK_flag 
  digitalWrite(LED_PIN0,HIGH);
  #endif
  digitalWrite(LED_PIN1,HIGH);
  delay(1000);
  #ifdef jLINK_flag 
  digitalWrite(LED_PIN0,LOW);
  #endif
  digitalWrite(LED_PIN1,LOW);
  delay(1000);
}

根据猜想,分别下载serial工程和jlink工程验证
在这里插入图片描述
在这里插入图片描述
最终的效果是
1.下载Jlink工程,两个灯闪烁
2.下载Serial工程,一个灯闪烁

猜想和实验符合!

  • 18
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值