wtorek, 6 grudnia 2022

STM32 programowanie Bare Metal - przygotowanie środowiska STM32 CUBE IDE.

Zdaję sobie sprawę, że najprostsze rzeczy mogą sprawiać problem początkującym adeptom programowania Bare Metal czyli bez użycia bibliotek HAL. Dlatego ten artykuł poświęcę zagadnieniu konfiguracji środowiska STM32 CUBE IDE pod względem ergonomii i pokażę jak utworzyć szablon projektu do takiego stylu programowania. Nauka programowania z użyciem rejestrów umożliwia w efektywny sposób bliższe poznanie MCU i jego możliwości . Na pewno taka wiedza będzie miała większą wagę niż sama znajomość biblioteki HAL. Dlatego pomimo regresu w umiejętności posługiwania się rejestrami wśród osób zajmujących się hobbystycznie programowaniem MCU, gorąco zachęcam do podjęcia tego trudu.

Zakładam, że STM32 CUBE IDE mamy ściągnięte ze strony STM-a. Pierwszą czynnością po instalacji będzie zmiana wyglądu środowiska. Nie chcemy wypalać oczu na białym tle, dlatego zmienimy to za pomocą wtyczki tak aby tło było ciemne i nie raziło oczu. W tym celu wchodzimy w menu górnym Help --> Eclipse Marketplace i wybieramy zakładkę Popular. Wyszukujemy wtyczkę o nazwie Darkest Dark Theme with DevStyle i instalujemy ją.


Jest wiele szablonów do wybrania w opcjach wtyczki, możemy sobie wybrać np. szablon IntelliJ IDE DARK


Powyższa metoda z użyciem wtyczki jest najszybsza i najprostsza. Druga metoda to dostosowanie ustawień w opcjach STM32 CUBE IDE. Którą też sobie przeanalizujmy.

W menu Window -> Preferences -> General -> Apperance wybieramy opcję Dark.


Wyłączamy opcję podświetlenia : Window -> Preferences -> General -> Editors -> Text Editors -> C/C++ Occurrences i opcja Text as odznaczona.


Kolejny krok to Window -> Preferences -> C/C++ -> Editor i zaznaczamy opcję Inactive code highlight


I to w zasadzie wszystko jeśli chodzi o poprawę ergonomii środowiska w zakresie kolorystyki. Teraz pokażę jak przygotować szablon projektu do programowania Bare Metal bez HAL-a.

Stwórzmy sobie taki szablon dla STM32G071KBT6, nadajmy mu nazwę STM32G0_BareMetalSzablon. W tym celu wybieramy z menu opcję File -> New -> STM32 Project


W selektorze wyszukujemy i wybieramy MCU dla którego tworzymy projekt w moim przypadku to STM32G071KBT6


W kolejnym okienku podajemy nazwę projektu i zaznaczamy opcję Empty.


Wygenerowany projekt wygląda jak poniżej :


Niestety projekt ten nie zawiera plików CMISIS i pliku nagłówkowego dla naszego MCU, zatem nie jest kompletny. STM nie ułatwia nam tutaj zadania a wręcz stawia nam takie małe kłody aby odwieść nas od zamiaru programowania bez użycia HAL. Takie samo zmuszanie ludzi do jedynie słusznej idei  jak np. masz jeździć w przyszłości tylko samochodem elektrycznym i to jeszcze bez praw własności na niego, tylko w usłudze mobilności.

Skąd zatem wziąć brakujące w projekcie pliki. Będziemy sprytni i przechytrzymy STM-a. Pliki podbierzemy z projektu utworzonego dla HAL. Tworzę zatem analogicznie projekt ale w okienku gdzie zaznaczyliśmy opcję Empty wybieramy opcję STM32Cube :


Czyli po prostu tworzymy zwykły "Halowski" projekt. Zamykamy okienko konfiguratora CUBE MX. Otwieramy drzewo katalogów projektu HAL i za pomocą copy/paste przenosimy cały katalog Drivers z projektu HAL do naszego projektu bez HAL. Z przekopiowanego katalogu Drivers usuwamy katalog STM32G0xx_HAL_Driver. Cała struktura projektu bez HAL powinna wyglądać jak na obrazku poniżej :



Kolejnym krokiem jest ustawienie ścieżek do skopiowanego katalogu Drivers , tak aby pliki w nim zawarte były widoczne w projekcie. Robimy to np. tak File -> Properties -> C/C++ General -> Paths and Symbols i dodajemy dwie ścieżki z katalogiem Drivers  . Całość powinna wyglądać tak jak poniżej na obrazku :


Jeśli potem dodajemy do projektu jakieś swoje katalogi z plikami nagłówkowymi, to katalogi te należy również podać w ustawieniach projektu tak jak powyżej .
Ostatnią czynnością jest otworzenie  pliku stm32g0xx.h i odnalezienie fragmentu :
#elif defined(STM32G071xx) . 



Kopiujemy do schowka to co w nawiasie jest czyli STM32G071xx , wchodzimy do opcji projektu File -> Properties -> C/C++ General -> Paths and Symbols i w zakładce Symbols dodajemy skopiowaną do schowka nazwę :


Stwórzmy sobie własny plik main.c , m.in "zainkludujmy" plik nagłówkowy naszego MCU i skompilujmy projekt :


Jeśli wszystko zrobiliśmy poprawnie kompilator nie zgłosi nam , żadnych błędów. 

Od tej chwili możemy przystąpić do programowania bez narzutu
HAL i cieszyć się wolnością :). Kolejne projekty możemy tworzyć za pomocą kopiowania szablonu i zmiany jego nazwy , oczywiście jeśli posługujemy się w nich tym samym modelem MCU.


Pozdrawiam

PICmajster
picmajster.blog@gmail.com

Brak komentarzy:

Prześlij komentarz