Vývojová deska ARM M3 je další možnost základní desky pro Arduino. Tato deska je založena na mikrokontrolérech řady STM32, v tomto případě se jedná o čip STM32F103C8T6.
Tento čip pracuje na frekvenci 72 MHz, má 32bitový procesor a obsahuje 33 vstupně/výstupních pinů. Tyto I/O piny pracují na napěťových úrovních 3,3 Voltu, stejně jako je napájecí napětí pro celou desku. Pro napájení pak můžeme připojit buď napětí na piny desky nebo ji napájet z existujícího konektoru microUSB.
Abychom mohli začít s programováním desek STM32 za pomoci Arduino IDE, je zapotřebí udělat několik jednoduchých kroků.
Prvním krokem je dohrání podpory ARM M3 překladače do Arduino IDE. Po jeho otevření zvolíme v nabídce volbu Nástroje-Vývojová deska-Manažér desek.
Po otevření manažeru napíšeme do horní řádky název „sam“. Poté nám Manažér nabídne více možností, z kterých vybereme Arduino SAM Boards (32-bits ARM Cortex-M3) a stiskneme tlačítko Instalace. Po stisknutí tlačítka se nám postupně stáhne a nainstaluje balíček s překladačem pro ARM M3.
Nyní vypneme Arduino IDE a stáhneme balíček s podporou STM32. Po stažení rozbalíme jeho obsah a celou složku Arduino_STM32-master přesuneme do cesty C:\Users\<Váš_účet>\Dokumenty\Arduino\hardware. Pokud složka hardware neexistuje, stačí ji vytvořit. A pokud máte přesměrovanou složku pro Arduino projekty a knihovny jinam, vytvořte složku hardware tam. Pro kontrolu správnosti byste tedy po nakopírování měli vidět například soubor v cestě C:\Users\<Váš_účet>\Dokumenty\Arduino\hardware\Arduino_STM32-master\README.md.
V tuto chvíli máme nainstalovanou podporu pro desky STM32 a můžeme ji otestovat. Po zapnutí Arduino IDE si můžete zkontrolovat, že v nabídce Nástroje-Vývojová deska můžete nově zvolit desku Generic STM32F103C series. Po jejím zvolení je pak ještě nutné zkontrolovat, že v nabídce Nástroje-Variant máte zvolenou desku STM32F103C8 (20k RAM, 64k Flash).
Pro nahrání nového programu bude zapotřebí použít USB převodník na UART, jako například tento typ ze staršího návodu. Abychom mohli nahrávat program přes sériovou linku, zvolíme v nabídce Nástroje-Upload method možnost Serial.
V tuto chvíli máme připraveno prostředí Arduino IDE a můžeme si propojit desku STM32 a UART převodník. Podle schématu níže stačí propojit celkem čtyři piny. Propojíme 3V3 s pinem 3V3 STM32, GND s pinem GND STM32, TXD s pinem A10 a RXD s pinem A9.
Pro programování desky STM32 je také důležitá poloha přepínače BOOT0. Pokud je tento přepínač v poloze nula jako na obrázku, deska po zapnutí napájení nahraje program z paměti. Pokud tedy chceme nahrát nový program do paměti, je nutné přepnout přepínač BOOT0 do polohy jedna a restartovat desku pomocí tlačítka RESET. Po tomto přepnutí můžeme nahrát nový program z Arduino IDE. A až budeme mít nahraný správný program a budeme chtít používat desku běžným způsobem, stačí přepnout přepínač BOOT0 zpět na polohu nula a provést restart.
Pro otestování desky STM32 jsem vytvořil jednoduchý ukázkový kód, který pracuje se sériovou linkou a vestavěnou LED diodou. Na jeho začátku nastavíme číslo pinu s LED diodou a vytvoříme proměnné pro uložení stavu LED diody a načtení znaku ze sériové linky.
V podprogramu setup provedeme zahájení komunikace po sériové lince a nastavíme vestavěnou LED diodu jako výstup.
V nekonečné smyčce loop v první kroku kontrolujeme, jestli není k dispozici nějaký znak na sériové lince. Pokud ano, provedeme jeho načtení do proměnné a poté vytištění po sériové lince. V dalším kroku zapíšeme na pin LED diody aktuální stav. Tento stav je poté znegován pomocí znaku „!“ a po nastavené pauze po dobu jedné sekundy se program opakuje.
// Arduino STM32F103C8 test program // nastavení čísla pinu LED diody #define pinLED PC13 // uložení stavu LED diody a znaku bool stav = 0; char znak; void setup() { // zahájení komunikace po sériové lince // rychlostí 9600 baud Serial.begin(9600); // nastavení pinu pro LED jako výstup pinMode(pinLED, OUTPUT); // vytištění startovní zprávy po sériové lince Serial.println("Zahajeni komunikace STM32.."); } void loop() { // pokud je načtený nějaký znak, // vytiskneme ho po sériové lince while (Serial.available()) { znak = Serial.read(); Serial.print(znak); } // zapíšeme na LED pin aktuální stav digitalWrite(pinLED, stav); // pro další běh smyčky uložíme pomocí // "!" do proměnné opačný stav stav = !stav; // pauza 1000 ms delay(1000); }
Pro nahrání programu do desky STM32 tedy přepneme BOOT0 na jedničku, provedeme reset a pak už pouze stiskneme v Arduino IDE tlačítko Nahrát. A pokud budeme chtít program používat po odpojení programátoru, přepneme BOOT0 na nulu.
Vývojová deska STM32F103C8 je zajímavou alternativou oproti běžně používaným Arduino deskám s čipy Atmel. Tato deska obsahuje procesor ARM M3, který je mnohonásobně rychlejší a silnější než 8bitové Atmely a proto se může hodit do projektů, kde využijeme ať už větší výkon nebo velké množství propojovacích pinů. Zároveň je tato deska prodávána za rozumnou cenu a proto je často používána u pokročilejších uživatelů. Pro ukázku využití sběrnice I2C a SPI doporučuji tento anglický návod.
Seznam použitých komponent:
https://dratek.cz/arduino/1135-vyvojova-deska-arm-stm32f103c8t6-stm32-1449882767.html
https://dratek.cz/arduino/1158-prevodnik-6pin-usb-ttl-uart-reset-pin-1449940303.html