STM32CubeMX: graficzny konfigurator aplikacji dla STM32

 Oprogramowanie STM32CubeMX po długim okresie dojrzewania jest naprawdę gotowe do użytku powodując, że konfiguracja bloków peryferyjnych w mikrokontrolerach STM32 stała się (wreszcie!) wygodna. W skład pakietu o nazwie STM32Cube wchodzą dwie grupy oprogramowania:

  • graficzny konfigurator mikrokontrolerów STM32 i wbudowanych w nie bloków peryferyjnych – jest to program o nazwie STM32CubeMX,
  • osobne dla każdej rodziny mikrokontrolerów STM32 zestawy bibliotek z interfejsem HAL, które zapewniają obsługę bloków peryferyjnych wbudowanych w mikrokontrolery (w tym USB oraz sensorów pojemnościowych do implementacji bezstykowych nastawników i klawiatur STMTouch), a także wygodną integrację z systemem operacyjnym FreeRTOS, systemem plików FatFS, stosem TCP/IP, wspomaganiem wyświetlania grafiki (m.in. dzięki integracji z pakietem bezpłatnych bibliotek STemWIN firmy Segger i bezpłatnym kompresorem-dekompresorem obrazów LibJPEG).

Czytelników zainteresowanych oprogramowaniem przedstawionym w artykule zachęcamy do pobrania zarówno generatora-analizatora STM32CubeMX jak i poszczególnych pakietów bibliotek. Dobrym punktem startowym jest strona o adresie www.st.com/stm32cube.

O ile STM32CubeMX jest narzędziem uniwersalnym, umożliwiającym konfigurację aplikacji dla wszystkich modeli mikrokontrolerów STM32, to każda podrodzina (STM32L1, STM32F1, STM32F2…) wymaga zainstalowania osobnego pakietu bibliotek STM32Cube. Przypisanie indywidulanych zestawów bibliotek poszczególnym podrodzinom jest związane z ich odmiennym wyposażeniem i pozwala dobrze dopasować funkcjonalności bibliotek do budowy i wymogów obsługiwanych bloków peryferyjnych, pozwala także zoptymalizować ich działanie, ograniczając jednocześnie zajmowane zasoby. Kolejną ważną przyczyną dedykowania bibliotek są różne możliwości funkcjonalne i wydajność docelowych mikrokontrolerów: nie bowiem ma sensu implementacja obsługi stosu TCP/IP czy protokołu SSL w mikrokontrolerze pozbawionym MAC-a ethernetowego, podobnie jak nie ma sensu ograniczanie liczby obsługiwanych klas urządzeń USB do zestawu podstawowego urządzeń device gdy mikrokontroler oferuje zasoby umożliwiające implementację także hosta. Różnice związane z możliwościami mikrokontrolerów występują także w dołączonych do bibliotek pakietach sterowników wyświetlaczy: aktualna wersja STM32Cube dla STM32F4 zawiera procedury obsługi 16 różnych sterowników (LCD i touch-paneli), a wersję dla STM32L0 wyposażono w dwa takie zestawy. Domyślnym urządzeniem wyjściowym w STM32Cube, jakie jest dostępne dla wszystkich podrodzin mikrokontrolerów, jest moduł LCD ze sprzętowym sterownikiem ST7735, standardowym wyposażeniem bibliotek jest także zestaw skalowalnych czcionek.

STM32CubeMX i Eclipse

Firma STMicroelectronics przygotowała i udostępniła bezpłatnie plug-in dla IDE Eclipse, który integruje STM32CubeMX z IDE. Oprogramowanie jest dostępne pod adresem www.st.com/stm32cube.

Rys. 1. Budowa pakietu bibliotek STM32CubeF4

Każdy dedykowany pakiet bibliotek zawiera także zestawy BSP (Board Support Package) dla zestawów startowych, ewaluacyjnych i uruchomieniowych z oferty STMicroelectronics, dzięki czemu rozpoczęcie pracy z którymś z zestawów z oferty producenta nie wymaga żmudnego poznawania jego szczegółów sprzętowych.

Rys. 2. Architektura pakietu STM32CubeF4 z podziałem na warstwy

Na rysunku 1 pokazano uproszczony schemat blokowy ilustrujący budowę funkcjonalną pakietu bibliotek STM32CubeF4, a na rysunku 2 pokazano architekturę tego pakietu z podziałem na warstwy funkcjonowania aplikacji.

Warstwa Layer0 zawiera m.in. interfejs HAL (Hardware Abstraction Layer), która uniwersalizuje dostęp wyższych warstw do sprzętu, do czego służy dobrze udokumentowane API. W warstwie Layer1 ulokowane są m.in. biblioteki ze stosami komunikacyjnymi (USB Host/Device Libraries, PolarSSL, LwIP), bibliotekami graficznymi STemWin, LibJPEG, a także systemem operacyjnym FreeRTOS i systemem obsługi plików FatFS. Najwyższa warstwa – Layer2 – jest warstwą dla aplikacji użytkownika, które korzystają z możliwości udostępnianych przez warstwy leżące poniżej.

Jakość pakietów STM32Cube jest przez producenta weryfikowana za pomocą narzędzia CodeSonar firmy Grammatech, dzięki czemu – przy skomplikowanej strukturze całego zestawu – minimalizowane są niepotrzebne rekurencje oraz zależności pomiędzy fragmentami kodu bibliotek mogące zmniejszać wydajność całego systemu lub wręcz – na przykład z powodu konfliktów w obsłudze przerwań -uniemożliwiać jego pracę.

Rys. 3. Okno interaktywnego selektora zasobów

Elementem integrującym i konfigurującym pakiety dostępne w dedykowanych STM32Cube jest program STM32CubeMX, który spełnia następujące zadania:

  • umożliwia wybranie docelowego typu mikrokontrolera za pomocą interaktywnego selektora zasobów (rysunek 3),
  • interaktywnego selektora płytki startowej/ewaluacyjnej, dobieranej poprzez specyfikowanie pożądanych elementów peryferyjnych i/lub wyposażenia (rysunek 4),

Rys. 4. Interaktywny selektor płytki startowej/ewaluacyjnej

  • interaktywnego konfiguratora peryferii z możliwością wyboru linii GPIO dołączanych do poszczególnych bloków (rysunek 5). W przypadku możliwości wystąpienia konfliktów STM32CubeMX automatycznie sygnalizuje to w lewej części okna za pomocą kolorowych symboli, co – przy dużej liczbie możliwych kombinacji przypisani – znacznie ułatwia i przyspiesza pracę programisty,

Rys. 5. Okno konfiguratora peryferii z możliwością wyboru linii GPIO dołączanych do poszczególnych bloków

  • interaktywnego konfiguratora systemu taktującego mikrokontrolery (rysunek 6),

Rys. 6. Konfigurator systemu taktującego

  • także jako konfigurator dodatkowych elementów warstw aplikacji (rysunek 7), za pomocą którego można wygodnie wybrać i skonfigurować używane w aplikacji dodatkowe elementy programowe (jak np. stosy USB lub TCI/IP, system FreeRTOS czy system pików FatFS),

Rys. 7. Konfigurator dodatkowych elementów warstw aplikacji

  • kalkulator poboru mocy w cyklu zdefiniowanym przez użytkownika, z uwzględnieniem poboru prądu przez aktywne peryferia (rysunek 8), a także szacunkowym obliczeniem średniego natężenia pobieranego prądu oraz średniej wydajności mikrokontrolera. W przypadku bateryjnego zasilania analizowanego systemu, można wybrać typ ogniwa zasilającego (rysunek 9), co umożliwi obliczenie przez program szacowanego czasu pracy systemu bez konieczności wymiany baterii,

Rys. 8. Okno kalkulatora poboru mocy

Rys. 9. Zaimplementowana w STM32CubeMX lista baterii stosowanych do zasilania sprzętu przenośnego

  • po wykonaniu konfiguracji mikrokontrolera i bibliotek, program STM32CubeMX może wygenerować pliki projektu z ustaloną przez użytkownika konfiguracją. W aktualnie dostępnej wersji generowane są komplety plików przystosowanych do kompilacji w środowiskach programistycznych ARM/Keil MDK, IAR EWARM oraz kompilator GCC (używany m.in. przez TrueSTUDIO firmy Atollic).

Prezentowane oprogramowanie wyposażono w system automatycznej kontroli aktualności używanych bibliotek, dzięki czemu programista z niego korzystający ma pewność że korzysta z najnowszych dostępnych wersji (rysunek 10) i może zdecydować czy i jakich aktualizacji potrzebuje.

Rys. 10. Okno automatycznego weryfikatora aktualności używanych bibliotek w STM32CubeMX

W ten sposób poznaliśmy w skrócie koncepcję przyświecającą twórcom STM32Cube, które to oprogramowanie znacznie ułatwia nie tylko pisanie aplikacji na mikrokontrolery STM32, także ułatwia ich przenoszenie pomiędzy różnymi podrodzinami. To kolejny, duży krok w kierunku maksymalizacji przenośności aplikacji, dzięki czemu zwiększa się ich elastyczność i możliwości doboru sprzętu w zależności od – często zmieniających się – wymogów aplikacji.

Piotr Zbysiński

Autor: