STM32CubeMX + TrueSTUDIO – graficzny konfigurator STM32 krok-po-kroku (1)
Bezpłatny pakiet narzędziowy Atollic TrueSTUDIO for STM32 zapewnia programistom kompletne wsparcie w zakresie edycji, kompilacji i debugowania kodu. Jego atrakcyjnym i przyspieszającym prace uzupełnieniem jest pakiet konfiguracyjny STM32CubeMX, którego możliwości i sposób obsługi przedstawiamy w artykule.
Zintegrowany w TrueSTUDIO kreator projektu na podstawie informacji o typie mikrokontrolera lub modułu ewaluacyjnego potrafi stworzyć „szkielet”, który potem programista może uzupełniać o własne procedury. Wygenerowany projekt zawiera katalog Libraries, w którym są umieszczane kody źródłowe biblioteki obsługujących układy peryferyjne wybranego mikrokontrolera. Dzięki temu mogliśmy napisać nasz prosty program konfigurujący linie portów, a potem sterujący linią podłączoną do diody LED.
Konfigurator umieścił też w projekcie ważny plik system_stm32F4xx.c, zawierający procedurę SystemInit () konfigurującą zegar systemowy i określającą relokację kodu programu (pamięć Flash mikrokontrolera, lub zewnętrzna pamięć RAM).
Rys. 1. Pliki generowane przez kreator projektu
Mając do dyspozycji te procedury można budować swoją bardziej lub mniej złożoną aplikację i nie trzeba wszystkiego pisać od podstaw. Ale nawet przy takim wsparciu musimy pokonać żmudny etap konfigurowania układów peryferyjnych. Układów, które są coraz bardziej wydajne i elastyczne ale również coraz trudniejsze w konfigurowaniu i obsłudze.
W naszym projekcie został domyślnie ustawiony układ taktowania mikrokontrolera. Żeby zobaczyć jak jest taktowany i ewentualnie to zmodyfikować dla swoich potrzeb, trzeba dokładnie zapoznać się z dokumentacją mikrokontrolera w części opisującej budowę układu taktowania i przeanalizować plik system_stm32f4xx.c. To wszystko zajmuje sporo czasu. Żeby przyspieszyć pracę programistów wbudowuje się w pakiety IDE graficzne konfiguratory układów peryferyjnych. Konfiguratory pozwalają szybko skonfigurować układy peryferyjne bez żmudnego wczytywania się w opisy bitów rejestrów konfiguracyjnych.
Firma STMicroelectronics dostarcza użytkownikom swoich mikrokontrolerów rozbudowany system wsparcia projektanta składający się z dwu podstawowych elementów:
- Graficznego środowiska STM32CubeMX generującego kod w języku C na podstawie projektu konfiguracji układów peryferyjnych.
- Obszernej platformy programowej dostarczanej osobno dla każdej z rodzin mikrokontrolerów i zawierającą warstwę STM32Cube HAL zapewniającą możliwość konfiguracji i obsługi peryferii bez szczegółowej znajomości sprzętu (warstwa abstrakcji) , oraz kompatybilne z tą warstwą komponenty programowe middleware takie jak RTOS, stos USB, stos TCP/IP i biblioteka graficzna.
Pakiet TrueSTUDIO for STM32 w wersji instalacyjnej nie ma wbudowanego konfiguratora, ale ponieważ jest oparty o Eclipse, to ma możliwość instalowania wtyczek (plug-in). Jedną z takich wtyczek jest STM32CubeMX.
Integracja Atollic TRUEStudio for STM32 z STMCubeMX
Zaczynamy od pobrania ze strony ST spakowanej wtyczki – rysunek 2. Pobranie będzie wymagało założenia konta użytkownika.Rys. 2. Pobranie wtyczki STM32CubeMX
W programie TrueSTUDIO klikamy na Help->Install New Software…. – rysunek 3.
Rys. 3. Instalowanie nowego oprogramowania w TRUE Studio
W kolejnym oknie podajemy ścieżkę dostępu do ściągniętego i zapisanego spakowanego pliku wtyczki – rysunek 4.
Rys. 4. Podanie ścieżki do pliku wtyczki
Jeżeli w podanej lokalizacji jest prawidłowy plik to w następnym oknie pojawi się informacja o wtyczce i jej wersji – rysunek 5.
Rys. 5. Informacja o instalowanej wtyczce
Po zaakceptowaniu warunków licencji rozpoczyna się jej instalowanie, tak jak to zostało pokazane na rysunku 6.
Rys. 6. Akceptacja warunków licencji i instalowanie wtyczki
Po zainstalowaniu zostanie w Atollic TrueSTUDIO automatycznie utworzona nowa perspektywa nazwana STM32CubeMX. Można ja uruchomić przyciskiem paska perspektyw Open Perspective, lub klikając bezpośrednio na ikonę perspektywy – rysunek 7.
a) Wybór perspektywy STM32CubeMX z okna Open Perspective
b) Wybór perspektywy STM32CubeMX z paska pespektyw
Rys. 7. Perspektywa STM32CubeMX w Atollic TrueSTUDIO
Fragment okna TrueSTUDIO z otwartą perspektywą STM32CubeMX został pokazany na rysunku 8.
Rys. 8. TrueSTUDIO z otwartą perspektywą STM32CubeMX
Kolejnym krokiem będzie zainstalowanie biblioteki dla rodziny mikrokontrolerów STM32F4. Dla innych rodzin mikrokontrolerów STM32 będzie to wykonywane analogicznie. Najpierw ze strony STMicroelectronics musimy pobrać spakowany pakiet z bibliotekami dla STM32 – rysunek 9.
Rys. 9. Pobranie biblioteki STM32
Po pobraniu z zapisaniu pliku biblioteki z menu Help wtyczki STM32CubeMX wybieramy Manage embedded software packages – rysunek 10.
Rys. 10. Wybranie instalacji bibliotek dla wtyczki STM32CubeMX
W oknie menadżera wybieramy rodzinę F4 i interesująca nas wersję biblioteki. Ja zainstalowałem najnowszą wersje dostępną w czasie pisania tego artykułu. Być może dla starszych projektów trzeba będzie zainstalować również starszą wersję. Wybór wersji biblioteki i jej instalacja została pokazana na rysunku 11.
Rys. 11. Wybór wersji biblioteki i jej instalacja
Poprawnie zainstalowana biblioteka jest oznaczana w oknie menadżera instalacji zielonym wskaźnikiem – rysunek 12.
Rys. 12. Oznaczenie poprawnie zainstalowanej wersji biblioteki
Atollic TrueSTUDIO i STM32CubeMX – nowy projekt
Praca w konfiguratorze STM32CubeMX opiera się o ideę projektu. Nowy projekt tworzy się z menu File->New project (Ctrl+N) lub klikając na „ikonę” New Project umieszczonej w dolnej części okna wtyczki tak jak to zostało pokazane na rysunku 13. W projekcie są zapisywane wszystkie pliki niezbędne do pracy nad naszym zadaniem.
Rys. 13. Nowy projekt STM32CubeMX
Zapisany projekt można otworzyć w dowolnym momencie z menu STM32CubeMX File->Load Project lub klikając na „ikonę” Load Project umieszczonej w dolnej części okna wtyczki.
Wybór mikrokontrolera STM32 z szerokiej gamy produkowanych rodzin i typów może być dość trudny. Trzeba przeanalizować wiele kryteriów doboru na przykład wydajność, energooszczędność, wyposażenie w układy peryferyjne, typ obudowy, cena itp. Okno kreatora nowego projektu STM32CubeMX umożliwia dobranie mikrokontrolera do własnej aplikacji przez podanie szeregu parametrów wyszukiwania w wyszukiwarce wbudowanej w STM32CubeMX. Zostało to pokazane na rysunku 14.
Rys. 14. Opcje wyszukiwania mikrokontrolera projektu STM32CubeMX
Wyszukiwarka ma dwie zakładki: MCUSelector i Board Selector. W zakładce MCU Selector można szukać symbolu mikrokontrolera, serii, linii w serii i typie obudowy. Możliwe jest tez dobieranie zaawansowane przez podanie zakresu cenowego, ilości linii portów, rozmiaru pamięci EEPROM, Flash i RAM , oraz częstotliwości taktowania. W wyszukiwarce modułów można szukać symbolu z rozwijanej listy wszystkich wspieranych, typu modułu (np. Discovery, Nucleo32, Nucleo64 itp.) i serii mikrokontrolerów. Ja wybrałem zakładkę Board Selector i w niej wyszukałem przez Part Number Search moduł Nucleo F-401RE – rysunek 15.
Rys. 15. Wybór do projektu STM32CubeMX modułu Nucleo-F401RE
W oknie wybranego elementu można uzyskać dostęp do jego właściwości, danych technicznych i dokumentacji tak, jak to pokazano na rysunku 16.
Rys. 16. Okno wybranego elementu z dostępem do informacji
Po wybraniu elementu i ewentualnym zapoznaniu się z danymi technicznymi i innymi dostępnymi informacjami na jego temat przechodzimy do budowania projektu klikając na przycisk Start Project co również pokazano na rysunku 16.
Kreator projektu zapyta się czy inicjalizować wszystkie układy peryferyjne z wartościami domyślnymi. Jeżeli wybierzemy tak, to STM32CubeMX wygeneruje kod inicjalizacyjny dla wszystkich urządzeń peryferyjnych dostępnych dla mikrokontrolera (rysunek 17).
Rys. 17. Inicjalizowanie układów peryferyjnych z domyślnymi ustawieniami
Po tej czynności otwiera się główne okno projektu STM32CubeMX z paskiem narzędziowym i zakładkami (rysunek 18):
- Pinout
- ClockConfiguration
- Configuration
- Power ConsumptionCalculator
Rys. 18. Główne okno projektu z zakładkami, zakładka Pinout
Okno zakładki Pinout zawiera rozwijaną listę Peripherials z nazwami modułów peryferyjnych i okno z narysowaną obudową mikrokontrolera wraz z wyprowadzeniami. Dodatkowo umieszczono tu drugą listę MiddleWares z możliwością dodawania programowych komponentów warstwy wyższej na przykład systemu plików FATFS, czy systemu RTOS. Konfiguruje się tu wstępnie układy peryferyjne i funkcje wyprowadzeń mikrokontrolera. Ponieważ w mikrokontrolerach STM32 można przypisać do jednego wyprowadzenia kilka alternatywnych funkcji, to mogą wystąpić potencjalne konflikty konfiguracji. Kreator projektu STM32CubeMX na początku działania ustawia automatycznie taką konfigurację wyprowadzeń, która najlepiej pasuje do wybranego zestawu układów peryferyjnych. Są również wyszukiwane i odpowiednio oznaczane ewentualne możliwe konflikty konfiguracji.
Symbole układów peryferyjnych są oznaczane kolorami i dodatkowo ikoną ostrzeżenia o potencjalnym konflikcie konfiguracji – żółty trójkąt z wykrzyknikiem. Układy, które mogą być skonfigurowane są oznaczane na czarno, układy już skonfigurowane na zielono, a układy, których nie można skonfigurować na czerwono.
Rys. 19. Potencjalny konflikt w konfiguracji układu peryferyjnego
Na rysunku 19 pokazano oznaczony na czarno symbol przetwornika analogowo cyfrowego z ikoną ostrzeżenia. Układ można włączyć i skonfigurować (kolor czarny) ale nie można wykorzystać wszystkich dostępnych wejść , bo cześć z nich jest już zajęta przez inne układy – w tym przypadku przez linie GPIO PA5, i moduły USART2 oraz SPI2. Został wykryty potencjalny konflikt.
Rys. 20. Zablokowany do konfiguracji układ SPI1
Na rysunku 20 pokazano sytuację, w której nie można włączyć układu SPI1, bo zajęte są linie PA5 i PB3. Symbol SPI1 jest wyświetlany na czerwono.
Układ prawidłowo skonfigurowany ( potencjalnych bez konfliktów) jest na liście Pripherials oznaczony kolorem zielonym bez symbolu ostrzeżenia , ale może być również oznaczony na zielono z ikona ostrzeżenia.
Rys. 21. Przykładowa konfiguracja interfejsu SPI2
Z rozwijanej listy można wybrać dostępne opcje konfiguracji peryferii, a na rysunku obudowy mikrokontrolera pojawia się zaznaczone również na zielono wyprowadzenia konfigurowanego moduły peryferyjnego. Na rysunku 21 pokazano konfigurowanie interfejsu SPI2 z opcjami do wyboru, oraz zaznaczone na zielono wyprowadzenia MISO, MOSI i SCK.
Wyprowadzenie mikrokontrolera może być linią GPIO wejściową , wyjściową, może być wejściem analogowym, lub spełniać rolę wyprowadzenia sygnałów modułów peryferyjnych. Na rysunku obudowy mikrokontrolera są one zaznaczane kolorami:
- Szarym, kiedy do wyprowadzenia nie jest przypisana żadna funkcja
- Zielonym, kiedy do wyprowadzenia jest przypisana i zdefiniowana funkcja ( na przykład sygnał modułu I2C, lub GPIO)
- Pomarańczowym, kiedy do modułu jest przypisana funkcja, ale nie jest aktywna
- Żółtym wyprowadzenia zasilania
Rys. 22. Konfigurowanie wejścia AN9 z poziomu wyprowadzenia PB1
Po najechaniu myszką na wyprowadzenie staje się widoczna rozwijana lista z dostępnymi funkcjami. Można również za jej pomocą konfigurować funkcje wyprowadzeń . Na rysunku 22 pokazano przypisanie do wyprowadzenia PB1 funkcji wejścia analogowego IN8 przetwornika ADC. To przypisanie jest automatycznie przenoszone do konfiguracji listy Peripherials w zakładce Pinout.
Tomasz Jabłoński