U CH32V307 to nejčastěji bývá jedna z těchto věcí:
- Běží, ale blikáš na špatných pinech (LED nejsou na PB8/PB9 ani na 57/58, nebo nejsou vůbec připojené na MCU pin jako „user LED“).
- Program se nespustí (špatná varianta/variant file pro desku, jiný linker script/boot režim, reset vektor mimo, watchdog/clock init problém).
- Napájení/BOOT režim (board se naprogramuje, ale po resetu neběží z flash kvůli BOOT strapům, nebo je potřeba „NRST“/reset line, nebo běží v jiném režimu).
- Upload jde do flash, ale CPU je pořád „halt“ / resetované (méně časté, ale u některých debug nastavení se to stává – typicky když je core držené debuggerem).
- LED jsou řízené PHY/RJ45 a ne MCU (některé desky mají link/activity LEDky čistě z Ethernet magnetiky/PHY, MCU je nepřepíná).
Test 1: „panic toggler“ – přepni co nejvíc pinů
Tenhle sketch zkusí v loopu rychle překlápět spoustu GPIO pinů (PA0..PA15, PB0..PB15, PC0..PC15, PD0..PD15 – co půjde). Když máš na desce aspoň jednu LED připojenou na jakýkoliv GPIO, obvykle začne blikat/měnit jas. A i když ne, můžeš si na libovolný pin píchnout multimetrem nebo logickou sondou.
Kód: Vybrat vše
#pragma execution_character_set("utf-8")
#include <Arduino.h>
// Pomocná funkce: zkus nastavit pin jako output a přepnout
static inline void try_toggle(int pin)
{
pinMode(pin, OUTPUT);
digitalWrite(pin, !digitalRead(pin));
}
void setup()
{
// žádný Serial, žádná LED, jen čisté GPIO přepínání
}
void loop()
{
// Projedeme hodně pinů. Některé můžou být neexistující -> core je většinou ignoruje.
// Pokud by to padalo, řekni a zúžíme seznam podle počtu pinů na desce.
for (int i = 0; i < 200; i++)
{
// PA
#ifdef PA0
try_toggle(PA0); try_toggle(PA1); try_toggle(PA2); try_toggle(PA3);
try_toggle(PA4); try_toggle(PA5); try_toggle(PA6); try_toggle(PA7);
try_toggle(PA8); try_toggle(PA9); try_toggle(PA10); try_toggle(PA11);
try_toggle(PA12); try_toggle(PA13); try_toggle(PA14); try_toggle(PA15);
#endif
// PB
#ifdef PB0
try_toggle(PB0); try_toggle(PB1); try_toggle(PB2); try_toggle(PB3);
try_toggle(PB4); try_toggle(PB5); try_toggle(PB6); try_toggle(PB7);
try_toggle(PB8); try_toggle(PB9); try_toggle(PB10); try_toggle(PB11);
try_toggle(PB12); try_toggle(PB13); try_toggle(PB14); try_toggle(PB15);
#endif
// PC
#ifdef PC0
try_toggle(PC0); try_toggle(PC1); try_toggle(PC2); try_toggle(PC3);
try_toggle(PC4); try_toggle(PC5); try_toggle(PC6); try_toggle(PC7);
try_toggle(PC8); try_toggle(PC9); try_toggle(PC10); try_toggle(PC11);
try_toggle(PC12); try_toggle(PC13); try_toggle(PC14); try_toggle(PC15);
#endif
// PD (ne všechny CH32V307 mají PD piny vyvedené)
#ifdef PD0
try_toggle(PD0); try_toggle(PD1); try_toggle(PD2); try_toggle(PD3);
try_toggle(PD4); try_toggle(PD5); try_toggle(PD6); try_toggle(PD7);
try_toggle(PD8); try_toggle(PD9); try_toggle(PD10); try_toggle(PD11);
try_toggle(PD12); try_toggle(PD13); try_toggle(PD14); try_toggle(PD15);
#endif
delay(10);
}
}
- Pokud se rozbliká cokoliv na desce → CPU běží, jen jsme neovládali správné LED piny.
- Pokud pořád nic → je velká šance, že program neběží (nebo deska nemá žádnou LED na GPIO a nemáš čím měřit).