前段时间,看一些开源项目时,发现是基于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 PE5void 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);#endifdigitalWrite(LED_PIN1,HIGH);delay(1000);#ifdef jLINK_flag digitalWrite(LED_PIN0,LOW);#endifdigitalWrite(LED_PIN1,LOW);delay(1000);
}

根据猜想,分别下载serial工程和jlink工程验证


最终的效果是
1.下载Jlink工程,两个灯闪烁
2.下载Serial工程,一个灯闪烁

猜想和实验符合!

PlatformIO开发之STM32点灯(基于arduino框架)相关推荐

  1. STM32G070RBT6基于Arduino框架下点灯程序

    STM32G070RBT6基于Arduino框架下点灯程序 ✨说明:Arduino STM32系列开发环境搭建不在本示例范围内. 相关篇<[硬件开源电路]STM32G070RBT6开发板> ...

  2. STM32F401RCT6基于Arduino框架点灯程序

    STM32F401RCT6基于Arduino框架点灯程序

  3. 视频教程-物联网嵌入式开发之STM32 和 RT-thread-物联网技术

    物联网嵌入式开发之STM32 和 RT-thread 我叫连志安,现任职广东长虹技术研究所(国企).之前在康佳集团(国企).CVTE(上市公司)等公司任职.负责过Android TV.智能网关.路由器 ...

  4. STM32F103C8T6基于Arduino框架下利用定时器跑RBG灯闪烁

    STM32F103C8T6基于Arduino框架下利用定时器跑RGB灯闪烁

  5. ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程

    ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程 ESP RainMaker ESP RainMaker 是乐鑫推出的一个端到端平台.基于该平台,用户无需管理基础设 ...

  6. CH55X 基于Arduino框架开发程序上传相关注意事项

    CH55X 基于Arduino框架开发程序上传相关注意事项

  7. STM32G070RBT6基于Arduino框架GPIO输入输出模式

    STM32G070RBT6基于Arduino框架GPIO输入输出模式

  8. STM32G070RBT6基于Arduino框架下eeprom使用示例

    STM32G070RBT6基于Arduino框架下eeprom使用示例

  9. STM32G070RBT6基于Arduino框架GPIO外部中断

    STM32G070RBT6基于Arduino框架GPIO外部中断

最新文章

  1. 吴志强院士:CIM与城市未来
  2. python datetime timedelta函数_Python Pandas DatetimeIndex.to_perioddelta()用法及代码示例
  3. Excel关于使用图形的妙招技法
  4. hdu 5203(枚举)
  5. 在Google的AppEngine上升级到Java 7
  6. git commit命令
  7. arcobject c++实现检查要素是否为multipart(准确而且快 最主要是real 网上代码有问题)
  8. 我是如何提升 Rust 编译器的速度?
  9. google海底光缆图_感受技术震撼:全球海底光缆分布图详解(附源地图链接)
  10. 【大数据实验2】hadoop配置、测试和实例
  11. sort()与拉姆达表达式
  12. 酸辣土豆丝的做法你知道几个?
  13. 计算机DNS怎么配置,如何设置电脑的dns地址
  14. 湖南城市综合竞争力排名
  15. python图像纹理提取_提取图像的颜色、纹理特征(传统算法)
  16. 修改共享计算机主机名,怎么修改计算机的主机名,和所在的工作组
  17. linux查询awk命令用法
  18. 深大计网实验 4:Socket 网络编程
  19. 如何在 Excel 中实现区间查找式的 VLOOKUP
  20. 基于MATLAB的图像去雾系统

热门文章

  1. c语言经典笔试100题,100条经典C语言笔试题目(全).doc
  2. java crach 日志解析
  3. 数据结构算法 - ConcurrentHashMap 源码解析
  4. Markdown个人学习记录
  5. 10、spss做最优尺度分析
  6. 为什么苹果日历不能设置日程_iphone6提醒事项加入日历怎么不提醒我 到时
  7. 无法割舍的乡情--去外公家
  8. 【大数据面试题】(五)Spark 相关面试题总结
  9. 支持M1芯片Mac电脑的 Adobe Photoshop 2021 for Mac 中文版本
  10. 想要职场安全感?那就请你别停止成长