Díky pochopení ze strany STMicroelectronics máme možnost vyzkoušet STM32F0 Discovery kit a napsat Vám o něm něco zajímavého. Již po pár hodinách zkoumání mohu s klidem prohlásit, že půjde o velmi oblíbený kit. A to nejen pro úplné začátečníky, jak jsem se domníval dřív, ale i pro ty, kteří s mikrořadiči pracují déle. Proč mám tento názor se pokusím vysvětlit v další části textu.


Provedení

Kit je v blistru, stejně jako předcházející kity z díly ST. V umělohmotném obalu se nenachází pouze kit, ale rovněž bastl deska, takže si můžete vytvořit svou konstrukci v podobě shieldu nasouvacího na kit.


Klikni pro detaily


Kit je podobný předcházejícím - jde tedy o kombinaci debuggeru (ST-Link) a vlastního mcu s vyvedenými piny na dvě řady konektorových lišt po stranách kitu. Napájení kitu je realizováno prostřednictvím USB, takže pro nízkopříkonové aplikace nepotřebujete externí napájení (nízkopříkonovou aplikací mám v tomto případě na mysli spotřebu do 500 mA!).

Kit obsahuje dvě uživatelské LED a dvě tlačítka (reset + uživatelské). Uživetelské tlačítko je stejně jako na kitu STM32VL Discovery připojeno na PA0 (wakeup). Umístění by mělo být jasné za následujícího výkresu.



Při podrobnějším zkoumání naleznete změnu v programovacím konektoru CN3 (vlevo nahoře). Místo 4 pinů, na které jsme zvyklí (Ucc, SWCLK, GND a SWDIO), má tento konektor o 2 piny více - celkem tedy 5! Byly doplněny piny Reset (nyní se tedy dá z ST-Linku resetovat mcu nejen prostřednictvím debugg příkazů) a SWO o jehož funkci se zatím ST nešíří. Z označení lze předpokládat že půjde o realizaci SWV (Serial Wire Viewer), což je protokol umožňující získat informace o běhu mcu. Pokud to bude fungovat, tak to pokládám za velmi užitečné rozšíření implementace ST-Linku na kitu.

Oproti STM32VL Discovery má vícebarevná indikační dioda připojení k USB větší možnosti signalizování aktuální situace:
  • Červeně pomalu bliká - napájení je připojeno USB není zatím inicializováno
  • Červeně rychle bliká - probíhá enumerace mezi PC a kitem
  • Červeně trvale svítí - inicializace byla úspěšně zakončena
  • Zeleně trvale svítí - byl úspěšně připojen cílový mcu k PC
  • Zeleně/červeně blikání - komunikace mezi cílovým mcu a PC
  • Červeně trvale svítí - komunikace úspěšně zakončena
  • Oranžově trvale svítí - komunikace skončila s chybou


Na kitu nejsou osazeny krystaly pro cílový mcu. Tedy chybí jak 8 MHz pro HSE, tak 32 kHz pro LSE. Místa jsou připravena, spolu s příslušnými odpory a kondenzátory. Důvodem je skutečnost, že mcu umožňuje využít tyto piny též jako GPIO a po osazení krystalu by bylo toto využití znemožněno. Lze předpokládat že ve variantě s mcu STM32F052, který obsahuje USB periférii, bude krystal osazen.

Vpravo vedle míst pro krystaly je propojka JP2, díky které si po jejím rozpojení můžete změřit spotřebu mcu, neboť přes ní je realizováno napájení celého mcu.


Osazený cílový mcu

Jako vlastní čip k programování je na kitu osazen STM32F051R8T6 mcu, což je ARM Cortex M0 mcu v pouzdře LQFP64. Obsahuje 64 kB Flash a 8 kB SRAM, což jsou skvělé hodnoty pro jednoduché aplikace. Frekvence jádra mcu je až 48 MHz (a výkon Cortex M0 je 0.9 DMIPS/MHz). Pro frekvence do 24 MHz je pro komunikace s Flash 0 wait stavů, pro vyšší frekvence 1 wait stav (což řeší akcelerátor). Napájení je 3.3V (s napětím 5V se nepočítá ani v budoucích řadách). Když jsou všechny periférie puštěné a mcu jede maximální rychlostí, tak je spotřeba 22 mA (ale když jedete na interní RC oscilátor 8 MHz, tak se všemi perifériemi v chodu je spotřeba jen 4 mA ).
Datasheet naleznete zde.
I přes to, že jde o jednoho z nejslabších členů rodiny ARM, tak obsahuje výkonově zajímavé periférie:
  • USART až 6 Mbit/s
  • SPI až 18 Mbit/s
  • I2C až 1 Mbit/s
  • HDMI CEC


Jsem zvědav na ty aplikace s tím HDMI, ale každopádně je prima, že tahle možnost tam je.

Jinak v čipu je schováno mnoho užitečného, od kapacitního snímání (což umožňuje realizovat snadno až 18 kapacitních tlačítek, šoupátek a rollerů), přes ADC, DAC až k analogovému komparátoru, což je novinka. Čip obsahuje DMA, takže i výše uvedené vysoké rychlosti periférií jsou realizovatelné bez významnější zátěže jádra mcu. Díky DMA nemůže dojít k situaci jako u 8-mi bitů, že vám přijde bajt, vy musíte udělat přerušení (během kterého se zakážou další přerušení) a pokud v průběhu zpracování příjmu znaku přijde další, tak jej ztratíte. Zde vám DMA obslouží příjem a vy si můžete z kruhového bufferu vyzvedávat přijaté znaly bez nebezpečí ztráty.


Blokové schéma jádra


Co se týče pinů,tak z výjimkou pinů připojených k ADC a pinů pro připojení krystalů, jsou ostatní piny 5V tolerantní, což usnadňuje návrh zapojení využívajících jak 3.3V, tak 5V.

A/D převodníky mají externí napájení aby se snížilo rušení. Na blokaci potřebujete 10 nF. Napájení digitální části je realizováno 2 piny (2 x 100nF) + Vbat (1.65 - 3.3V) na zálohování.

Rád bych popsal komparátor, který je novinkou a minule ještě nebylo dost informací.


Komparátor

Dva rychlé a nízkopříjmové komparátory jsou integrální součástí čipu. Jde o rail-to-rail provedení. Nastavit lze porovnávané napětí, hysterezi, rychlost, a polaritu výstupního napětí.

Volba porovnávaného napětí:
  • Externí
  • Výstup D/A převodníku
  • Interní referenční napětí a jeho podíly (1/4, 1/2 a 3/4)


Oba komparátory mohou probudit (wakeup) mcu ze STOP modu, generovat přerušení, ovládat timery a oba být zkombinovány do window komparátoru.

Pozn: očekávám že někdo bleskurychle zrealizuje L/C metr, kde místo externí LM311 využije interní komparátor v mcu (tak jak je to realizováno v konstrukcích s některými PIC mcu).

Další informace o STM32F0 naleznete v našem předcházejícím článku zde, odkud jsem si vypůjčil schéma jádra mcu.


Cortex M0

Co znamená, že mcu má jádro Cortex M0 a jaký je to rozdíl proti Cortex M3? Zkušení to jistě vědí, však jsme tu již na toto téma měli více článků, ale pro začátečníky se 32 bity, to raději připomenu. Cortex M0 je ochuzené jádro, s minimálním počtem tranzistorů (proto je energeticky úsporné) a umí pouze nezbytně nutnou množinu příkazů assembleru.



Pokud se podíváte do středu, tak tam vidíte zelenou barvou označené příkazy jádra Cortex M0 (zvládá stejnou množinu jako jádro Cortex M1 pro programovatelná pole). Bílá políčka se zeleným textem jsou 16-ti bitové instrukce Thumb a zelená políčka s bílým textem jsou 32 bitové instrukce Thumb-2. Sadu pro Cortex M0 můžete porovnat s modře znázorněnými příkazy pro Cortex M3. Ten zvládá všechny příkazy Cortex M0 - podívejte se třeba na první řádku, kde je ADC, ADD a ADR, což jsou příkazy assembleru, který zvládají obě jádra. Na druhou stranu, třeba u dělení - je situace jiná. Cortex M3 to zvládne jednou instrukcí, ale Cortex M0 musí volat podprogram, který pomocí více instrukcí provede vlastní operaci dělení. Tudíž 48 MHz rychlost jádra se projeví zejména u jednoduchých operací (např. GPIO pin toggling) ale u výpočtů Cortex M0 se zadýchává. Z toho vyplývá, kam se tento mcu nehodí - není vhodný pro aplikace operace s mnoha výpočty, zejména počítající s desetinnými čísly. Ale je velmi šikovný pro jednoduché aplikace provádějící opakovaně několik málo jednoduchých činností. Uvedené se týká jádra ale nikoliv periférií! Periférie mohou (také díky DMA) těžit z vyšší rychlosti a nijak nejsou zpomalovány nižším počtem instrukcí, které jádro umí provádět (proto se také ST může chlubit vysokými komunikačními rychlostmi).
Na druhou stranu aby si zase někdo nemyslel že jde o nějaký pomalý čip - tak instrukce jádra Cortex M0 pokrývají instrukce jádra 8051 a provádí je převážně v jednom cyklu, navíc může zpracovat rovnou 32 bitů. Výsledek je ten, že se těch 48 MHz opravdu projeví na svižnosti. Laicky odhaduji na základě několika drobných testů, že rychlost kitů STM32F0 a STM32VL Discovery je velmi podobná (VL sice běží na 24MHz, ale má rozšířenou instrukční sadu Cortex M3).
Bližší podrobnosti k instrukční sadě Cortex M0 naleznete zde.

Přerušení se zpracovává stejně jako u Cortex M3, takže žádné novinky. Tail chaining a Late Arriving zde také funguje. Počet cyklů potřebných na vstup do handleru přerušení je 16 (tj. pro 48 MHz = 33us 0.33us).


Závěr

Jednoduše shrnuto jde o prima kousek. Obsahuje většinu periférií pro jednoduchá zapojení, kterých je v praxi většina. Jediné, co trochu chybí je USB a toho se snad dočkáme do konce tohoto roku. Čip je úsporný a dostatečně výkonný pro běžné aplikace od digitálních hodin po regulátory topení. Integrovaná obsluha touch tlačítek výrazně usnadní konstrukci. Pokud by chtěl někdo čip vyzkoušet ve své konstrukci, tak mu můžu poskytnout vzorek. Kit STM32F0 Discovery samotný lze dnes již koupit. Osobně předpokládám že kit se poměrně hodně rozšíří a s ohledem na cenu (cca 10 USD) si dovedu představit, že v amatérských jednorázových konstrukcích budou přímo kity (zejména u těch amatérů, kteří neradi pájejí SMD) - ostatně k tomu vybízí i výrobce, který dodává jako součást kitu bastl desku s prokovenými otvory. Na druhou stranu čip samotný, by měl stát kolem 30-40 Kč v kusovém množství, takže šetřílci mohou značně ušetřit


Odkazy

Datasheet STM32F0 Discovery kitu můžete stáhnout zde