STM32Cube MX to dobrze znane programistom wykorzystującym mikrokontrolery STM32 środowisko graficzne wspierające konfigurację układów peryferyjnych i generujące szkielet projektu dla dostępnych na rynku środowisk projektowych IDE. Ostatnio firma ST udostępniła odświeżoną wersję STM32Cube MX V5.0.0.
Nowoczesne, skomplikowane i wydajne mikrokontrolery mają wbudowanych szereg układów peryferyjnych od stosunkowo prostych układów GPIO poprzez moduły komunikacyjne UART, SPI, I2C, liczniki/timery, do najbardziej skomplikowanych interfejsów typu USB OTG. Konfigurowanie rozbudowanych peryferii jest zajęciem żmudnym i podatnym na możliwość popełnienia błędów. Dlatego producenci oprogramowania narzędziowego wbudowują w pakiety IDE konfiguratory, które znacznie redukują te niedogodności. Ich graficzne interfejsy pozwalają mocno przyspieszyć proces konfigurowania i znacząco redukują możliwość pomyłki przy zapisywaniu rejestrów konfiguracyjnych.
STM32Cube MX 5.x – nowy wygląd
Pierwszą rzeczą jaka się rzuca w oczy w nowej wersji STM32Cube MX to zmodyfikowana okno startowe. To okno w poprzednich wersjach delikatnie rzecz ujmując nie było zbyt atrakcyjne. Teraz to się zmieniło według mojej opinii zdecydowanie na plus – rysunek 1.
Rys. 1. Okno startowe STM32Cube MX V5.0.0
Po uruchomieniu STM32Cube MX możemy:
- Otworzyć istniejący projekt
- Utworzyć nowy projekt z kryterium wyboru mikrokontrolera lub płytki ewaluacyjnej ST
- Pobrać najnowszą wersję platformy programowej dla każdej z rodziny mikrokontrolerów (warstwa HAL plus middleware)
- Zainstalować, lub usunąć składniki programowe platformy programowej.
STM32Cube MX 5.x – pakiety
Pierwszą rzeczą jaką można zrobić po zainstalowaniu STM32Cube MX jest zainstalowanie składników bibliotek właściwych dla każdej z rodzin mikrokontrolerów STM32. Jest to wykonywane po kliknięciu na INSTALL/REMOVE w oknie Manage software installations -> Installor Remove embedded software packages – rysunek 2.
Rys. 2. Instalowanie paczki z warstwą HAL i middleware
Żeby mieć pewność, że instalowane biblioteki mają najnowsze wersje można przed ich zainstalowaniem wykonać uaktualnienie, tak jak to zostało pokazane na rysunku 3. Konfigurator łączy się z serwerem ST, automatycznie sprawdza dostępną najnowsza wersję i po kliknięciu na Install Now proces uaktualniania wykonuje się automatycznie.
Rys. 3. Aktualizacja bibliotek
STM32Cube MX 5.x – projekty
Wybór mikrokontrolera w czasie tworzenia nowego projektu ułatwia selektor działający w oparciu o kryterium doboru modelu konkretnego modelu MCU (opcja ACCESS to MCU SELECTOR), lub płytki ewaluacyjnej (opcja ACCESS TO BOARD SELECTOR) – rysunek 4.
Rys. 4. Kryterium wyboru mikrokontrolera
Po kliknięciu na przykład na opcję ACCESS TO BOARD SELECTION STM32CubeMX łączy się z serwerem ST i pobiera zestawienie wszystkich dostępnych modułów. Przez to mamy do dyspozycji zawsze aktualną listę modułów łącznie z najnowszymi.
Na rysunku 5 pokazano okno selektora modułów z wybranym modułem 32F429I DISCOVERY. Moduł można wybrać z listy umieszczonej na dole okna. Poszukiwania można zawęzić używając okna Board Filters umieszczonego z lewej strony okna przez wybranie dodatkowych opcji:
- Dostawca (Vendor) – na razie jest możliwy wybór STMicroeletronics
- Typ – Discovery, Nucleo itp.
- Seria MCU – STM32F0, STM32F1 itp.
- Cena
- Częstotliwość taktowania mikrokontrolera
- Niezbędne układy peryferyjne
Zdjęcie wybranego modułu z krótkim opisem i wypunktowanymi właściwościami (Features) jest wyświetlane w górnym oknie. Oprócz tego w tym oknie można znaleźć informację o statusie dostępności np. Acitve (produkt w masowej produkcji) i sugerowanej cenie w USD.
Rys. 5. Okno selektora modułów z wybranym 32F429I-DISCOVERY
W górnym oknie można wyświetlić powiększone zdjęcie modułu (Large Picture), uzyskać dostęp do dokumentów typu instrukcja użytkownika czy noty aplikacyjne (Docs&Resources, Datasheet) i zamówić moduł przez Internet (Buy). Jeżeli wybrany moduł spełnia wszystkie kryteria można przejść do kreatora projektu przez kliknięcie na przycisk Start Project.
STM32Cube MX 5.x – przykład
Do wygenerowania przykładowego projektu wybrałem moduł 32F429I DISCOVERY.
Kreator projektu jest zbudowany z kilku okien wybieranych przez zakładki:
- Pinout & Configuration
- Clock Configuration
- Project Manager
- Tools
Zakładka Project Manager
Okno Projekt manager jest podzielone na trzy kolejne okna
- Project
- Code Generator
- Advanced Settings
W oknie Project (rysunek 6) użytkownik wybiera nazwę projektu, lokalizację na dysku komputera, IDE dla którego STM32Cube MX wygeneruje szkielet projektu, ustawienia linkera (rozmiar sterty i stosu) oraz typ wybranego mikrokontrolera i właściwe dla niego biblioteki programowe.
Rys. 6. Okno ustawień projektu
Ja wybrałem projekt o nazwie test_LCD przeznaczony dla IDE TrueStudio. Okna Code Generator i Advanced Settings można przy pierwszych testach pozostawić z ustawieniami domyślnymi.
STM32Cube MX 5.x – konfiguracja taktowania
Okno Clock Configurator pozwala na szybkie ustawienie układu taktowania rdzenia i układów peryferyjnych mikrokontrolera. Układy z rdzeniem ARM maja dość rozbudowany system taktowania. Użytkownik musi wybrać źródło głównego sygnału zegarowego. Może to być generator HSE stabilizowany zewnętrznym oscylatorem kwarcowym, lub wbudowany oscylator RC (HSI RC) o częstotliwości 16MHz. Sygnał zegarowy z HSE, lub HSI RC jest podawany na układ PLL, gdzie jest modyfikowana jego częstotliwość. W przypadku naszego mikrokontrolera ustawiono taktowanie rdzenia z częstotliwością 72MHz. Programowany moduł taktowania pozwala tez uzyskać z dedykowanych układów PLL częstotliwość zegara 48MHz do taktowania modułu USB, zegara modułu komunikacyjnego I2S (na przykład 192 MHz), raz częstotliwość taktującą modułu LTDC sterującego wyświetlaczem LCD TFT.
Na rysunku 7 pokazano okno konfiguracji zegara dla mikrokontrolera naszego modułu 32F429I DISCOVERY. Konfigurator oprócz graficznej intuicyjnej możliwości zaprogramowania taktowania wykrywa błędy konfiguracji i podświetla na czerwono nieprawidłowo ustawione wartości – rysunek 8.
Rys. 7. Konfigurator taktowania mikrokontrolera
Rys. 8. Sygnalizacja błędnie ustawionej wartości HCLK
Okno Pinout&Configuration jest zaawansowanym narzędziem konfiguracji pozwalającym na włączanie i konfigurowanie układów peryferyjnych, dodawanie funkcji middleware, oraz przypisywanie do wyprowadzeń mikrokontrolera funkcji alternatywnych.
W lewej części okna jest umieszczona lista z kategoriami układów peryferyjnych, middleware i aplikacji. Każdą z kategorii można rozwinąć i wyświetlana jest lista jej układów peryferyjnych i lista komponentów middleware.
STM32Cube MX 5.x – peryferia
Nazwy układów peryferyjnych są oznaczane kolorami: czerwonym, zielonym i czarnym. Nazwa na liście w kolorze czerwonym oznacza, że nie przypisać ich linii do wyprowadzeń mikrokontrolera, bo są już zajęte przez inne peryferie. Zielona nazwa z symbolem żółtego wykrzyknika wskazuje, że układ może być użyty, ale z ograniczeniami. Jeżeli nazwa układu peryferyjnego jest wyświetlana bez symbolu i w kolorze czarnym to układu można użyć bez ograniczeń.
Na rysunku 9 pokazano listę układów komunikacyjnych (Connectivity) z przykładowymi konfiguracjami dla układów nie dostępnych, dostępnych z ograniczeniami i układów z pełnym dostępem. Z prawej strony rysunku pokazano opcje konfiguracji dla każdego z tych przypadków. Wykrywanie on-line kolizji konfiguracji układów peryferyjnych jest jedną z moich ulubionych funkcji STM32Cube MX. Przy rozbudowanych mikrokontrolerach z wieloma peryferiami wystarczy rzut oka, by się zorientować, że mogą być problemy z użyciem potrzebnych peryferii, lub ich użycie w konkretnej konfiguracji nie będzie możliwe.
Rys. 9. Lista układów peryferyjnych z zaznaczonym wykrywaniem kolizji przypisania wyprowadzeń alternatywnych
STM32Cube MX potrafi podpowiedzieć co sprawia, że użycie modułu peryferyjnego w danej konfiguracji nie jest możliwe lub ograniczone.
Rysunek 10 pokazuje, że moduł I2C1 nie może być konfigurowany, bo jego wyprowadzenia są zajęte przez już skonfigurowany moduł LTDC sterowania wyświetlaczami LCD -TFT, oraz alternatywnie przez moduł FMC. Jedyna dostępna opcja dla I2C1 to zablokowanie (Disable).
Rys. 10. Wyświetlenie przyczyny zablokowania konfiguracji modułu I2C1
STM32Cube MX 5.x – FreeRTOS
W selektorze projektu wybraliśmy moduł ewaluacyjny 32F429I-DISCOVERY. STM32Cube MX dla wybranego modułu 32F429I DISCOVERY skonfigurował domyślnie kilka układów peryferyjnych oraz middleware RTOS. Zostało to pokazane na rysunku 11.
Rys. 11. Domyślnie skonfigurowane układy peryferyjne dla modułu 32F429I DISCOVERY
Każdy z modułów peryferyjnych wymagających połączenia z wyprowadzeniami mikrokontrolera ma takie połączenia automatycznie zdefiniowane.
Na rysunku 12 pokazano fragment okna z rysunkiem obudowy mikrokontrolera z rozwijaną lista dostępnych połączeń alternatywnych dla wyprowadzenia linii portu PB8 (dostępna po kliknięciu prawym klawiszem myszy na wyprowadzenie), a na rysunku 13 sposób zmiany przypisanej etykiety.
Rys. 12. Lista z funkcjami alternatywnymi dla portu PB8
Rys. 13. Zmiana nazwy etykiety
STM32Cube MX 5.x – przykład z SPI3
Konfigurację nowego układu peryferyjnego pokażemy na przykładzie szeregowego interfejsu SPI3. W naszym przypadku jest to układ z dostępem bez ograniczeń (w liście peryferii wyświetlany na czarno).
Rys. 14. Wybór interfejsu SPI3
Po kliknięciu jego nazwy na liście wyświetlane jest okno SPI3 Mode and Configuration. W rozwijanym oknie Mode możemy wybrać tryb pracy interfejsu. Dla przykładu wybieramy Full-Duplex Master. Pod oknem SPI3 pojawia się okno Configuration, w którym wykonujemy właściwą konfigurację interfejsu. W oknie konfiguracji jest kilka zakładek. Pierwsza zakładka to Parameter settings.
Ustawiamy tu podstawowe parametry czyli format ramki (Motorola/TI), długość słowa danych (8/16 bitów) i dosunięcie bitów w ramce danych (LSB/MSB). W następnej kolejności można zaprogramować prędkość transmisji przez ustawienie preskalera (od 2 do 256), oraz polaryzację CPOL i fazę CPHA zegara. Okno ustawień parametrów pokazane jest na rysunku 14.
Rys. 15. Okno ustawień parametrów interfejsu SPI3
W oknie GPIO Settings są zdefiniowane przypisania linii portów mikrokontrolera do linii interfejsu SPI3. STM32Cube MX automatycznie przypisuje te linie do konfiguracji domyślnej.
Rys. 16. Przypisanie sygnałów interfejsu SPI3 do wyprowadzeń mikrokontrolera
Jeżeli w zakładce NVIC Settings zaznaczymy pole Enabled, to odblokujemy globalne przerwanie zgłaszane przez SPI3. W zakładce DMA Settings można zdefiniować pracę kanału DMA. Po kliknięciu na przycisk Add dodawany jest kanał DMA z dostępem SPI3_RX (dane odebrane przez SPI3), lub SPI3_TX (dane wysyłane przez SPI3).
W okienku DMA Request Settings ustawia się tryb Normal lub Circural oraz inkrementacja adresu. Można tez zaznaczyć użycie bufora FIFO. Przykładowa konfiguracja kanału DMA dla interfejsu szeregowego SPI3 została pokazana na rysunku 16.
Rys. 17. Konfiguracja kanału DMA dla interfejsu SPI3
Jak widać skonfigurowanie szeregowego interfejsu komunikacyjnego nie jest specjalnie trudne ani pracochłonne.
Tomasz Jabłoński