基于CH32V003F4P6设计一款完全定制的开发板,并采用了Arduino Nano的外形尺寸
过去几个月里,我一直在设计自己的开发板,以充分发挥其性能。如今,我正在使用WCH的CH32V003F4P6芯片,对这款微控制器所提供的功能和性能感到非常惊叹。我之所以从Arduino转而选择它,是因为这是一款32位RISC-V微控制器,价格仅约0.10美元(十美分),是目前市面上最便宜的32位MCU之一。但我知道Arduino的魅力,正因如此,我便围绕这款芯片设计了一款完全定制的开发板,并采用了Arduino Nano的外形尺寸。
但这次我改进了这个版本,加入了内置的USB转串口、3.3V LDO稳压器、编程接口头、指示LED灯,以及所有GPIO引脚均拆分到2.54mm接口上。其设计理念很简单:制作一个极简、低成本、开源的开发板,任何人都可以自行制造和组装。CH32V003F4P6主频为48MHz,配备16KB闪存和2KB SRAM。
这已经足够用于学习嵌入式编程、读取传感器、驱动显示屏以及制作小型原型。未来,我将开发出与CH32V003兼容的库,使其功能类似于Arduino。尽管底层架构完全不同,但这款板子仍能带来类似Arduino的即时体验。在本文中,我将带你一步步完成整个硬件设计原理图、元器件选型、PCB布局以及闪烁测试代码的编写。整个项目均为开源,你可以下载设计文件并自行搭建。我使用EasyEDA完成了PCB设计,并通过JLCPCB以仅2美元的价格完成制造。此外,我还订购了模板,以便为测试目的组装几块电路板。
CH32V003F4P6是什么?
CH32V003F4P6 是 WCH(南京清恒微电子)基于 QingKe RISC-V2AA 处理器核心的通用型微控制器。与基于 ARM Cortex-M 的 MCU 不同,该芯片采用开放的 RISC-V-V-V 指令集架构。F4P66 型号采用 TSSOP-200 封装,体积小巧,但仍可通过细尖焊锡枪手工焊接。这款芯片的亮点在于其性价比。每单位价格约为 0.1000 美元,即可获得一个运行频率为 48MHz 的 32 位处理器,其速度甚至超过 Arduino Uno 的 ATmega328P。它支持 I2C、SPI、USART、ADC、定时器,甚至内置运算放大器。编程通过位于 PD11 引脚上的单线调试接口 SWIOIO 进行,使用 WCH 的 WCH-LinkEE 编程器和 MounRiver Studio IDE 实现。起初编程可能感觉有些麻烦,但请相信我,其实非常简单。
以下是CH32V003F4P6的主要规格:
•核心:QingKe 32位RISC-V2A处理器
•时钟频率:48MHz(带内部或外部振荡器)
•闪存:16KB
•SRAM:2KB
•封装:TSSOP-20(提供18个GPIO引脚)
•工作电压:3.3VV 至 5V
•外设:1个USART,1个I2C,1个SPI,1个10位ADC(8通道),2个定时器,1个OPA
•调试接口:单线SWIO(在PD1上)
所需部件
所有部件均来自LCSC,为标准零件。以下是您需要的物品:
•1x CH32V003F4P6 - RISC-V-V 微控制器(TSSOP-20)
•1x CH340C - USB转TTL串口转换器(SOP-16)
•1x HT7833-A-EV - 3.3V LDO稳压器(SOT-89-3)
•1个USB Type-C接口 - 用于供电和串行通信
•1个24MHz晶体振荡器 - SMD 3.2x2.5mm封装
•6个100nF电容 - C0402封装(去耦与滤波)
•2个1uF电容 - C0402封装(LDO输入/输出)
•6个1k电阻 - R0402封装(用于LED限流和复位上拉)
•2个5.1k电阻 - R0402封装(USB-C CC下拉电阻)
•4个红色LED - 0603封装(TX、RX和2个通用引脚)
•1个触控开关 - SMD 3.9x3.0mm(复位按钮)
•2个12针母头 - 2.54mm间距(GPIO扩展接口)
•1个3针公头 - 2.54mm间距(WCH-LinkE编程)
电路图
电路通过USB Type-C接口(U4)供电。我在CC1和CC2线上使用了两个5.1k的下拉电阻(R4和R7),这是为了让主机能够识别USB-C设备为USB 2.0设备所必需的。如果没有这些电阻,许多USB-C电源将无法提供5V电压。USB提供的5V电压会传送到HT7833-A-EV(U9)低导通压稳压器,将其转换为干净的3.3V电源轨。CH340C(U2)负责USB转UART的转换,因此你可以直接打开串口监视器,通过USB与CH32V003通信,无需外部适配器。此外,我还添加了带有1k电阻的TX和RX指示LED灯(LED3和LED4),以便直观地查看串行通信活动。
CH32V003F4P6(U1)位于电路板的核心位置,其时钟来自一个24MHz的外部晶振。MCU通过PLL内部将该时钟倍频,达到最高工作频率48MHz。复位按钮(SW1)连接至PD7/NRST引脚。在复位线上,我使用了1k电阻(R12)和100nF去抖电容(C9)。所有可用的GPIO引脚均扩展到电路板两侧的两个12针母头接口(U7和U8),与Arduino Nano类似。这使得您可以轻松访问I2C(PC1/SDA,PC2/SCL)、SPI、USART、ADC通道、电源引脚(VIN、3V3、GND)以及通用输入输出端口。
PCB设计
我在EasyEDA中设计了PCB,保持板子尺寸紧凑,以匹配Arduino Nano的外形尺寸。布局优先采用双层结构,确保电源分配简洁高效。在两侧均布设接地平面,形成低阻抗的接地回路。去耦电容尽可能靠近CH32V003和CH340C的电源引脚。晶振放置在MCU振荡器引脚附近,并采用短而对称的走线。USB-C接口位于电路板一端,CH340C和LDO邻近,以缩短信号路径。编程接口位于电路板末端,便于在面包板上使用时进行操作。
我亲自组装了这个电路板,但请相信我,如果没有加热板和合适的焊接设备(如显微镜和热风枪),0402尺寸的小元件是无法焊接的。然而,凭借五年的焊接经验,我可以在两小时内自行完成焊接工作。虽然需要进行大量的焊点调试,但你可以选择JLCPCB的SMT组装服务,从而省去手工焊接的步骤。你只需要一份完整的BOM文件和CPL文件,这些文件已附在本文档中。
设置开发环境
与Arduino不同,CH32V003使用的是WCH自有的工具链。你需要MounRiver Studio,这是一个基于Eclipse的免费IDE,已预装RISC-V GCC编译器,因此无需额外安装工具链。此外,还需要WCH-LinkE编程器,它通过三针编程接口(U6)连接到电路板,仅需三条线:3V3、SWIO(PD1)和GND。该编程器单独出售,售价5美元,可在此处购买。
单线调试接口(SWIO)是WCH RISC-V芯片的一大特色。与ARM芯片上的SWD需要两个引脚(SWDIO和SWCLK)不同,SWIO仅使用一个引脚同时传输数据和时钟信号。这使得编程头文件更简洁,并为您的应用释放了更多GPIO引脚。工作流程非常简单:您只需在MounRiver Studio中编写代码、编译,连接WCH-LinkE,然后进行闪存操作。完成闪存后,断开编程器,板子即可通过USB供电独立运行。内置的CH340C则可作为串行监视器,通过USART printf实现调试。
眨眼测试代码
我每次拿到一块新的电路板时,首先都会进行一次闪烁测试。如果LED灯在闪烁,说明MCU正常工作、晶振运行良好,并且你的工具链已正确设置。然后你就可以在附带的下载文件夹中测试一些示例代码了。以下是我在测试时使用的闪烁代码:
首先,我们需要默认初始化GPIO和USART的结构,然后主函数初始化系统时钟和延迟计时器,并调用我们的GPIO配置。
该代码与Arduino中的void setup和void loop类似。循环进入一个无限循环,每500毫秒切换一次LED。代码结构遵循WCH标准外设库模式,类似于STM32标准外设库。`debug.h`头文件包含了所有必要的外设定义和延时函数。
实用提示与建议
在搭建和测试这个电路板的过程中,我学到了一些经验。HT7833 LDODO 能很好地工作,但USB供电可能会带来噪声,具体取决于你的电脑或充电器,建议在模拟线路中增加额外的滤波,或者使用电池供电以获得更清晰的结果。
CH32V00333 芯片采用 TSSOP-200 封装,可用细尖焊锡笔和助焊剂进行焊接,但我建议使用焊膏和热风枪(如果有的话),这样对 04022 封装的元器件也更方便。如果 WCH-LinkE 无法检测到芯片,请再次检查编程头上的 3V3 和 GNDND 连接,并保持线路短小,因为 SWIO 对信号完整性非常敏感。对于串行调试,只需在终端上打开 1152000 波特率即可,内置的 CH340CC 将处理其余工作。
本文编译自hackster.io





