TT#6 STM32CubeProgrammer CLI – programowanie STM32 z konsoli
Jednym z narzędzi niezbędnych do obsługi mikrokontrolerów STM32 jest aplikacja dedykowana do programowania układów i ich konfiguracji, czyli STM32CubeProgrammer. Ma wygodny i dość intuicyjny interfejs użytkownika, ale przede wszystkim pozwala wykonać wszystkie niezbędne operacje na mikrokontrolerach na etapie rozwoju projektu – zaprogramować układ, odczytać z niego pamięć, czy skonfigurować Option Bytes.
Zdarzają się jednak sytuacje, kiedy chcielibyśmy w specyficzny dla naszego projektu sposób wykonać operacje na pamięci mikrokontrolera – zaprogramować konkretne obszary pamięci, wykorzystać External Loader, a dodatkowo te operacje zautomatyzować.
Do tego typu zastosowań firma ST udostępnia dwie możliwości. Jedną z nich jest wykorzystanie STM32CubeProgrammer C++ API, czyli biblioteki do obsługi programatora oraz implementacji programu ładującego dla trybów bootloader-a. Jest to rozwiązanie bardziej elastyczne, jednak wymaga od programisty więcej pracy przy tworzeniu aplikacji dedykowanej na PC.
Drugim rozwiązaniem jest wykorzystanie STM32CubeProgrammer CLI, czyli zestawu poleceń obsługujących programowanie STM32 wywoływanych z poziomu konsoli. Daje mniejsze możliwości niż API, ale jest dużo prostsze w użyciu – wystarczy, że zainstalujemy STM32CubeProgrammer i wywołamy w konsoli odpowiednie komendy.
Podstawowe pytanie brzmi – jakie to komendy i jak je poprawnie wywołać? Odpowiedź znajdziemy oczywiście w dokumentacji do STM32CubeProgrammer w rozdziale „3. STM32CubeProgrammer command line interface (CLI) for MCUs„. Znajdziemy w niej listę wszystkich dostępnych poleceń oraz przykłady użycia. Podstawowe informacje dotyczące obsługi STM32CubeProgrammer CLI znajdziemy również poprzez wywołanie polecenia STM32_Programmer_CLI.exe w konsoli.
Uwaga! Przykłady obsługi STM32CubeProgrammer CLI będą przedstawione dla systemu Windows.
Na początku warto wspomnieć o tym, w jaki sposób poprawnie wywołać aplikację konsolową STM32CubeProgrammer CLI. Aby z niej skorzystać, z poziomu konsoli musimy przejść do folderu z zainstalowaną aplikacją.
cd C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin
Teraz wywołując polecenie STM32_Programmer_CLI.exe powinien pokazać się nam spis poleceń z opisem. W przypadku, gdy z STM32CubeProgrammer CLI będziemy korzystali częściej, warto dodać ścieżkę do zmiennych środowiskowych systemu, aby wywoływać komendy z dowolnego miejsca.
Jeżeli poprawnie wywołaliśmy aplikację, możemy wykonać np. komendę connect.
STM32_Programmer_CLI.exe -c port=swd
Mając podłączony programator (np. zestaw Nucleo), otrzymamy informację o jego parametrach.
Aplikacja CLI daje nam naprawdę duże możliwości. Możemy łączyć się z konkretnym programatorem (za pomocą numeru seryjnego), w różnych trybach reset-u, prędkościach transmisji czy protokołach komunikacyjnych. W zasadzie możemy wykonać za jej pomocą wszystko to, co oferuje STM32CubeProgrammer, a nawet sporo więcej.
Przykładowa komenda służąca do programowania mikrokontrolera będzie wyglądała następująco.
STM32_Programmer_CLI.exe -c port=swd -w D:\STM32L476RG_Software.bin 0x08000000
Wyczyścić pamięć mikrokontrolera możemy za pomocą polecenia erase.
STM32_Programmer_CLI.exe -c port=swd -e all
Odczyt pamięci realizujemy natomiast poleceniem read (przykład to odczytanie 16 bajtów z adresu 0x08000000 i zapisanie do pliku).
STM32_Programmer_CLI.exe -c port=swd -r 0x08000000 16 D:\STM32L476RG_Software_Read.bin
Jak możemy zauważyć, obsługa STM32CubeProgrammer z poziomu konsoli jest stosunkowo prosta. Wymaga zachowania odpowiedniej struktury poleceń, ale umożliwia w prosty sposób wywołanie procesu programowania i konfiguracji STM32 z własnej aplikacji. Jest to przydatne narzędzie, o którym warto pamiętać np. przy automatyzacji procesu produkcji.
przydatne jeszcze kasowanie pamięci flash przy założonym RDP1:
STM32_Programmer_CLI -c port=swd -rdu -e All