查看原文
其他

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

ohdarling 欧大的自留地 2024-04-08

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

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

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


开发环境介绍

Visual Studio Code

项目地址: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

项目地址: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 框架,还提供了完善的三方库管理机制,可以很方便地将第三方库集成到项目中,提升开发速度。

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 就可以找到对应的扩展,直接点击安装即可。

安装 platform-ch32v

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

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

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

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

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

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


创建项目

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

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

在这个 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

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


编写测试代码

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

在使用 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 秒打印当前已经循环了几次。


编译测试代码

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

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

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


烧录固件

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

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

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

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


查看日志

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

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

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

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


小结

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

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


USB 电流表开源地址

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

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


DIY USB 电流表系列


参考资料

  • https://github.com/Community-PIO-CH32V/platform-ch32v

  • https://platformio.org/

  • https://code.visualstudio.com/

  • https://community.platformio.org/t/how-to-change-default-new-project-location/2828

  • https://github.com/wagiminator/CH32V003-GameConsole

  • https://apps.apple.com/us/app/wchserialport/id1580700717?mt=12


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存