STM32Cube MX V5.0 – odświeżona wersja konfiguratora graficznego [1]
STM32Cube MX to graficzny konfigurator mikrokontrolerów STM32. 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ą przyspieszyć proces konfiguracji i znacząco redukują możliwość pomyłki przy zapisywaniu rejestrów.
Wstęp
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
Pierwsza rzecz, jaka się rzuca w oczy w nowej wersji, to zmodyfikowana okno startowe. To okno w poprzednich wersjach – delikatnie rzecz ujmując – nie było zbyt atrakcyjne. Teraz to się zmieniło, w mojej opinii zdecydowanie na plus – rysunek 1.
Rysunek 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 rodzin mikrokontrolerów (warstwa HAL plus middleware)
- Zainstalować lub usunąć składniki programowe platformy programowej.
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 -> Install or Remove embedded software packages – rysunek 2.
Rysunek 2. Instalowanie paczki z warstwą HAL i middleware
Aktualizacja bibliotek
Ż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.
Rysunek 3. Aktualizacja bibliotek
Wybór mikrokontrolera w czasie tworzenia nowego projektu ułatwia selektor, działający w oparciu o kryterium doboru konkretnego modelu MCU (opcja ACCESS TO MCU SELECTOR) lub płytki ewaluacyjnej (opcja ACCESS TO BOARD SELECTOR) – rysunek 4.
Rysunek 4. Kryterium wyboru mikrokontrolera
Po kliknięciu na przykład na opcję ACCESS TO BOARD SELECTION, STM32Cube MX łą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 STMicroelectronics
- Typ – Discovery, Nucleo itp.
- Seria MCU – STM32F0, STM32F1 itp.
- Cena
- Częstotliwość taktowania mikrokontrolera
- Niezbędne układy peryferyjne
Wybór sprzętu
Zdjęcie wybranego modułu z krótkim opisem i wypunktowanymi właściwościami (Features) est 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.
Rysunek 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), a także 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.
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
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.
Rysunek 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.
Konfiguracja taktowania
Okno Clock Configurator pozwala na szybkie ustawienie układu taktowania rdzenia i układów peryferyjnych mikrokontrolera. Układy z rdzeniem ARM mają 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ą 72 MHz. Programowany moduł taktowania pozwala tez uzyskać z dedykowanych układów PLL częstotliwość zegara 48 MHz do taktowania modułu USB, zegara modułu komunikacyjnego I2S (na przykład 192 MHz) oraz 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.
Rysunek 7. Konfigurator zegara mikrokontrolera
Rysunek 8. Sygnalizacja błędnie ustawionej wartości HCLK
Konfiguracja peryferii
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 wtedy wyświetlana jest lista jej układów peryferyjnych i lista komponentów middleware.
Nazwy układów peryferyjnych są oznaczane kolorami: czerwonym, zielonym i czarnym . Nazwa na liście w kolorze czerwonym oznacza, że nie można przypisać ich linii do wyprowadzeń mikrokontrolera, bo te są już zajęte przez inne peryferia. 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ń.
Interfejsy komunikacyjne
Na rysunku 9 pokazano listę układów komunikacyjnych (Connectivity) z przykładowymi konfiguracjami dla układów niedostę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.
Rysunek 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).
Rysunek 10. Wyświetlenie przyczyny zablokowania konfiguracji modułu I2C1
W selektorze projektu wybraliśmy moduł ewaluacyjny 32F429I DISCOVERY. STM32Cube MX dla wybranego modułu skonfigurował domyślnie kilka układów peryferyjnych, oraz middleware RTOS. Zostało to pokazane na rysunku 11.
Rysunek 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 portu PB8 (dostępna po kliknięciu prawym klawiszem myszy na wyprowadzenie), a na rysunku 13 sposób zmiany przypisanej etykiety.
Rysunek 12 Lista z funkcjami alternatywnymi dla portu PB8
Rysunek 13. Zmiana nazwy etykiety
Konfiguracja SPI
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).
Rysunek 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 dokonujemy właściwej 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/16bitó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 pokazano na rysunku 15.
Rysunek 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.
Rysunek 16. Przypisanie sygnałów interfejsu SPI3 do wyprowadzeń mikrokontrolera
Kontroler przerwań
Jeżeli w zakładce NVIC Settings zaznaczymy pole Enabled, to odblokuje się globalne przerwanie zgłaszane przez SPI3. W zakładce DMA Settings można zdefiniować pracę kanału DMA. Po kliknięciu na przycisk Add dodamy 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 inkrementację adresu. Można tez zaznaczyć użycie bufora FIFO. Przykładowa konfiguracja kanału DMA dla interfejsu szeregowego SPI3 została pokazana na rysunku 17.
Rysunek 17. Konfiguracja kanału DMA dla interfejsu SPI3
Jak widać skonfigurowanie szeregowego interfejsu komunikacyjnego nie jest specjalnie trudne, ani pracochłonne.