单片机---Mac下的开发环境【2】(STM32、Arduino + PlatformIO IDE)

前言

前些日子写了一篇单片机---Mac下的开发环境【1】(STC单片机 + SDCC + Stcgal)(此文以STC单片机为例编写),有朋友留言问能不能写一篇Mac下STM32开发环境的文章,我回复一定会有的。刚好今天新买了一块STM32核心板,所以把之前的承诺兑现一下。

有些身边的小伙伴问我为什么一定要折腾Mac下各种项目的开发,在此也简单解释一下。

    1. 因为Mac不止能够满足我的工作需求(Android、iOS开发),同时体验也是最好的,移动开发领域的伙伴应该都懂;
    1. 因为爱好广泛,比如会玩树莓派、单片机、ARM嵌入式,会用QT5开发个PC软件验证一下基于OpenCV的算法等等,导致我过去两年一直同时使用Win10、Ubuntu、Mac OS这三个操作系统,并且都是物理机。电脑多,项目也零散的分布在三台电脑上面,随着积累的项目越来越多,用来进入工作状态的时间越来越长,头都大了。

所以,为了化繁为简,决定所有工作、爱好都迁移到Mac上来。至于为什么选择Mac,参上第1条,毕竟要靠工作吃饭,更多的时间也都是花费在工作上面,所以这个决定一点也不纠结。以上。

搭建开发环境

这篇文章与之前的那篇文章大不一样,重点是因为发现了一个牛X的工具---PlatformIO.

最终的开发环境:

使用流程:

  • 安装 VSCode
  • 安装 PlatformIO IDE 插件
  • 新建工程
  • 编写代码
  • 编译、下载
  • End

PlatformIO是什么?

Different microcontrollers normally have different developing tools. You probably thought that single unified development tool could be great.
不同的MCU通常都有不同的开发工具。如果有一个统一的开发工具会是一件很棒的事情。

这就是 PlatformIO 做到的事情。它统一了非常多的 MCU 的开发工具,支持的 MCU 和 平台 相当全面,并且最重要的是它跨平台,而且在 VSCode 上面有对应的 PlatformIO IDE 插件(VSCode 到目前的势头想必鲜有人会质疑它的统治力了吧)。

看看官网是怎么介绍 PlatformIO 和 PlatformIO IDE 的:

PlatformIO.png
PlatformIO IDE.png
For.png

看看它是多么的自信,也看看它的自信源自什么。更多的介绍或使用细节参照官网文档,很详细并对阅读与理解都非常友好。对了,这么牛 X 的它,是开源的!

VSCode 的安装没什么好说的,简单说一下 PlatformIO IDE 插件的安装,如下图:

PlatformIO IDE Extension.png

打开 VSCode 后进入扩展搜索界面,选择 PlatformIO IDE 插件,随后点击 Install 按钮,安装完成后需要重启 VSCode 激活插件。插件如果安装成功,左下角就会有一个小房子图标,并且默认每次启动 VSCode 都是启动 PlatformIO IDE(可以关闭此选项)。
PIO Home.png

看到这个界面就说明 PlatformIO IDE 安装完成了。


一、STM32 开发板基于此开发环境的基本使用

硬件:

  • STM32F103C8T6 最小板
  • ST-LINK V2

我手里的 STM32 开发板是 STM32F103C8T6 小系统板,很便宜,TB上卖十几块钱。
编程器用的是 ST-LINK V2,TB上也是一搜一大把。如下图:


STM32 Devices.png

现在我们进入正题,先简单概括一下我们需要做的工作(调试、仿真相关的部分暂时不讨论,日后会专门整理这部分的文章。现阶段我们只关心如何把正确的代码正确的运行在芯片上):

  • 新建项目
  • 编写代码
  • 编译项目
  • Upload
  • End

新建项目

New Project.png
打开 PlatformIO IDE,选择 New Project,会弹出如下对话框:
Dialog.png
填写项目名称,选择对应的板子,选择Framework,工程文件保存的路径。
这里需要强调的是工程文件路径中一定不要有中文!否则新建工程时会报错。 可以使用 IDE 默认保存路径,也可以自己定义路径。

然后点击 Finish 按钮,开始创建项目文件,第一次创建时需要下载依赖,时间稍稍长一点,请耐心等待。
Creating.png

项目创建完成后如下图:
Initialized.png
左边是项目文件树,这里我们先重点关注 src/main.cpp 和 platformio.ini 这两个文件。
  • src/main.cpp 很显然是源代码文件
  • platformio.ini 是 PlatformIO 项目配置文件

编写代码

如上一篇文章,我们还是先写一个最简单的 Blink Led 程序来测试,代码如下:

#include <Arduino.h>

// 定义 LED 驱动管脚
#define LED PC13

// Arduino 框架 setup 方法
void setup()
{
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
}

// Arduino 框架 loop 循环
void loop()
{
  // put your main code here, to run repeatedly:
  // 让 LED 点亮 100ms,熄灭 100ms,循环闪烁。
  digitalWrite(LED, LOW);
  delay(100);
  digitalWrite(LED, HIGH);
  delay(100);
}

编译项目

使用快捷键 control+option+B 或者点击左下角的 Build 按钮进行编译,第一次编译的时候会先下载 STM32 相关的编译工具和依赖的框架,编译过程终端如下:

Compile1.png
Compile2.png

Upload

首先将 STM32 开发板通过 ST-LINK V2 连接到 Mac,使用快捷键 control+option+U 或者点击左下角的 Upload 按钮进行烧录,如下图:

Upload.png
如此,就烧录成功了,这时你应该可以看到开发板上的 LED 在闪烁了。STM32 在 Mac 下的简单开发介绍就告一段落了。

但是这里要重点提及一下 Upload 协议,看上图中红框中的信息可知,烧录过程需要配置协议,可用的协议有上面几种,其中包括我使用的 stlink,每个协议第一次使用的时候会安装对应的协议栈。

还有到现在为止我们还没有操作我上面提及的需要关注的另一个文件 --- platformio.ini, 我们打开它看一下里面都有哪些内容:
platformio.ini

相信不需要我解释大家都能很直观的看明白内容的作用是什么。
这里我提及一下 Upload Protocol,实际上我们可以再这里指定协议,例如添加如下配置信息:

upload_protocol = stlink

到文件中:
upload_protocol.png

这样就指定了此项目使用 stlink 协议进行烧录。因为我没有 jlink 等其他设备,所以没办法在这里给大家演示了。

**最后在多说一句,通常 STM32 开发过程中少不了 STM32Cube,PlatformIO IDE 对此是支持的,详见:STM32Cube — PlatformIO documentation,而且不得不提的是,意法半导体这些年很多工具都已实现跨平台,其中就有 STM32CubeMX,这点太赞了!更多的具体细节大家可以在评论区一起讨论。


二、Arduino 基于此开发环境的基本使用

硬件:

  • Arduino Nano 板

手里有块 Arduino Nano 板子,就以此板为例简单介绍一下 Arduino 如何使用此开发环境。
Arduino.png

不要在意我这块没有官方授权的板 😂

步骤与 STM32 开发过程几乎一样,不同的地方在于,我们这里使用板载 USB 转串口,所以必须要指定 Upload 端口,稍后会讲。过程如下:

  • 新建项目
  • 编写代码
  • 编译项目
  • Upload(须在 platformio.ini 文件中配置 Upload 端口)
  • End

新建项目

点击新建项目,然后配置项目选项:
Arduino Nano Project.png

这里需要注意的是 Nano 有两种 Bootloader,我这块板子使用的是旧版的,这个不要选错,不然无法烧录。项目创建成功后:

main.cpp
platformio.ini

编写代码

写一个与前面 STM32 一样的 Blink Led 程序,管脚定义有变化,LED_BUILTIN 高电平点亮 LED,代码如下:

#include <Arduino.h>

// Arduino 框架 setup 方法
void setup()
{
  // put your setup code here, to run once:
  pinMode(LED_BUILTIN, OUTPUT);
}

// Arduino 框架 loop 循环
void loop()
{
  // put your main code here, to run repeatedly:
  // 让 LED 点亮 100ms,熄灭 100ms,循环闪烁。
  digitalWrite(LED_BUILTIN, HIGH);
  delay(100);
  digitalWrite(LED_BUILTIN, LOW);
  delay(100);
}

编译项目

与前面介绍的 STM32 一样,可以使用快捷键或者左下角 Build 按钮:

Compile.png

Upload

先将 Arduino Nano 通过 Micro USB 连接至 Mac

Arduino Nano

连接好之后,我们先像 STM32 一样不进行任何配置,直接执行 Upload 操作,结果如下:

Upload without config port

上图红色框出来的地方可以看到,IDE Auto-detected 一个端口,可是这个端口是错的,导致 Upload 操作失败,那么要如何解决呢?其实很简单,在 platformio.ini 文件中配置一下即可:

upload_port

红色框中的代码是配置烧录时所用的端口信息,这里是我的端口信息,大家要配置自己实际使用的端口。可以通过

 ~  ls /dev/tty.*

命令查看端口情况。

配置好 upload_port 之后,我们再次烧录:


Uploaded.png

大功告成 ✌️

最后: 其实我本想测试一下 STC 单片机用此开发环境的情况的,虽然第一篇文章的环境也是使用 VSCode 作为编辑器,但是编译和烧录都要分别敲命令,还要写 Makefile,实际体验还是很一般的。PlatformIO IDE 支持 8051 单片机的,Upload 工具配置为 stcgal 应该也是没问题的,所以这个环境应该是满足 STC 单片机开发的,并且比我第一篇文章搭建的环境会更友好。我又要忙起来了,所以就先不测试了。测试过的小伙伴们可以在评论区晒一下结果。

---The End

推荐阅读更多精彩内容