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

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.

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

Do čeho umístit 3D tiskárnu? To je odvěká otázka soužití 3D tiskaře a jeho manželky/přítelkyně. Mělo by to mít hezký vzhled, aby to nekazilo místnost a zároveň praktické pro umístění filamentu. Tady jedna z desítek možných variant.

Každý elektro nadšenec přinejmenším slyšel o Arduino, které získalo obrovskou popularitu díky svým jedinečným vlastnostem.

Rád bych hned na začátek uvedl, že nejsem profesionál v oboru bezpečnosti, ale rád bych zde zveřejnil článek pojednávající o základním zabezpečením linux serveru.

Arduino Pro posouvá platformu Arduino do profesionálních aplikací IoT a Průmyslu 4.0 pomocí hardwaru jako Arduino Portenta H7, Arduino MKR a Arduino Nano 33, které jsou vybaveny výkonnými procesory a širokou škálou komunikačních rozhraní. Součástí ekosystému jsou rozšiřující moduly, software…

Používání AI při bastlení už není sci-fi. Stává se z něj běžný nástroj – podobně jako datasheet, osciloskop nebo Google. Rozdíl je ale v tom, že kvalita výsledku extrémně závisí na tom, jak AI zadáte úkol. Dobře napsaný prompt vám…

Trendy