In the past few months I had designed my own development boards in order to get max out of them, nowadays I am working on CH32V003F4P6 by WCH, and I was very amazed by the features and performance this microcontroller gives. Why I switched to this one from arduino is because this is a 32-bit RISC-V microcontroller that costs around $0.10 yes, ten cents that makes it one of the cheapest 32-bit MCUs you can get. But you know Arduino is love and that’s why I designed a complete custom dev board around this chip in the Arduino Nano form factor style.

But this time I modified this version with onboard USB-to-serial, a 3.3V LDO, programming header, indicator LEDs, and all GPIOs broken out to 2.54mm headers. The idea is simple to make a minimal, low-cost, open-source development board that anyone can manufacture and assemble. The CH32V003F4P6 runs at 48MHz with 16KB of Flash and 2KB of SRAM.

Which is more than enough for learning embedded programming, reading sensors, driving displays, and building small prototypes. In the future, I will come up with libraries which are compatible with CH32V003 like Arduino. At least the board gives a feel of instant Arduino, even though under the hood it is running a completely different architecture. In this article, I will walk you through the complete hardware design schematic, component selection, PCB layout, and the blink test code. The entire project is open-source, so you can download the design files and build your own. I have made the PCB in EasyEDA and fabricated it out using JLCPCB for just $2. I have also ordered the stencil in order to assemble a few of them for the testing purposes.

What Is the CH32V003F4P6?

The CH32V003F4P6 is a general-purpose microcontroller from WCH (Nanjing Qinheng Microelectronics) based on the QingKe RISC-V2A processor core. Unlike ARM Cortex-M based MCUs, this chip uses the open RISC-V instruction set architecture. The F4P6 variant comes in a TSSOP-20 package, which is small but still hand-solderable with a fine-tip iron. What makes this chip stand out is the price-to-performance ratio. At roughly $0.10 per unit, you get a 32-bit processor running at 48MHz that is faster than an Arduino Uno's ATmega328P. It supports I2C, SPI, USART, ADC, timers, and even an on-chip operational amplifier. Programming is done through a single-wire debug interface called SWIO on pin PD1, using WCH's WCH-LinkE programmer and the MounRiver Studio IDE. At first it may feel a little uncomfortable to program but trust me it is easy.

Here are the key specifications of the CH32V003F4P6:

  • Core: QingKe 32-bit RISC-V2A processor
  • Clock Speed: 48MHz (with internal or external oscillator)
  • Flash Memory: 16KB
  • SRAM: 2KB
  • Package: TSSOP-20 (18 GPIO pins available)
  • Operating Voltage: 3.3V to 5V
  • Peripherals: 1x USART, 1x I2C, 1x SPI, 1x 10-bit ADC (8 channels), 2x Timers, 1x OPA
  • Debug Interface: Single-wire SWIO (on PD1)
  • Price: Approximately $0.10 per unit

Components Required

All components are sourced from LCSC and are standard parts. Here is what you need:

  • 1x CH32V003F4P6 - RISC-V MCU (TSSOP-20)
  • 1x CH340C - USB to TTL serial converter (SOP-16)
  • 1x HT7833-A-EV - 3.3V LDO voltage regulator (SOT-89-3)
  • 1x USB Type-C connector - for power and serial communication
  • 1x 24MHz crystal oscillator - SMD 3.2x2.5mm package
  • 6x 100nF capacitors - C0402 package (decoupling and filtering)
  • 2x 1uF capacitors - C0402 package (LDO input/output)
  • 6x 1k resistors - R0402 package (LED current limiting and reset pull-up)
  • 2x 5.1k resistors - R0402 package (USB-C CC pull-downs)
  • 4x Red LEDs - 0603 package (TX, RX, and 2 general purpose)
  • 1x Tact switch - SMD 3.9x3.0mm (reset button)
  • 2x 12-pin female headers - 2.54mm pitch (GPIO breakout)
  • 1x 3-pin male header - 2.54mm pitch (WCH-LinkE programming)

Circuit Diagram

The board is powered through a USB Type-C connector (U4). I have used two 5.1k pull-down resistors (R4 and R7) on the CC1 and CC2 lines, which is required for USB-C to be recognized as a USB 2.0 device...

Read more »