WCH MCU
2026-07-158 min read

CH32V003: The $0.1 RISC-V MCU Getting Started Guide

From bare metal blink to USB device — everything you need to start with the world's cheapest RISC-V microcontroller.

CH32V003QingKe V2AMCUBeginner

Overview

The CH32V003 is WCH's entry-level RISC-V microcontroller based on the QingKe V2A core, running at 48MHz. At approximately $0.1 per unit, it is the world's most affordable RISC-V MCU, making it ideal for cost-sensitive IoT sensors, educational projects, and replacing traditional STM32F0/GD32E230 designs.

Key Specifications

CoreQingKe RV32EC (RISC-V)
Max Frequency48 MHz
Flash16 KB
SRAM2 KB
Supply Voltage2.7V - 5.5V (wide voltage)
Debug InterfaceSDI (single-wire debug)
PackageSOP8, SOP16, QFN20

Peripherals

Development Environment

The official IDE is MounRiver Studio (MRS), a free Eclipse-based IDE specifically designed for WCH RISC-V chips. It includes:

Download from: www.mounriver.com

Hardware Setup

You need a WCH-LinkE debugger (about $3) to flash and debug the CH32V003. Connect:

First Project: Blink LED

#include "ch32v00x.h"

int main(void) {
    uint8_t led = 0;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    SystemCoreClockUpdate();
    Delay_Init();

    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    while(1) {
        GPIO_WriteBit(GPIOD, GPIO_Pin_0, (BitAction)led);
        led = !led;
        Delay_Ms(500);
    }
}

Why CH32V003?

At $0.1, the CH32V003 is cheaper than most 8-bit MCUs while offering 32-bit RISC-V performance. It is the perfect entry point into the RISC-V ecosystem and an excellent replacement for STM32F030 in cost-sensitive designs.

Resources