
Mikrokontroléry CH32V – určitě jste už o nich slyšeli. Prodávají se za naprosto směšnou cenu, ale mají velmi slušnou výbavu a navíc se prodavají v dobře pájitelném pouzdře. Mezi periferiemi najdete mimo klasických GPIO i SPI, ADC, UART, I2C, časovače a čítače a vyšší verze nabízejí i USB. Tady je návod, jak s těmito mikrokontroléry začít – v mém případě v Linuxu.
Tento návod jsem vyzkoušel v operačním systému Ubuntu. Zkusím (bez reálného otestování) navrhnout úpravy tak, aby to fungovalo i pro Windows.
Potřebný HW
Abychom mohli otestovat, co všechno CH32V umí, musíme koupit vývojový kit – vývojovou desku si samozřejmě můžete s čipem zapájet i sami doma, ale o tom tenhle návod není.
Já koupil CH32V003 vývojovou desku s 48 MHz za 54 Kč z laskakit.cz

Dále je potřeba programátor – koupil jsem WCH-LinkE za 158 Kč z laskakit.cz

Možná se ptáte „to nejde naprogramovat přes UBS?“ Ne, tento čip nemá USB bootloader a k programování potřebuje programátor.
Pokud programátor kupovat nechcete, lze jej „vytvořit“ z STM32F042, ESP32S2 nebo z Arduino Uno R3.
Programátor
Programátor bychom tedy měli koupený. Výchozí nastavení programátoru je programování ARM, my jej potřebujeme přepnout do režimu RISC-V.
- Nejprve otevřeme plastovou krabičku.
- Zmáčkneme tlačítko ModeS
- Během držení tlačítka zasuneme programátor do USB počítače
- Poté můžeme uvolnit tlačítko. Na programátoru NESMÍ svítit modrá LED, ale ČERVENÁ! Modrá LED znamená programování v ARM režimu.
- Při dalším vytažení a zasunutí programátoru do USB není potřeba opětovně mačkat tlačítko ModeS, programátor si poslední volbu pamatuje.
Propojení Programátoru s vývojovou deskou CH32V003
Propojení WCH-LinkE a CH32V00x
GND – GND
3V3 – V
SWDIO – SWD
Přidání JSON pro podporu CH32V v Arduino IDE
Ve File – Preferences přidejte do Additional Board Managers URLs tento JSON. Díky tomu poté můžete nainstalovat podporu CH32V003 (a jiných mikrokontrolérů CH32V).
https://github.com/openwch/board_manager_files/raw/main/package_ch32v_index.json
Arduino Core pro CH32V https://github.com/openwch/arduino_core_ch32

Problém s nahráním v Arduino IDE

Během nahrávání uvidíte error hlášku o tom, že nešlo program nahrát. Potřebujeme doinstalovat openOCD.
Pro Windows nejspíš stačí nainstalovat openOCD https://openocd.org/pages/getting-openocd.html
Instalace openOCD
Otevřete terminál a nainstalujte openOCD
sudo apt-get update
sudo apt-get install openocd
Vidíte tenhle error ?
Error: libusb_open() failed with LIBUSB_ERROR_ACCESS
Error: open failed
Failed uploading: uploading error: exit status 1
Pak potřebujeme přidat nové udev pravidlo pro WCH-LinkE
sudo nano /etc/udev/rules.d/50-wch-link.rules
vložit
SUBSYSTEM=="usb", ATTR{idVendor}=="1a86", ATTR{idProduct}=="8010", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="1a86", ATTR{idProduct}=="8020", MODE="0666"
uložit
Teď znovunačíst udev pravidla pro USB zařízení
sudo udevadm control --reload-rules
sudo udevadm trigger
Vyjmout a opět zasunout WCH-LinkE programátor (není třeba držet tlačítko ModeS, pokud nesvítí modrá LED)
A zkusíme znova nahrát – hotovo, funguje.

RX na vývojové desce spojte s TX na programátoru a naopak. V Serial Monitor uvidíte zprávu, kterou jste tam poslali.

Pinout čipu CH32V003

zdroj: https://raw.githubusercontent.com/Tengo10/pinout-overview/main/pinouts/CH32v003/ch32v003f4p6.svg
Vývojový kit a chybějící dokumentace
Na vývojové desce s CH32V003 jsou popsána všechna GPIO a na diagramu výše jsou popsány připojené periferie. Deska toho moc víc nemá, tak k ní obsáhlejší dokumentace asi není třeba. Kromě popisu tlačítka – to chybí.
Vývojový kit má tlačítko, ale nemá nikde napsáno, kam je připojeno. Tady je můj vzorový kód.
Tlačítko je připojeno k PD2 – vyzkoušíme
const int buttonPin = 2; // PD2 podle mapování v Arduino IDE
const char* buttonName = "PD2";
int lastState = HIGH; // předpokládáme pull-up, tlačítko aktivní LOW
int pressCount = 0;
void setup() {
Serial.begin(115200);
delay(1000);
pinMode(buttonPin, INPUT_PULLUP); // vstup s interním pull-up
lastState = digitalRead(buttonPin);
}
void loop() {
int currentState = digitalRead(buttonPin);
if (currentState != lastState) {
// Malé zpoždění (debounce)
delay(50);
currentState = digitalRead(buttonPin);
if (currentState != lastState) {
lastState = currentState;
// Detekujeme pouze přechod do stisknutého stavu (LOW)
if (currentState == LOW) {
pressCount++;
Serial.print("Tlačítko na pinu ");
Serial.print(buttonName);
Serial.print(" bylo stisknuto. Celkem: ");
Serial.println(pressCount);
}
}
}
}
CH32V003 v Arduino IDE
Moc vzorových příkladů, pro CH32V003 v Arduino IDE nenajdete. Existuje ale alternativní cesta – vyhnout se Arduino IDE a psát tzv. low-level (low-layer) kód. Tento kód není přímo kompatibilní s Arduino IDE – využívá jiné funkce, občas i přímý přístup do registrů (viz níže).
Github vzorových příkladů pro Arduino IDE od Alexandera https://github.com/AlexanderMandera/arduino-wch32v003/tree/master/examples
Github https://github.com/openwch/arduino_core_ch32
JSON soubor pro Board Manager https://github.com/openwch/board_manager_files/blob/main/package_ch32v_index.json
Jiná cesta – CH32fun!
Otázka: i pro využítí CH32fun je nejspíš potřeba mít nainstalovaný openOCD – viz na začátku článku.
I pro toto programování, musí být WCH-LinkE přepnutý do programování RISC-V, tedy po zapojení nesmí svítit modrá LED na programátoru.
Pokud svítí, vyjměte programátor, stiskněte tlačítko ModeS na programátoru a zasuňte do počítače.
Instalace potřebných souborů
apt-get install build-essential libnewlib-dev gcc-riscv64-unknown-elf libusb-1.0-0-dev libudev-dev gdb-multiarch
Stáhneme balík z github – desítky a desítky vzorových kódů
https://github.com/cnlohr/ch32fun
Přejděte do složky, který vzorový kód chcete vyzkoušet a otevřít terminál.
V otevřeném terminálu jen napíšete
make
A program se zkompiluje a nahraje do CH32V003.
Další možnosti programování
CH32Vxyz lze také programovat v programovacím jazyce Rust.
https://github.com/ch32-rs/ch32-hal/tree/main
Závěr
Mikrokontroléry CH32V mohou být zajímavou alternativou k již známým a hojně využívaným mikrokontrolérům jako jsou RP2040, ESP32, STM32 a další.
Rodina mikrokontrolérů CH32V obsahuje jak jednoduché mikrokontroléry se základními periferiemi, tak i velmi výkonné mikrokontroléry s například už USB periférií.
Podpora mikrokontrolérů CH32V v Arduino IDE a dostupnost vzorových kódu není nijak velká – například oproti STM32duino, který podporuje desítky čipů z rodiny STM32, vývojové desky s STM32 a zároveň obsahuje spoustu vzorových příkladů.
Projekt CH32fun je ale zajímavou alternativou k Arduino IDE, nabízí mnohem více vzorových kódů díky kterým lze lépe pochopit funkcionalitu čipu. Bohužel kódy nejsou kompatibilní s Arduino IDE.
Zdroje:
https://www.hackster.io/patrick-fitzgerald2/program-ch32v003-risc-v-with-arduino-ide-135f6f
https://pallavaggarwal.in/2023/09/20/ch32v003-programming-guide/
Komentáře na sítích