Programujeme ultralevné mikrokontroléry CH32V00x jak v Arduino IDE, tak i bez něj (Linux). Návod.

Stručně: CH32V003 je RISC-V mikrokontrolér od WCH za pár korun, který se dá programovat v Arduino IDE i bez něj. Potřebujete vývojovou desku a programátor WCH-LinkE. Níže najdete kompletní postup nastavení pro Linux včetně řešení častých problémů a alternativních přístupů (CH32fun, české SDK).

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 USB?“ 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.

Pokud máte „všechno správně“ a nelze vám nahrát program, zkuste aktualizovat FW programátoru.

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.

Česká cesta

Tyto superlevné MCU padly do oka i Miroslavu Němečkovi a připravil pro ně své vlastní minimalistické prostředí pro vývoj CH32LibSDK. Na něm realizoval několik zajímavých projektů – od kalkulaček,přes herní konzole (včetně portace oblíbeného VLAKu) po univerzální multimetr. Podívejte se sami, co vše zvládnul s tak malým mikrokontrolérem s několika málo GPIO vytvořit.

CH32LibSDK, stejně jako ostatní SDK tohoto autora, vyžaduje trochu specifický způsob ovládání, kdy se vše kompiluje pomocí připravených bat souborů a nástroje make.

Vláďa Smitka pak k tomuto SDK připravil dev kontejner pro VS Code, aby bylo možné vyvíjet ve standardnějším prostředí a i na dalších platformách.

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/

Sdílejte článek:
Komentáře:
1 komentářů na sociálních sítích
Tak jsem to sepsal 🫡 Návod, jak programovat CH32V003 v Arduino IDE (nebo i bez něj). Ty se prodávají, oproti konkurenci, fakt za hubičku. Návod je pro Linuxu, kdyby to někdo zkoušel i ve Windows, napište mi, prosím, váš postup. Díky ❤️ https://t.co/XXSY5AUeFr https://t.co/Bnw0riJNrd ...více
Číst komentáře
- a -
Přidat svůj názor
Ukaž světu,
že jsi Maker!
Koupit tričko
Kafe pro Chiptrona
Dodej energii dalšímu článku

Související články

Arduino je velmi populární platforma s rozsáhlou komunitní podporou.

Další články o STM32(F7): Tutorial: STM32F746 (STM32F7 Discovery) – Tlačítkem rozsvítit/zhasnout LED Tutorial: STM32F746 (STM32F7 Discovery) – jak zapnout LED (ovládání GPIO) STM32F746 discovery a IDE AC6 (System Workbench for STM32) Jak začít s moderními mikrokontroléry a proč – STM32…

Daniel Skopalík sdílel návod, jak použít populární jednodeskový počítač RaspberryPi jako JTAG programátor například ESP32.

Ve druhém díle o STM32duino si ukážeme práci s digitálními vstupy a výstupy.

STM32 a Arduino IDE

STM32duino je rozšiřující softwarový balík, který umožňuje programovat mikrokontroléry STM32 pomocí nástrojů a knihoven platformy Arduino, tedy využít stávající knihovny pro použití s jiným typem mikrokontroléru. O STM32duino jsem sepsal několik článků – první zapnutí, využití UART, I2C a samozřejmě…

Jak jsme vám už psali na sociálních sítích, stránka http://chiptron.

Trendy