DIY USB 电流表(5):使用 VSCode + PlatformIO 搭建固件开发环境

在前一篇 《DIY USB 电流表(4):PCB 焊接与调试》 中,我们已经完成了 USB 电流表的焊接,有了硬件之后,就可以开始给它注入灵魂——开发固件了。

首先完成开发环境的搭建,由于我平时都是使用的 MacBook 作为开发机,因此这里以 macOS 作为开发平台来介绍开发环境的搭建。当然 Visual Studio、PlatformIO 这些本身也都是跨平台的,在其他系统配置这一套开发环境的步骤也类似,也可以参考。

PS. 我也还是一个初学者,如果文章中有一些错误或不足,还请多多指教。

开发环境介绍

Visual Studio Code

diy-usbmeter-5-1

项目地址:https://code.visualstudio.com/

Visual Studio Code 是一款由微软开发且跨平台的免费源代码编辑器。该软件以扩展的方式支持语法高亮、代码自动补全、代码重构功能,并且内置了命令行工具和 Git 版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置,也可以通过内置的扩展程序商店安装其他扩展以拓展软件功能。

一般来说,做嵌入式固件开发工作,通常会在 Windows 系统上完成,并且有完整的 IDE 可以使用,例如像 Keil。或者像在这个项目中所使用的 MCU CH32V003,沁恒也提代了一个 IDE MounStudio。

但是因为现在很多嵌入式开发相关的工具链都提供了跨平台的平台,编译器、烧录程序等都可以直接在 macOS 平台上使用,因此现在使用 macOS 来作为嵌入式开发平台也并没有太大的阻碍。

我在 macOS 上使用的编辑器是 Visual Studio Code,相信这个编辑器也不用过多介绍,它现在已经是世界上最流行的编辑器之一了,通过完善的插件扩展机制,我们可以很方便地在 Visual Studio Code 进行各种 MCU 固件的开发工作。

PlatformIO

diy-usbmeter-5-2

项目地址:https://platformio.org/

PlatformIO is a cross-platform, cross-architecture, multiple framework, professional tool for embedded systems engineers and for software developers who write applications for embedded products.

PlatformIO 是一个开源的嵌入式开发工具链管理系统,通过它可以很方便的安装各种 MCU 平台进行固件开发工作所需要的工具链,例如编译器、烧录工具等,如果是使用 Arduino 框架,还提供了完善的三方库管理机制,可以很方便地将第三方库集成到项目中,提升开发速度。

diy-usbmeter-5-3

Platform-CH32

项目地址:https://github.com/Community-PIO-CH32V/platform-ch32v

PlatformIO platform for CH32V RISC-V chips (CH32V003, CH32V103, CH32V20x, CH32V30x, CH32X035) and CH56x, CH57x, CH58x, CH59x

PlatformIO 目前还没有集成 CH32 系列 MCU 的平台支持,但是已经有爱好者制作好了兼容 PlatformIO 的套件,可以直接通过 PlatformIO 的平台安装功能添加到 PlatformIO 中来使用。

目前在 platform-ch32v 中,对于 CH32V003 提供了 None OS、Arduino 等多种开发框架的支持,可以根据实际需要自行选择。

不过在经过简单测试之后发现对于 CH32V003 来说,Arduino 框架有点重,稍微加一点功能,编译出来固件的大小,以及内存的使用,就超过 CH32V003 的限制了,这个 MCU 只有 16KB Flash 和 2KB RAM,资源相当紧张。

安装 PlatformIO 和 platform-ch32v

安装 PlatformIO

直接在 VSCode 的扩展市场中,搜索 platformio 就可以找到对应的扩展,直接点击安装即可。

diy-usbmeter-5-4

安装 platform-ch32v

安装完 PlatformIO IDE 扩展后,可以在侧边栏看到对应的图标,通过它可以打开 PlatformIO 的侧边栏。

diy-usbmeter-5-5

在侧边栏的 Quick Access 中,就可以看到 PlatformIO 常用的功能了:

diy-usbmeter-5-6

我们在这里需要添加一个新的平台支持能力,可能通过 Platforms 菜单,进入到 PlatformIO 的平台管理页面。

在这里可以看到已经安装的 MCU 平台支持,通过 Advanced Installation 按钮,可以手动安装 PlatformIO 尚未集成的 MCU 平台,对于 CH32V003 来说,就需要手动安装。

diy-usbmeter-5-8

在打开 Advanced Installation 窗口后,将 platform-ch32v 的仓库地址 https://github.com/Community-PIO-CH32V/platform-ch32v.git 填入到输入框中,点击安装,慢慢等待安装完成即可。

diy-usbmeter-5-9

在安装完成之后,就可以在前面的平台列表中看到 WCH CH32V 了。

创建项目

安装和配置完开发环境之后,先来创建一个简单的项目将整个开发流程测试一下吧。

在 PlatformIO 的侧边栏菜单中,通过 PIO Home > Open 可以打开 PlatformIO 的首页,通过首页的 New Project 可以快速创建一个项目。

diy-usbmeter-5-3

在这个 USB 电流表中,我们使用的芯片是 CH32V003F4P6,并且使用 None OS SDK 进行开发,因此项目配置如下:

  • Name: CH32V003USBMeter
  • Board:Generic CH32V003F4P6 (WCH)
  • Framework:Noneos-sdk
  • Location: Use default location

对于项目位置,默认存放项目的文件夹是 ~/Documents/PlatformIO/Projects,如果不喜欢这个位置,可以去掉勾选使用默认位置,再选择一个自己喜欢的目录。

当然也可以参考社区的帖子,将默认项目地址更改为自己需要的地址: https://community.platformio.org/t/how-to-change-default-new-project-location/2828

diy-usbmeter-5-10

最后点击完成,坐等项目创建完成即可。

编写测试代码

在创建完项目后,PlatformIO 就为我们生成了整体项目的结构,并且生成了一个 platformio.ini 配置文件,用于配置在编译、烧录等使用的参数。

diy-usbmeter-5-11

在使用 Noneos-sdk 时,默认是没有创建源文件的,可以在 src 目录中新建一个 main.cpp,开始编写我们的测试代码。

测试代码 main.cpp

#include <ch32v00x.h>
#include <debug.h>

extern "C" void NMI_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
extern "C" void HardFault_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    SystemCoreClockUpdate();
    Delay_Init();
    USART_Printf_Init(115200);

    Delay_Ms(1000); // give serial monitor time to open
    printf("SystemClk: %u\r\n", (unsigned)SystemCoreClock);
    printf("DeviceID: %08x\r\n", (unsigned)DBGMCU_GetDEVID());

    int loop_count = 0;

    while (1) {
        Delay_Ms(1000);
        printf("loop %d\n", loop_count);
        loop_count++;
    }
}

void NMI_Handler(void) {}
void HardFault_Handler(void)
{
    while (1)
    {
    }
}

在测试代码中,只做了最简单的初始化工作,在启动时打印了设备的时钟频、设备 ID,然后每隔 1 秒打印当前已经循环了几次。

编译测试代码

保存完编写的代码,使用底部工具栏上的编译按钮就可以进行编译代码操作了,如果代码没有问题,在输出窗口就可以看到编译结果了。

diy-usbmeter-5-12

示例代码相当简单,很快就编译完成了:

diy-usbmeter-5-13

在输出窗口可以看到,这个测试代码编译后需要占用 7012 字节的 Flash,使用 444 字节的内存。

烧录固件

注意:CH32V003 系列 MCU 需要使用沁恒的 WCH-LnikE 仿真器才可以烧录固件,因此需要额外注意一下,在购买仿真器时不要买错。

diy-usbmeter-5-14

将仿真器的 3V3、GND、SWDIO 三个引脚使用杜邦线连接到 USB 电流表的对应引脚上:

diy-usbmeter-5-15

执行 Upload 操作,就可以将固件烧录到 USB 电流表的 CH32V003 上了:

diy-usbmeter-5-16

烧录完成后就可以看到输出窗口显示成功的信息了:

diy-usbmeter-5-17

查看日志

烧录完固件之后,就可以将仿真器的 TX、RX 连接到 USB 电流表 PCB 的 TXD、RXD 引脚上来查看通过串口输出的日志了。

注意:这里需要将仿真器的 RX 连接到 PCB 的 TXD,仿真器的 TX 连接到 PCB 的 RXD。

diy-usbmeter-5-18

这里顺便推荐一下沁恒出的 macOS 串口查看工具,在一众串口工具中,算是比较简洁好用的,可以通过以下链接前往 Mac App Store 安装:https://apps.apple.com/us/app/wchserialport/id1580700717?mt=12

将 TX、RX 引脚连接完成后,在串口工具中连接到仿真器的串口,并且给 USB 电流表供电,就可以在串口工具中看到 MCU 打印出来的日志了:

diy-usbmeter-5-19

小结

Visual Studio Code + PlatformIO 的整体开发体验感觉还不错,比较轻量,但是像一些代码静态分析能力可能还是比不上比较完整的 IDE,不过能在 macOS 上有这个开发体验也算可以接受了。

目前我们只完成了开发环境的搭建,后面就可以开始编写 USB 电流表的固件了。

USB 电流表开源地址

这个 USB 电流表已经在立创开源平台开源,访问以下地址即可查看相关文件:

https://oshwhub.com/wandaeda/ji-yu-ch32v003-de-usb-dian-liu-biao

DIY USB 电流表系列

参考资料

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>