Kurs STM32 F1 HAL – #2 – czym jest STM32Cube HAL?

Kurs STM32 F1 HAL – #2 – czym jest STM32Cube HAL?

W pierwszym kursie STM32 F1 korzystaliśmy z biblioteki standardowej StdPeriph. Ekosystem ST cały czas się rozwija, pojawiają się więc nowe narzędzia i biblioteki.

Przed poznaniem STM32Cube HAL w praktyce warto wyjaśnić pewne pojęcia i poznać strukturę aktualnie dostępnych bibliotek. 

Mikrokontrolery z rodziny STM32 zyskały popularność nie tylko ze względu na dobrą warstwę sprzętową, ale również wsparcie dla programistów. Dostępna jest dokumentacja, wiele przykładów i poradników. Producent układów, firma ST, przygotowała również swoje biblioteki.

Każdy może oczywiście napisać własną bibliotekę. Wiele firm zajmujących się mikrokontrolerami ma własne rozwiązania, które używane są w ich projektach. Jednak życie jest znacznie prostsze jeśli używamy pewnych standardów.

Źródło: materiały prasowe STM32.

W przypadku STM32 mamy do wyboru co najmniej trzy biblioteki:

  1. CMSIS
  2. StdPeriph
  3. STM32Cube

Pierwsza biblioteka jest bardzo niskopoziomowa. Wiele osób, które z niej korzysta mówi, że używa bezpośrednio rejestrów. Ciężko się z tym nie zgodzić. CMSIS dostarcza tylko kilku funkcji. Cała reszta to struktury, za pomocą których nieco łatwiej odwoływać się do rejestrów.

StdPeriph, nazywana biblioteką standardową, do niedawna była zalecana przez producenta. Jest ona dość niskopoziomowa. Pozwala jednak na pisanie programów bez potrzeby bezpośredniego odwoływania się do rejestrów.

STM32Cube to jak na razie najnowszy wyrób programistów z firmy ST. Jest to znacznie bardziej rozbudowany produkt niż StdPeriph. Nie bez powodu unikamy tutaj słowa biblioteka. STM32Cube to w rzeczywistości cały zestaw bibliotek oraz programów. Można je używać razem, ale co ważniejsze, działają również oddzielnie.

Co to jest STM32Cube?

Mówiąc o STM32Cube mamy najczęściej na myśli dwie rzeczy, które na ogół łatwo się mylą:

  • generator kodu STM32CubeMX
  • pakiet oprogramowania STM32Cube

Jeśli ktoś jest zainteresowany tym graficznym kreatorem, to może prześledzić kurs dla układów z rodziny STM32 F4, sam program jest dostępny do pobrania za darmo na stronie producenta.

Dlaczego nie używamy STM32CubeMX?

Po pierwsze, generowany kod (moim zdaniem) nie jest zbyt czytelny. Dla niektórych tak tworzony program może być wręcz brzydki. To oczywiście rzecz gustu, ale mi akurat takie podejście się nie spodobało, więc zdecydowałem o nieużywaniu CubeMX.

STM32CubeMX - graficzny kreator.

Druga sprawa to "pielęgnacja kodu". Kto zagwarantuje, że takie narzędzie będzie poprawnie działało powiedzmy za 10 lat? Może to zabrzmi dziwnie, ale wiele programów jest używanych i modyfikowanych nawet dłużej. Kompilatory najczęściej są zgodne z poprzednimi wersjami, ale już graficzne "wodotryski" rzadko kiedy są tak długo zgodne z poprzednikami. Ostatnia sprawa to zgodność z systemami - pod Windows CubeMX działa całkiem dobrze, ale pod Mac OS X, czy Linuksem to już droga przez mękę.

Czym jest pakiet STM32CubeF1?

Pakiet STM32Cube w zamyśle miał dać możliwość pisania programów niezależnie od użytego mikrokonotrolera (oczywiście w ramach STM32). Niestety praktyka jak zwykle wyparła teorię i ST dostarcza różne wersje Cube dla każdej rodziny układów.

Kurs bazuje na STM32F103, więc odpowiednia będzie wersja STM32CubeF1. Na podanej stronie znajdziemy dokumentację oraz samo oprogramowanie. Nie musimy go pobierać! Środowisko zrobi to za nas - zajmiemy się tym w kolejnej części kursu.

Polecam zapoznać się z dokumentacją (jak zawsze). Wstęp z informacją o STM32Cube dla F1 znajdziemy w pliku DB2485: STM32Cube embedded software for STM32F1 series including HAL.

Warto zwrócić uwagę na opis składowych pakietu STM32CubeF1:

Opis składowych pakietu STM32CubeF1.

Dopiero teraz widać ile tak naprawdę rzeczy zawiera się w STM32Cube. W skrócie:

  • Application level demonstrations - to programy przykładowe, bardzo przydatne do nauki, ale niekoniecznie potrzebne w samej bibliotece
  • Utilities - tutaj widzimy CMSIS, na której cała reszta bazuje
  • Middleware level - to zupełnie niezależne biblioteki i programy, które ST nam "wciska".
  • BSP - przydatne w dużych projektach wykorzystujących różne płytki. Tutaj przechowuje się kod charakterystyczny dla danego modelu
  • HAL - właściwa biblioteka STM32Cube HAL
  • LL - to jeszcze jedna biblioteka dla STM32, skrót oznacza low-level

Okazuje się, że decydując się na STM32Cube "niechcący" pobraliśmy strasznie dużo rzeczy. To trochę jak w "Misiu" - kawa i szarlotka są obowiązkowe dla każdego klienta. Na szczęście nie musimy wszystkiego używać. Tym co nas teraz interesuje jest STM32Cube HAL oraz CMSIS ponieważ HAL na niej bazuje.

Jak widzimy, właściwy Cube HAL to biblioteka zajmująca podobne miejsce do StdPeriph używanej poprzednio. Niedługo przekonamy się, że po wyrzuceniu niechcianych wodotrysków obie biblioteki są bardzo podobne.

Więcej o układach STM32F103

W poprzedniej edycji kursu opisaliśmy miejsce naszego mikrokontrolera wśród innych produktów firmy ST. Od tego czasu przybyły nowe "silniejsze" modele, głównie z rodziny F7 i H7, jednak większość opisu pozostała aktualna. Osoby, które nie korzystały z poprzedniego kursu powinny przeczytać część z podstawowymi informacjami o STM32 z serii o StdPeriph..

Podsumowanie wprowadzenia

W tej części zapoznaliśmy się pakietem STM32Cube, wiemy czym jest STM32CubeMX oraz jakie jest miejsce bibliteki STM32Cube HAL w całym pakiecie oprogramowania dostarczanym przez firmę ST. W kolejnych częściach kursu zobaczymy jak wykorzystać Cube HAL do pisania własnych programów.

Oczywiście osoby zainteresowane biblioteką LL, czy innymi elementami pakietu (np. systemem FreeRTOS) mogą z nich korzystać w swoich programach. Kurs koncentruje się na bibliotece HAL jako podstawie, ale każdy może wykorzystać zdobytą wiedzę w wybrany przez siebie sposób.

Nawigacja kursu

Autor kursu: Piotr Bugalski
Testy, grafiki: Piotr Adamczyk
Redakcja: Damian Szymański

arm, cortex, kurs, kursSTM32F1HAL, mikrokontrolery, programowanie, ST, stm32

Komentarze

Komentarze do tego wpisu są dostępne na forum: