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 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框架)相关推荐
- STM32G070RBT6基于Arduino框架下点灯程序
STM32G070RBT6基于Arduino框架下点灯程序 ✨说明:Arduino STM32系列开发环境搭建不在本示例范围内. 相关篇<[硬件开源电路]STM32G070RBT6开发板> ...
- STM32F401RCT6基于Arduino框架点灯程序
STM32F401RCT6基于Arduino框架点灯程序
- 视频教程-物联网嵌入式开发之STM32 和 RT-thread-物联网技术
物联网嵌入式开发之STM32 和 RT-thread 我叫连志安,现任职广东长虹技术研究所(国企).之前在康佳集团(国企).CVTE(上市公司)等公司任职.负责过Android TV.智能网关.路由器 ...
- STM32F103C8T6基于Arduino框架下利用定时器跑RBG灯闪烁
STM32F103C8T6基于Arduino框架下利用定时器跑RGB灯闪烁
- ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程
ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程 ESP RainMaker ESP RainMaker 是乐鑫推出的一个端到端平台.基于该平台,用户无需管理基础设 ...
- CH55X 基于Arduino框架开发程序上传相关注意事项
CH55X 基于Arduino框架开发程序上传相关注意事项
- STM32G070RBT6基于Arduino框架GPIO输入输出模式
STM32G070RBT6基于Arduino框架GPIO输入输出模式
- STM32G070RBT6基于Arduino框架下eeprom使用示例
STM32G070RBT6基于Arduino框架下eeprom使用示例
- STM32G070RBT6基于Arduino框架GPIO外部中断
STM32G070RBT6基于Arduino框架GPIO外部中断
最新文章
- 吴志强院士:CIM与城市未来
- python datetime timedelta函数_Python Pandas DatetimeIndex.to_perioddelta()用法及代码示例
- Excel关于使用图形的妙招技法
- hdu 5203(枚举)
- 在Google的AppEngine上升级到Java 7
- git commit命令
- arcobject c++实现检查要素是否为multipart(准确而且快 最主要是real 网上代码有问题)
- 我是如何提升 Rust 编译器的速度?
- google海底光缆图_感受技术震撼:全球海底光缆分布图详解(附源地图链接)
- 【大数据实验2】hadoop配置、测试和实例
- sort()与拉姆达表达式
- 酸辣土豆丝的做法你知道几个?
- 计算机DNS怎么配置,如何设置电脑的dns地址
- 湖南城市综合竞争力排名
- python图像纹理提取_提取图像的颜色、纹理特征(传统算法)
- 修改共享计算机主机名,怎么修改计算机的主机名,和所在的工作组
- linux查询awk命令用法
- 深大计网实验 4:Socket 网络编程
- 如何在 Excel 中实现区间查找式的 VLOOKUP
- 基于MATLAB的图像去雾系统