STM32CubeMX – první projekt
Na začátku lze vybrat procesor podle:
- Použitého jádra a série procesorů
- Rychlosti jádra, velikosti paměti
- periferií potřebných v aplikaci
- pouzdra, ve kterém je procesor vyráběn
Obvody, nebo desky které mám nakoupené jsem označil hvězdičkou, takže se při zakládání nového projektu výrazně zmenšil výběr.
Konfigurace pinů a periferií integrovaných v procesoru
Když jsem vybral procesor, s kterým chci realizovat nový projekt, je potřeba nastavit vlastnosti jednotlivých periferií. Ty jsou vyjmenovány na levé straně panelu Pinout a Configuration. Když najedu myší nad jednotlivé položky, ukáže se odkaz na aktuální referenční manuál. Na začátku mi dost vadilo, že manuály jsou rozsáhlé a neumím se v nich orientovat. STM32Cube v nich hledá za mě a v PDF dokumentu automaticky najde potřebou kapitolu.
Nahrávání programu do procesoru
Aby bylo možné nahrávat nový program, je potřeba v záložce Systém Core nastavit způsob, kterým budeme s procesorem komunikovat. Je možné zvolit Seriál Wire, to je dvouvodičová sběrnice, kterou používají programátory ST-LINK osazené na vývojových deskách Nucleo, nebo Discovery. Pro rozsáhlejší možnosti debugování je možné použít rozhraní JTAG, v tomto případě bude potřeba větší množství pinů pro komunikaci a programátor ST.
Na pravé straně panelu, kde je obrázek procesoru, se zeleně vybarví potřebné piny.
Zdroj hodinového signálu
Pro běh procesoru je potřeba vybrat zdroj hodinového signálu. Tím může být interní RC oscilátor, nebo vnější krystal. Ten zabere další dva piny procesoru, které můžeme využít i pro jiné funkce, pokud se spokojíme s vnitřním RC oscilátorem.
Krystalový oscilátor potřebuje pro svoji činnost dvojici kondenzátorů kolem 22pF, bez nich se nerozjede.
Podrobné nastavení hodin je na druhém panelu, Clock Configuration.
Nejjednodušší je, napsat požadovaný kmitočet systémových hodin vpravo, STM32Cube zkusí vypočítat hodnoty PLL násobiče a děliček. Zadal jsem 181MHz, ale maximální kmitočet je 180MHz, takže program nenajde řešení a já budu muset hodnotu upravit.
Ve spodní části panelu jsou zdroje hodin pro všechny periferie, takže je možné měnit jejich rychlost podle potřeby.
GPIO piny
Klikáním na jednotlivé piny procesoru jim lze přiřadit funkce. Mohou směřovat k periferiím procesoru které zatím nejsou aktivní, potom se vybarví žlutě. Když budu chtít pin ovládat vlastním programem, zvolím GPIO_Input, nebo GPIO_Output. V tomto případě můžu pravým tlačítkem myši změnit název pinu. Název pak bude použit v programu.
Další periferie
STM32Cube pro každou periferii připraví funkci, kterou bude periferie inicializovaná. Funkce provede inicializaci registrů, hodnoty některých můžeme nastavit v grafickém prostředí STM32Cube. Například u SPI to bude formát rámce, počet bitů, rychlost, polarita signálu…
Na stránce Project Manager a záložce Advanced Setting je možné pro každou periferii zvlášť zvolit, zda má být knihovna funkcí HAL, nebo LL. Tady je dobré si rozmyslet, jak moc se o periferii chceme starat při programování. Vysoko úrovňové funkce HAL zařídí většinu věcí tak, abych nemusel chápat, co dělá hardware. Nevýhodou je delší doba provádění funkcí a jejich spotřeba programové paměti. Nízko úrovňové LL funkce jsou rychlé, zabírají málo místa v paměti, ale je potřeba prostudovat, jak funguje hardware.
Protože chci, aby funkce pro inicializaci periferií byly ve zvláštních souborech, zadám to na záložce Code Generator.
Přepínání mezi HAL a LL
Přepínání mezi LL a HAL knihovnami během výuky programování mi připadá užitečné. Hardware, kterému zatím nerozumím, ovládám pomocí HAL knihovny. Tak získám rychlý výsledek při studiu. Funkce HAL knihoven mnohdy zbytečně zkoumají, v jakém stavu je hardware, který budou obsluhovat. To zabírá hodně času. Takže může být zajímavé později pečlivně nastudovat práci periferie a k jejímu ovládání použít LL knihovnu. Zároveň jiné části programu můžou zůstat v HAL.
Přesměrování periferie na jiné piny
Jeden pin může být přiřazen většímu množství periferií. To může být problém, když nastavím jednu periferii, další se vybarví červeně a není možné ji zapnout.
Na druhé straně, pro jednu periferii je možné vybrat větší množství různých pinů. Tohle STM32CubeMX neumí úplně vyřešit, piny periferiím přiřazuje tak, jak je postupně zapínám. Ale když podržím CTRL a kliknu na kritický pin, zobrazí se alternativní piny. V mém případě jsou černě označeny piny, kde může být hodinový signál portu SPI2. Tak je možné potřebnou funkci přesměrovat na jiný pin a potom znovu zapnout periferii. Původní pin se uvolní a může být použit pro jiný účel. To je dobrý nástroj pro návrh schématu s ohledem na fyzické uspořádání dalších obvodů na desce.
Název projektu a generování zdrojového kódu
Na kartě Project Manager je potřeba zadat Project Name a IDE, ve kterém budeme psát program. Já budu používat STM32CubeIDE.
Projekt je uložen do adresáře Workspace, jehož umístění bylo potřeba zvolit při instalaci.
Nakonec je možné nechat spustit rovnou vývojové prostředí, ve kterém se projekt otevře. No a při troše kázně při psaní programu lze v STM32CubeMX průběžně upravovat parametry periferií a nechat opakovaně generovat projekt. V programu se aktualizují požadované parametry a mnou napsaný text zůstane.