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 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/

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

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…

Slyšíme to dnes a denně, zejména před volbami, „chceme učenou společnost“, „chceme tu vytvářet světové know-how“. Naučit se ale logicky či kriticky myslet a naučit se pracovat s chybou není samozřejmost nám od narození daná. Musíme se je učit a…

STM32 zahrnuje celou plejádu 32bitových mikrokontrolérů.

Trendy