Na początku przypominam, że to wpis z dłuższej serii i za pierwszym razem zalecane jest przejrzenie wszystkich części.

  • wpis 1 - budowanie HelloWorld w C na GitLabie
  • wpis 2 - Dodatkowe informacje na temat skryptów budujących
  • wpis 3 - CubeIDE - przygotowanie testowego projektu
  • wpis 4 - CubeIDE - przygotowanie obrazu dockera do budowania
  • wpis 5 - CubeIDE - budowanie projektu
  • wpis 6 - rozbudowanie skryptów budujących
  • wpis 7 - automatyczne testy jednostkowe
  • wpis 8 - raport pokrycia kodu testami

CubeIDE

Ten wpis będzie bardzo krótki - chodzi w nim o to, że tak naprawdę w projekcie CubeIDE nie trzeba robić nic dodatkowego, ale jest kilka uwag o których warto wspomnieć, które mogą trochę ułatwić pracę.

Zakładanie projektu i repozytorium

Projekt założyłem na platformę STM32F4 - wykorzystam płytkę STM32F4Discovery.

Pierwsza “porada” - polecam nazywać projekty w CubeIDE i repozytoria na nie w taki sam sposób (duże i małe litery mają znaczenie) - dzięki temu później w skryptach będzie można użyć zmiennej środowiskowej z nazwą - czyli skrypty budujące będą bardziej uniwersalne.

Zainicjalizowane puste repozytorium:

obr

Nazwa to: “stm32cubeIDE_build” - link: https://gitlab.com/embedownik/stm32cubeIDE_build

Wygenerowanie projektu w CubeIDE - praktycznie standardowo (użyta wersja CubeIDE to 1.6.1) - nazwa taka sama jak repozytorium:

obr

W kolejnym oknie należy wybrać wersję bilbiotek HAL - tu jest jedna opcja, której nie rozumiem - jeśli generujemy projekt dla CubeIDE to zawsze jest wyszarzona opcja skopiowania wszystkich bibliotek. W moim workflow powoduje to pewne problemy - nie wszystkie biblioteki są “wyklikiwalne” - niektóre mają konfigurację zrobiąną w środku i wtedy potrzebują np. bibliotek HALa do DMA, a DMA nie jest wyklikane - czyli nie znajdzie sie w katalogu z HALem. Obejście tego problemu to “ręczne” jednorazowe skopiowanie do projektu wszystkich plików z biblioteki HAL i dodanie ich do kontroli wersji - póżniej podczas regeneracji projektu CubeIDE będzie uparcie je kasował - ale łatwo je przywrócić komendami GITa.

Celowo nie wybrano opcji z używaniem bibliotek jako referencji - trzymanie ich w projekcie ułatwi budowanie na CI/CD.

W projekcie skonfigurowano tylko 4 diodki:

obr

Struktura katalogów - klasycznie dla CubeIDE:

obr

W pliku main.c dodano tylko miganie:

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

      HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);
      HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
      HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
      HAL_GPIO_TogglePin(LD4_GPIO_Port, LD4_Pin);

      HAL_Delay(300);
  }
  /* USER CODE END 3 */

Inicjalizacja repozytorium po przejściu do katalogu z projektem to komendy dokładnie takie jakie podpowiada GitLab po utworzeniu pustego repozytorium:

git init .
git remote add origin git@gitlab.com:embedownik/stm32cubeIDE_build.git

W pierwszych commitach polecam dodać plik .gitignore:

Debug/
Release/

aby mieć pewność, że pliki wynikowe nie znajdą się w repozytorium.

Dzięki temu teraz można zrobić:

git add -A

dodajać wszystkie pliki projektu.

W testowym projekcie będzie tylko blink - więc w tym przypadku nie będę kopiował wszystkich plików HALa.

Podsumowanie

W tym wpisie wygenerowano w STM32CubeIDE testowy projekt, który będzie budowany na CICD.