STM32CubeIDE – pierwszy projekt

Na początku przygody z programowaniem powinniśmy zapoznać się ze środowiskiem, w jakim będziemy pracować. Jak opisałem w artykule „Ekosystem STM32”, aktualnie rekomendowanym i najnowszym środowiskiem do programowania mikrokontrolerów STM32 jest STM32CubeIDE. Czas zatem zapoznać się z tym narzędziem i stworzyć swój pierwszy projekt.

Pierwszym krokiem jest pobranie i instalacja STM32CubeIDE. Środowisko możemy pobrać ze strony www.st.com. Przechodzimy na dół, do obszaru pobierania, gdzie wybieramy wersję odpowiednią dla naszego systemu i klikamy „Get Software”. Akceptujemy warunki licencji (STM32CubeIDE jest na wolnej licencji i można go używać także do celów komercyjnych) i pojawia się okno pobierania.

Niestety, ST wprowadziło system pobierania plików, w którym za każdym razem, gdy chcemy pobrać jakąś aplikację lub dokumentację, musimy się zalogować (automatycznie włącza się pobieranie, wygodniejsza wersja, jeśli pobieramy pliki dosyć często) lub wpisać swoje dane w formularzu (dostajemy link do pobierania na e-mail).

Stworzenie projektu

Po pobraniu aplikacji uruchamiamy instalację i przechodzimy kilka prostych kroków instalując przy okazji sterowniki do programatora ST-Link. Kiedy przebrniemy przez proces instalacji, pojawi się nam okno startowe środowiska.

Jak możemy zauważyć, mamy cztery możliwości rozpoczęcia pracy z STM32CubeIDE:

  • Utworzenie nowego projektu
  • Utworzenie nowego projektu na podstawie pliku .ioc (wygenerowanego w STM32CubeMX)
  • Importowanie projektu stworzonego w TrueStudio lub SW4STM32
  • Importowanie jednego z przykładów

Na potrzeby stworzenia nowego projektu wybieramy „Start new STM32 project” . Pojawia się przed nami okno wyboru układu, z którym będziemy pracować.

Do wyboru mamy cztery zakładki:

  • MCU/MPU Selector – wybór konkretnego mikrokontrolera lub mikroprocesora – konfiguracja domyślna będzie całkowicie pusta
  • Board Selector – wybór zestawu deweloperskiego – będziemy mieli możliwość wyboru domyślnej konfiguracji dla płytki np. podłączonych LED, przycisków czy wyświetlacza
  • Example Selector – wybór konfiguracji pod konkretny przykład dostępny w bazie – mając dedykowany do przykładu zestaw będziemy mogli wygenerować gotowy projekt z pełną konfiguracją
  • Cross Selector – wybór na podstawie mikrokontrolera innego producenta – aplikacja wybierze nam najbardziej zbliżony układ

Dzisiaj w przykładzie będziemy używali zestawu Nucleo-L476RG, dlatego przechodzimy do zakładki „Board Selector” i wybieramy ten zestaw. Pojawi nam się okno z podstawowymi informacjami dotyczącymi płytki oraz szybki dostęp do dokumentacji. Aby przejść dalej, klikamy „Next” na dole okna.

Następnie wpisujemy nazwę projektu (w moim przypadku „Pierwszy projekt”). Po kliknięciu w „Finish„, otrzymamy zapytanie, czy chcemy, aby pojawiła nam się domyślna konfiguracja układów peryferyjnych wykorzystywanych na płytce, czy pusty projekt. Aby otrzymać wygenerowaną konfigurację domyślną, klikamy „Yes„. Przy tworzeniu pierwszego projektu możemy być zapytani o to, czy chcemy, aby pojawiło się teraz okno konfiguracji. Klikamy „Yes” (możemy też zaznaczyć pole „Remember my decision„, aby nie być ponownie o to pytanym w przyszłości) i przechodzimy do okna konfiguratora. Jeżeli nie mamy pobranych bibliotek dedykowanych do wybranego układu, teraz środowisko rozpocznie pobieranie plików i ich rozpakowanie.

Konfiguracja

Po przejściu przez wszystkie etapy tworzenia projektu otrzymujemy okno konfiguratora mikrokontrolera.

W centralnym widoku okna ukazał nam się mikrokontroler. Oznaczone są na nim wszystkie wyprowadzania zgodnie z ich fizycznym rozkładem. Wybraliśmy wstępną konfigurację dla płytki Nucleo-L476RG, dlatego część pinów jest już skonfigurowana. Układy peryferyjne możemy wybierać na dwa sposoby:

  • kliknięcie w konkretny pin i wybór jego funkcji
  • wybór interfejsu/funkcji z drabinki dostępnych układów peryferyjnych (oznaczonej żółtym kolorem)

Po wybraniu peryferiów, których będziemy używali, ich dokładna konfiguracja jest dostępna w oknie po przełączeniu na zakładkę „System view” w obszarze oznaczonym kolorem zielonym lub po wybraniu interfejsu z drabinki w polu żółtym.

W polu pomarańczowym zaznaczone są zakładki główne konfiguratora:

  • Pinout & Configuration – konfiguracja wyjść mikrokontrolera
  • Clock Configuration – konfiguracja zegarów mikrokontrolera
  • Project Manager – ustawienia projektu (zmiana nazwy, wybór wersji bibliotek)
  • Tools – narzędzie do badania poboru prądu przez mikrokontroler

Przy realizacji pierwszego projektu wykorzystamy diodę LED umieszczoną na płytce i domyślną konfigurację mikrokontrolera. Z tego względu możemy przejść do generowania kodu i uruchomienia projektu na płytce. W celu wywołania generowania kodu wchodzimy w zakładkę „Project” środowiska i wybieramy „Generate Code” (funkcja dostępna też pod skrótem klawiszowym Alt+K).

Uruchomienie

Środowisko STM32CubeIDE oraz wbudowany konfigurator wykorzystują biblioteki HAL Library i to przy ich użyciu wygenerowany zostanie nasz projekt. Jeżeli wszystkie kroki przeszliśmy pozytywnie, przed nami powinien pojawić się ekran środowiska z wygenerowanym kodem programu.

Po lewej stronie (kolor pomarańczowy) widoczne mamy okno eksploratora projektu. Tutaj możemy przeglądać nasze pliki. Plikiem głównym, od którego startuje program jest plik „main.c”, który zawiera funkcję główną main(). Po wygenerowaniu plików przy pomocy konfiguratora nasz projekt powinien być w pełni przygotowany do wgrania na płytkę deweloperską – jest to wielka zaleta konfiguratora, nie musimy szukać różnych ustawień projektu i podpinać plików nagłówkowych z bibliotekami. Aby umieścić program w mikrokontrolerze, klikamy ikonę budowania projektu (kolor zielony). Jeżeli wszystko przebiegło jak należy, w konsoli powinniśmy otrzymać komunikat o zakończeniu build-u. Następnie klikamy w strzałkę (kolor żółty). Przy pierwszym uruchomieniu projektu otworzy się nam okno ustawień. Domyślne ustawienia powinny pozwolić na wgranie wsadu na mikrokontroler. Klikamy zatem „Apply” i potem „OK”.

W konsoli powinien pojawić się komunikat o poprawnym wgraniu programu.

Jeżeli nasz programator ST-Link ma nieaktualny firmware, może pojawić się okno aktualizacji. Aby wgrać nową wersję oprogramowania, należy wybrać programator, wprowadzić go w tryb aktualizacji („Open in update mode”) i zaktualizować klikając „Upgrade„.

Modyfikacja

Po wgraniu domyślnie wygenerowanego projektu na naszej płytce nic się nie zadzieje. O powodzeniu operacji informuje nas jedynie komunikat w konsoli. Aby sprawdzić, czy nasza płytka pracuje prawidłowo, uruchomimy na niej krótki program migający diodą. W przypadku projektów generowanych przez konfigurator należy pamiętać o tym, aby nasz kod umieszczać w odpowiednich miejscach wygenerowanych plików. Zaznaczone są one przez znaczniki USER CODE BEGIN i USER CODE END. Zachowanie tej zasady pozwoli uniknąć problemów w przyszłości, kiedy ponowne generowanie projektu np. po dodaniu konfiguracji kolejnego interfejsu, mogłoby usunąć wcześniej napisany kod.

W pętli while dodajemy zatem linijki programu odpowiedzialne za miganie diodą z odstępem 1000 ms (1s) między zmianą stanu. Należy pamiętać, aby umieścić je przed znacznikiem USER CODE BEGIN 2 oraz USER CODE END WHILE.

/* USER CODE BEGIN 2 */
  uint32_t time_tick = HAL_GetTick();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  if((HAL_GetTick() - time_tick) > 1000)
	  {
		  HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
                  time_tick = HAL_GetTick();
	  }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

Teraz zapisujemy projekt i ponownie wykonujemy operację budowania projektu (Build) oraz wgrywamy go na płytkę. Jeżeli wszystko przebiegło pomyślnie, dioda LD2 na płytce powinna zacząć migać.

Podsumowanie

Środowisko to podstawowe narzędzie każdego programisty. Zapoznanie się z jego funkcjami pozwala efektywnie pracować z kodem i sprawniej tworzyć programy. STM32CubeIDE to dość rozbudowane (jak na mikrokontrolery) środowisko, które pozwala nam szybko i bez żmudnej konfiguracji stworzyć projekt i wgrać go na płytkę. Choć przedstawione w artykule informację to tylko niezbędne podstawy, dzięki nim stworzyliśmy swój pierwszy program i uruchomiliśmy go na zestawie deweloperskim. Mam nadzieję, że to będzie dobry wstęp do dalszej zabawy z mikrokontrolerami STM32.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *