W ostatnich dniach firma STMicroelectronics poinformowała, że biblioteki STM32Cube są dostępne dla wszystkich obecnie produkowanych rodzin mikrokontrolerów STM32, w tym długo oczekiwane biblioteki dla STM32F1. Nie są jeszcze dostępne biblioteki STM32Cube dla mikrokontrolerów STM32F7, co wynika z faktu, że są one jeszcze produkowane na skalę masową. Producent zapowiada, że biblioteki dla tej rodziny będą dostępne wraz z wprowadzeniem do masowej produkcji pierwszych mikrokontrolerów STM32F7.
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).
O ile STM32CubeMX jest narzędziem uniwersalnym, umożliwiającym konfigurowanie 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 na dobre dopasowanie funkcjonalności bibliotek do budowy i wymogów obsługiwanych bloków peryferyjnych. Pozwala także na zoptymalizowanie ich działania, ograniczając jednocześnie zajmowane zasoby.
Kolejną ważną przyczyną dedykowania bibliotek są różne możliwości funkcjonalne i wydajność docelowych mikrokontrolerów, ponieważ nie ma sensu implementowanie 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 ma zasoby umożliwiające również zaimplementowanie 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 czcionek skalowalnych.
Każdy 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.
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 unifikuje 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 weryfikowana przez producenta 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ę.
Elementem integrującym i konfigurującym pakiety dostępne w dedykowanych STM32Cube jest program STM32CubeMX, który spełnia następujące zadania:
- Selektor docelowego typu mikrokontrolera za pomocą interaktywnego narzędzia do wyboru zasobów (rysunek 3).
- Interaktywnego selektora płytki startowej/ewaluacyjnej, dobieranej poprzez specyfikowanie pożądanych elementów peryferyjnych i/lub wyposażenia (rysunek 4).
- 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.
- Interaktywnego konfiguratora systemu taktującego mikrokontrolery (rysunek 6).
- Konfiguratora dodatkowych elementów warstw aplikacji (rysunek 7). Za jego pomocą 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).
- Kalkulatora 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.
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.
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, EP