STM32 - výkonnější Arduino

Při svých pokusech s vývojovými deskami klonů Arduina jsem přemýšlel nad alternativou s lepšími AD převodníky. Na AliExpressu jsou jako levná alternativa dostupné desky "BluePill" s procesorem STM32F103C8T6. Tento 32 bitový ARM procesor má 12 bit AD převodníky, PWM dokonce 16 bit a je daleko výkonnější než jakýkoli standardní arduinový AVR osmibit.

Tyto plusy jsou poněkud degradovány složitějším oživováním programu pomocí Arduino IDE. To mě dlouho od nákupu těchto desek odrazovalo, ale nakonec jsem je precejen pořídil a oživením se prokousal. Bohužel nikde na internetu není kompletní a ucelený průvodce tímto oživením v češtině. Takže jsem dílčí informace lepil, než jsem je smysluplně vstřebal, poměrně dlouho. V tomto článku se pokusím o doplnění chybějících informací - alespoň tedy s ohledem na potíže, na které jsem narazil já, někdo jiný se asi může kousnout zase jinde.

První potíže: jedna deska nejede z USB

Pro začátek jsem na Ali koupil dva kousky klonu "BluePill". Po připojení k USB jeden kus ihned pracoval, druhý ani neškytl. Po prohlídce USB konektoru na desce (kdy jsem ani pod mikroskopem neviděl nic jednoznačně nekalého) jsem po změření vodivosti mezi GND konektoru a GND desky zjistil ztrátu spojení. Při připojení desky ke zdroji přímo na napájecí piny ale deska fungovala. Popadl jsem tedy mikropáječku a připojení konektoru opravil. Po vyzkoušení funkčnosti opravy už se deska "chytla". Tady je asi dobré připomenout, že tuto desku nelze přímo programovat přes USB, jako např. Arduino Nano, ale s tím jsem dopředu počítal. Aby programování přes USB možné bylo, je nutné do CPU nejdřív nahrát uživatelský zavaděč, ale o tom později.

Další kix: program nejde nahrát

Podle TOHOTO NÁVODU jsem nastavil Arduino IDE a další související věci, aktivoval zavaděč (nastavením propojky "BOOT0" na desce na "1" a resetem) a pokusil se nahrát program "Blink" upravený pro STM. Jedna deska mi ale hlásila, že není povoleno smazání flash, druhá se vůbec nehlásila.

Tady bych připomenul, že jsem dlouho řešil dilema, jak správně připojit UART převodník k desce, abych ji nepoškodil úrovněmi 5V. Měl jsem sice převodník který má k dispozici napájecí pin 3.3 i 5V, ale nikde se na ní nekonfigurují napěťové úrovně pro Tx a Rx. Nakonec jsem ale dohledal, že piny PA9 i PA10 jsou 5V tolerantní, takže deska se dá napájet oběma napětími (samozřejmě na příslušný pin) i piny Rx Tx lze připojit bez obav.

Nejdřív jsem se tedy pokusil zjistit, co je s deskou, která se hlásila alespoň částečně. Po dlouhém prohledávání internetu jsem dohledal utilitu "Flash Loader Demonstrator", kterou je možné provést uzamčení/odemčení procesoru, blokování přístupu k částem flash paměti, nahrávání, zálohování a podobně. Tento program mi po připojení desky ohlásil, že je uzamčena a že odemčení bude mít za následek ztrátu případných dat. Než jsem pokračoval, dal jsem se opět do prohledávání internetu, protože jsem se obával, abych nesmazal i zavaděč, který umožňuje komunikaci přes UART (tj. piny PA9/10). Dohledal jsem ale (zde), že tento zavaděč UART (USART1) je pevnou součástí CPU a nelze jej uživatelsky smazat - UF! Provedl jsem tedy odemčení a poté opět vyzkoušel zavedení programu z Arduino IDE přes "serial". A vida - nyní se už program zavedl.

Inu, závěrem tohoto odstavce je překvapivá věc: prodejce mi poslal desky s CPU uzamčeným proti zavedení programu. Možná, že by naprogramování takto uzamčeného čipu bylo možné pomocí ST-link, to jsem pravda nezkoušel, protože ST-link jsem si nepořizoval, ale pravděpodobně by to nešlo ani tak.

Oprava druhé desky

Takže první deska už pracuje, ale co ta druhá? Po opravě USB konektoru jsem měl podezření na nekvalitní pájení celé desky, programování by bránilo špatné spojení pinů PA9 či PA10 s CPU. A opravdu, při pohledu mikroskopem na nožičku CPU propojenou s pinem PA9 pod ní byla jakási trhlina (přestože nevypadala úplně nevodivě). Po zakápnutí tekutou kalafunou a "propájení" spojů CPU se už i tato deska "chytla" a podařilo se mi ji odemčít a naprogramovat.

Zavaděč pro programování STM32 pomocí USB

Při hledání informací, abych rozchodil alespoň nějaký pro mě dostupný způsob programování, jsem našel i informace o možnosti úpravy STM pro programování přes USB. Nejsem si ale jistý, jestli už je tento zavaděč ve stabilní verzi, protože na několika místech bylo zmíněno, že prozatím ne. Pravděpodobně se ale jedná o starou informaci, protože na stránkách wiki.stm32duino.com se o nestabilitě nezmiňují.

Hlavní informace v angličtině jak desku s STM32 upravit pro USB programování je T A DY. Jedná se ale o obecný návod pro STM, lepší je postupovat dle návodu přímo pro desku "BluePill" na Github. Chybí ale informace, že pro úspěšné spojení s Arduino IDE je třeba ještě provést instalaci ovladačů pro USB zařízení (Maple Serial). Toto jsem vydedukoval tak nějak mezi řádky a abych si to potvrdil, cíleně jsem po tom začal pátrat a vypátral jak  na to. Nakonec jsem ještě nikde nenašel, jakou nastavit metodu nahrávání v ArduinoIDE. Metodou pokus-omyl jsem byl úspěšný při volbě "STM32duino bootloader".

Tento uživatelský zavaděč (bootloader) sice ukousne z paměti nějaký prostor, ale programování desky výrazně zjednoduší. Největšími překážkami tedy byl nedostatek informací a prokousávání se správným nastavením, které jsem nakonec překonal a tyto šikovné desky rozchodil. Nakonec je možné program zavádět stejně jednoduše jako třeba u Arduina Nano pomocí USB. Takovýto výsledek předčil moje očekávání a počáteční pocity, že se mi snad desky nepodaří ani oživit bez dalších investic na nákup ST-link programátoru (a z toho plynoucího dlouhého čekání na poštu z Číny).

Známé problémy desek BluePill

O těchto mouchách je dobré vědět, protože jsou situace, kdy můžou mít na svědomí třeba i zničení procesoru. Informace jsem čerpal z anglického originálu na URL https://wiki.stm32duino.com/index.php?title=Blue_Pill.

  • micro-USB konektor není k desce připájen příliš kvalitně a snadno se poškodí.
    Existuje několik verzí této desky s různými konektory. Lze opravit opětovným pájením konektoru a eventuálně pokrytím konektoru epoxidovým nebo tavným lepidlem.
  • Regulátor napětí 3.3 V je dimenzovaný jen pro velmi malý odběr periferií. Rychle se přehřívá a často nemá tepelnou ochranu. Navíc když selže, přivede na CPU plné vstupní napětí!
    Doporučuje se, aby byly periferie s vyšší spotřebou napájeny jiným regulátorem tak, aby odběr z desky nepřekročil 100 mA.
  • Analogové napájení a zem jsou připojeny přímo k digitálnímu napájení a uzemnění, což může způsobit dodatečný šum na vstupu ADC.
  • Tlačítko "reset" lze u některých desek stisknout obtížně.
  • Na desce není k dispozici obvod pro reset USB.
  • Není osazena Schottky dioda mezi napájením USB + 5V a systémem VIN. Takže nemůžete napájet desku přímo pinem +5V a současně používat USB.
  • Většina desek má špatnou hodnotu pullup odporu, která brání správné funkci nativního USB (např. reset po zavedení programu). Odpor R10 by měl mít hodnotu 1k5 a měl by být veden na potenciál napájení 3.3V. Navzdory tomu na některých PC může USB pracovat -  zkuste desku s vaším PC, než se rozhodnete odpor vyměnit. Řešením je také propojení PA12 s 3.3V pomocí odporu 1k8.

Odkazy

- nedaří se mi (???) rozchodit měření AI s rozlišením 12b (i program uvedený v odkazu výše mi jede pouze v 10b)
- stabilita měření je ovlivněna kvalitou napájení, při napájení desky 3.3V měření skáče jak potrefená koza; situaci by zřejmě řešil přesný zdroj referenčního napětí