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

本文介绍了PlatformIO IDE的安装、功能、工程创建、编译与下载过程,包括跨平台支持、调试工具和配置文件管理。通过实例演示了如何利用PlatformIO进行LED灯控制并灵活切换编译方式。

前段时间,看一些开源项目时,发现是基于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工程,一个灯闪烁

猜想和实验符合!

<think>首先,用户的问题是关于在VSCode中使用PlatformIO基于Arduino框架开发ESP32的方法和相关知识。用户引用了几个站内引用:[^1], [^2], [^3], [^4]。这些引用提供了相关的背景信息。 关键点: - 引用[1]讨论使用VSCode+PlatformIO调试基于ESP32S2的DS18B20温度模块。 - 引用[2]提到PlatformIOArduino框架下官方还不支持ESP32-S2,作者记录了搭建环境的经验。 - 引用[3]描述基于VSCode + PlatformIO创建运行第一个esp32程序的步骤。 - 引用[4]是关于基于Arduino框架的ESP32S3学习笔记,涉及串口读取。 用户的问题是:“我想了解在VSCode中使用PlatformIO基于Arduino框架开发ESP32的相关内容 请问VSCode中使用PlatformIO基于Arduino框架开发ESP32的方法和相关知识”。所以,我需要提供全面的指南,包括安装、设置、编程等。 系统级指令要求: - 所有行内数学表达式用$...$格式。 - 独立公式用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如:[^1] 在回答中,我必须引用段落末尾添加引用标识。引用了[^1], [^2], [^3], [^4],所以在相关部分要自然地添加。 结构清晰的回答: - 一步一步帮助用户解决问题。 - 尽量保证真实可靠。 内容大纲: 1. **介绍**:简要介绍VSCodePlatformIOArduino框架和ESP32。 2. **准备工作**:安装VSCodePlatformIO插件、设置环境。 - 引用[2]提到ESP32-S2的支持问题,需要处理。 3. **创建项目**:如何创建一个新的PlatformIO项目。 - 引用[3]详细描述了创建项目的步骤。 4. **编程基础**:编写简单的Arduino程序,例如Blink。 - 引用[4]讨论了串口通信,可以包括。 5. **调试和上传**:如何编译、上传和调试代码。 - 引用[1]涉及调试DS18B20模块。 6. **常见问题和优化**:针对ESP32的特性和常见问题。 7. **生成相关问题**:在末尾添加相关问题。 确保引用自然地添加: - 当提到创建项目时,添加[^3]。 - 当讨论ESP32-S2支持时,添加[^2]。 - 当涉及串口通信时,添加[^4]。 - 当调试例子时,添加[^1]。 因为用户引用了这些,我需要整合信息。 真实可靠:基于我的知识,PlatformIO支持ESP32Arduino框架。ESP32-S2可能有一些兼容性问题,正如引用[2]所述。 回答用中文。 最后,生成相关问题。 完整结构: - 开头介绍。 - 分步骤指南。 - 结尾相关问题。 现在,列出主要步骤: 1. **安装必要的软件**: - 安装VSCode。 - 安装PlatformIO插件。 - 确保Python安装(因为PlatformIO需要Python)。 2. **设置PlatformIO**: - 打开VSCode,安装PlatformIO IDE。 - 可能需要额外安装ESP32支持(引用[2]提到ESP32-S2的支持问题)。 3. **创建新项目**: - 点击PlatformIO图标,创建新项目。 - 选择Board:Espressif ESP32 Dev Module(引用[3])。 - Framework选择Arduino。 4. **编写代码**: - 基本Arduino sketch结构。 - 例如,Blink程序。 5. **编译和上传**: - 使用PlatformIO任务编译和上传。 6. **调试**: - 使用串口监视器(引用[4])。 - 调试器设置(如果可用)。 7. **添加库**: - 例如,使用DS18B20传感器库(引用[1])。 8. **常见问题**: - 驱动问题。 - 串口设置。 在回答中,自然地引用: - 例如,“在创建项目时,需要选择正确的Board类型,如引用[3]所述。” 数学表达式:在这个主题中,可能没有太多数学,但如果有公式,要用LaTeX格式。例如,在讨论串口通信时,可能有波特率计算,但保持简单。 生成相关问题: - 类似于示例,3-5个问题。 - 相关问题应基于主题。 相关问题例子: 1. 如何解决ESP32-S2在PlatformIO下的兼容性问题? 2. 如何添加外部库到PlatformIO项目中? 3. 如何进行ESP32的串口通信调试? 现在,草拟回答。 </think>### VSCode中使用PlatformIO基于Arduino框架开发ESP32的指南 在VSCode中使用PlatformIO开发ESP32结合了Arduino框架的易用性和PlatformIO的强大工具链,适合物联网和嵌入式开发。以下步骤详细介绍了方法及相关知识,内容基于可靠实践和用户引用资料整合而成。 #### 1. **准备工作:安装和设置环境** - **安装VSCode**:从[官方下载VSCode](https://code.visualstudio.com/),安装后打开。 - **安装PlatformIO插件**:在VSCode扩展商店搜索"PlatformIO IDE",点击安装。PlatformIO基于Python,确保系统已安装Python 3.7+(推荐使用Python官网版本)。 - **安装ESP32支持**:PlatformIO默认支持ESP32 Dev Module,但特殊型号如ESP32-S2可能需要手动添加支持包(引用[2]提到ESP32-S2官方支持不完全,需手动配置)[^2]。解决方法是: - 打开终端(VSCode内置或系统终端),运行命令添加ESP32-S2支持: ```bash pio platform install espressif32@latest ``` - 或通过PlatformIO配置文件(`platformio.ini`)指定平台版本。 - **驱动安装**:确保ESP32开发板连接到USB端口,安装对应USB驱动程序(如CP210x或CH340),否则无法上传代码。 #### 2. **创建新项目** - 在VSCode中,点击左侧工具栏的PlatformIO图标(蚂蚁头图标)。 - 在"Quick Access"菜单,选择"New Project"。 - **项目设置**: - **Name**:自定义项目名称,如`esp32-demo`(避免中文)。 - **Board**:搜索并选择"Espressif ESP32 Dev Module"(确保Board类型正确,常见错误是选错型号导致编译失败)[^3]。 - **Framework**:选择"Arduino"。 - **Location**:勾选"Use default location"或自定义目录。 - 点击"Finish"创建项目。PlatformIO自动生成项目结构,包含`src`目录(存放源代码)和`platformio.ini`配置文件(管理库和平台)。 - **验证项目配置**:编辑`platformio.ini`添加ESP32特定设置,例如设置串口波特率: ```ini [env:esp32dev] platform = espressif32 board = esp32dev framework = arduino monitor_speed = 115200 # 设置串口监视器波特率 ``` #### 3. **编写Arduino程序** - 打开`src/main.cpp`文件,编写基于Arduino框架的代码。Arduino框架简化了ESP32开发,提供类似Arduino IDE的API。 - **示例:Blink程序**(控制板载LED闪烁): ```cpp #include <Arduino.h> // 必须包含Arduino头文件 void setup() { pinMode(LED_BUILTIN, OUTPUT); // 初始化LED引脚 } void loop() { digitalWrite(LED_BUILTIN, HIGH); // LED亮 delay(1000); // 延迟1秒 digitalWrite(LED_BUILTIN, LOW); // LED灭 delay(1000); } ``` - **串口通信示例**:ESP32支持多个UART(Serial、Serial1、Serial2),常用`Serial.begin(baud_rate)`初始化串口(引用[4]讨论UART0对应Serial)[^4]。添加串口输出代码: ```cpp void setup() { Serial.begin(115200); // 初始化串口,波特率115200 pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // 切换LED状态 Serial.println("ESP32 is running..."); // 串口输出信息 delay(1000); } ``` - **添加外部库**:例如使用DS18B20温度传感器(引用[1]示例),在PlatformIO中通过库管理器添加: - 点击PlatformIO图标 → Libraries → 搜索"OneWire"和"DallasTemperature",安装。 - 在代码中引用: ```cpp #include <OneWire.h> #include <DallasTemperature.h> ``` #### 4. **编译、上传和调试** - **编译代码**:在VSCode底部状态栏,点击PlatformIO图标 → Project Tasks → Build。 - **上传到ESP32**:连接开发板到电脑,确保端口正确(PlatformIO自动检测)。在Project Tasks中点击"Upload"。 - 常见问题:上传失败可能因端口占用或驱动问题,重启VSCode或更新驱动可解决。 - **串口监视器调试**:点击Project Tasks中的"Monitor"打开串口监视器,查看输出日志(波特率需匹配代码设置,如$115200$波特)。 - 调试DS18B20传感器时,可读取温度值并打印到串口(引用[1]方法)[^1]。 - **高级调试**:PlatformIO支持JTAG调试(需外部调试器),在`platformio.ini`中启用: ```ini debug_tool = jlink # 或其他调试器类型 ``` #### 5. **相关知识和注意事项** - **ESP32特性**:ESP32支持WiFi/BLE、多核处理(Core 0和Core 1),在Arduino框架中可通过`xTaskCreate()`创建任务。 - **性能优化**:Arduino框架易用但效率较低,关键代码可使用ESP-IDF底层API(在PlatformIO中混合框架)。 - **常见错误解决**: - **编译错误**:检查`platformio.ini`中board和framework设置,或更新PlatformIO核心(运行`pio update`)。 - **ESP32-S2兼容性**:手动添加平台支持或指定开发板别名(引用[2]经验)[^2]。 - **串口问题**:确保波特率一致,$baud$ 值在代码和监视器中匹配。 - **资源管理**:ESP32内存有限,避免大数组;使用`FreeRTOS`特性管理任务。 通过以上步骤,你可以在VSCode中高效开发ESP32项目。遇到问题参考PlatformIO文档或社区论坛。
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值