STM32Cube MX V5.0 – odświeżona wersja konfiguratora graficznego [2]

Dla bardziej zaawansowanych użytkowników STM32Cube istotna będzie możliwość dodawania funkcji warstwy middleware. W projekcie z wybranym modułem 32F429I-DISCOVERY można dodawać i konfigurować:

  • System plików FATFS
  • System czasu rzeczywistego FREERTOS
  • Zaawansowaną bibliotekę graficzną GRAPHICS
  • Bibliotekę kryptograficzną MBEDTLS
  • Bibliotekę PDM2PCM do konwersji strumienia danych PDM z mikrofonu MEMS na strumień danych PCM
  • Obsługę interfejsu USB_HOST
 Zachęcamy do przeczytania pierwszej części artykułu

Biblioteka graficzna

Dodawanie i konfigurację Middleware pokażemy na przykładzie biblioteki graficznej GRAPHICS. Wybieramy ją z listy Middleware i w oknie Graphics Mode and Configurations trzeba wybrać jedną z dostępnych bibliotek i środowisk narzędziowych: STemWin – bezpłatną, przygotowaną dla mikrokontrolerów STM32 przez firmę Segger, lub również bezpłatną TouchGFXrysunek 18. Każda z tych opcji, oprócz bibliotek, dostarcza wygodne graficzne środowisko projektowania ekranów z umieszczonymi na nich widżetami, tekstem itp.

Rysunek 18. Wybór dostawcy biblioteki graficznej dla Middleware GRAPHICS

W kolejnym kroku trzeba wybrać interfejs komunikacyjny ze sterownikiem panelu LCD-TFT. Możliwy do wybrania interfejs LTDC został dodany i domyślnie skonfigurowany przez STM32CubeMX po wyborze modułu 32F429IDISCOVERY, który ma na pokładzie panel LCD TFT ze sterownikiem ILI9341.

Rysunek 19. Wybór interfejsu LTDC.

STM32CubeMX również domyślnie konfiguruje interfejs LTDC – rysunek 20.

Rysunek 20. Domyślna konfiguracja interfejsu LTDC

Po wybraniu STemWin możemy przystąpić do konfigurowania biblioteki w oknie Configuration. Mamy tu do dyspozycji 4 zakładki: Parmeter Settings, STemWin, User Constans i Platform Settings.

Konfigracja parametrów

W pierwszej zakładce Parameter Settings możemy:

  • Włączyć lub wyłączyć użycie graficznego narzędzia GUIBuilder przeznaczonego do projektowania ekranów interfejsu użytkownika z użyciem widżetów
  • Zmienić rozdzielczość użytego wyświetlacza – domyślnie x=240, y=320
  • Zmieniać ilość wirtualnych ekranów
  • Wybierać rodzaj konwersji kolorów – domyślnie GUICC_565
  • Rezerwować wielkość pamięci przeznaczonej na GUI
  • Włączać i wyłączać użycie systemu czasu rzeczywistego FREERTOS
  • Włączać wsparcie dla sterownika panelu LCD-TFT ILI9341 użytego w wyświetlaczu modułu 32F429IDISCOVERY

Rysunek 21. Zakładka Parameter Settings dla Middleware GRAPHICS

Jeżeli wybierzemy opcję FREERTOS enable to STM32CubeMX przygotuje odpowiednią domyślną konfigurację systemu czasu rzeczywistego i utworzy dedykowany wątek. Po wybraniu opcji wyłączenia RTOS wygenerowany projekt będzie działał na zasadzie pollingu.

Ustawienie możliwości użycia GUIBuilder w zakładce Parameter Settings daje możliwość (po kliknięciu na przycisk Execute) otworzenia narzędzia emWin GUIBuilder z zakładki STemWIN – rysunek 22.

Rysunek 22. Uruchomienie emWinGUIBuilder

Ostatnie okno Platform Settings definiuje przypisanie linii dodatkowego interfejsu szeregowego używanego do komunikacji ze sterownikiem panelu LCD-TFT – rysunek 23.

Rysunek 23. Przypisanie sygnałów interfejsu używanego przez sterownik panelu wyświetlacza

W podobny sposób możemy konfigurować pozostałe moduły z listy middleware.

Szkielet projektu

Generowanie szkieletu projektu z wykonanymi przez nas konfiguracjami układów peryferyjnych i ewentualnie middleware jest wykonywane po kliknięciu na przycisk GENERATE CODE.

Rysunek 24. Generowanie kodu źródłowego

Na końcu procesu generowania kodu źródłowego pojawia się okno, w którym możemy otworzyć projekt w środowisku projektowym IDE (w naszym przypadku jest to TrueStudio) wybranym w zakładce Project Manager STM32CubeMX.

Ponieważ wybraliśmy w konfiguracji middleware GRAPHICS, popatrzmy jak wygląda wsparcie obsługi wyświetlacza. Jak wiemy, panel LCD-TFT jest sterowany przez wbudowany kontroler ILI9341. To rozbudowany układ konfigurowany i sterowany przez zapisywanie wewnętrznych rejestrów. Zazwyczaj taki sterownik wymaga mniej lub bardziej zaawansowanej inicjalizacji polegającej na zapisywaniu rejestrów konfiguracyjnych. Middleware GHAPHICS wspiera obsługę wyświetlacza z tym sterownikiem i należy się spodziewać, że w projekcie znajdziemy odpowiednie procedury. W katalogu BSP umieszczono katalog ili9341, w którym są umieszczone dwa pliki: ili9341.c i ili9341.hrysunek 25. W pliku ili9341.c została umieszczona między innymi procedura ili9341_Init() pokazana na listingu 1.

Jak widać inicjalizacja nie jest banalna i żeby ją dobrze wykonać samodzielnie, potrzeba włożyć w to wiele pracy.

Rysunek 25. Pliki źródłowe z procedurami obsługi sterownika wyświetlacza LCD-TFT

 

Listing 1. Inicjalizacja sterownika wyświetlacza LCD-TFT

Użycie HAL

Procedury obsługi warstwy HAL interfejsu LTDC wykorzystywanego przez sterownik wyświetlacza są umieszczone w katalogu STM32F4xx_HAL_Driverrysunek 26.

Rysunek 26. Procedury obsługi warstwy HAL interfejsu LTDC

Skompilowaną bibliotekę graficzną emWin w wersji STemWin umieszczono w katalogu Middlewares->STemWin->Lib tak jak to pokazano na rysunku 27. Co ciekawe, katalog Middlewares->ST-STemWin->Software zawiera programy wykorzystywane w trakcie pracy z biblioteka graficzną.

Rysunek 27. Katalog Middlewares

STM32CubeMX to jak wiemy konfigurator, który bardzo ułatwia konfigurowanie układów peryferyjnych i middleware. Po wygenerowaniu kodu dostajemy szkielet projektu z plikami konfigurującymi użyte układy peryferyjne. To oczywiście spore udogodnienie, ale własną aplikację musimy napisać sami. Żeby jeszcze bardziej ułatwić pracę programiście w plikach źródłowych umieszczane są sugestie, gdzie użytkownik może dopisać swój kod , tak jak to zostało pokazane na listingu 2 w funkcji main().

Listing 2. Funkcja main()

Podsumoanie

STM32CubeMX jest ciągle rozwijany przez ST, a jego kolejne wersje są coraz doskonalsze. Wersja V5.0 jest dojrzałym narzędziem, bardzo intensywnie wspierającym pracę programisty w niewdzięcznej i uciążliwej fazie konfigurowania układów peryferyjnych i middleware. Dużą zaletą jest bezpłatny, pełny dostęp do wszystkich możliwości programu. Mimo tych niezaprzeczalnych zalet trochę niezrozumiałym jest brak STM32CubeMX V5.0 w wersji wtyczki (plug–in) instalowanej na przykład w IDE opartym na Eclipse. Poprzednie wersje wtyczki miały oczywiste błędy, na przykład nie można było poprawnie skonfigurować układu taktowania, podczas gdy wersja uruchamiana niezależnie pracowała bez problemu. Praca z IDE z zainstalowaną wtyczką konfiguratora jest przynajmniej dla mnie wygodniejsza i szybsza. Mimo to STM32CubeMX wykonuje bardzo dobra pracę i jego używanie może być standardem wśród programistów używających mikrokontrolerów STM32.

O autorze