Nowa generacja STM32Cube MX (1)

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 packagesrysunek 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

 

Autor: STM32eu

STM32eu