Programowanie mikrokontrolera STM32 i debugowanie z SW4STM32

Pierwszy program został napisany i sprawdzony. Kompiluje się bez błędów. W jaki sposób zaprogramować mikrokontroler STM32 i przystąpić do debugowania programu z poziomu IDE (SW4STM32)?

Jako przykładowy program wykorzystam ten, który przywita nas ze światem migając diodą LED. Włączamy SW4STM32, odnajdujemy projekt, przechodzimy do pliku "main.c' ("Application/User/main.c"). Kompilujemy projekt klikając ikonę "młotka", jeżeli nie ma żadnych błędów można przystąpić do zaprogramowania mikrokontrolera. W górnym pasku znajduje się ikonka "robaka" i  obok niej jest "strzałka", która rozwija nieduże menu. Klikamy na "strzałkę". Z rozwiniętego menu należy wybrać "Debug Configurations...".

Położenie strzałki
Rys. 1 Położenie strzałki

Otworzy się okienko jak na rysunku 2. Teraz należy dodać konfigurację debugera, z której będziemy korzystać przy programowaniu i debugowaniu mikrokontrolera. Dodanie nowej konfiguracji odbywa się poprzez dwukrotne kliknięcie lewym klawiszem myszy na "Ac6 STM32 Debugging". W polu "Name" możemy zmienić nazwę przeprowadzonej konfiguracji. Następnie zapisujemy zmiany klikając "Apply". Naciśnięcie przycisku "Debug" spowoduje, że mikrokontroler zostanie zaprogramowany i przełączymy się do okna debugera. Naciskamy "Debug".

Konfiguracja debugera Ac6 STM32
Rys. 2 Konfiguracja debugera Ac6 STM32

Ekran powinien wyglądać podobnie jak na rysunku 3. Domyślnie ustawiona jest pierwsza, tymczasowa pułapka ("breakpoint") na funkcji inicjalizującej konfigurację mikrokontrolera (HAL_Init()). Program jest zatrzymany. Wznowienie pracy odbywa się poprzez naciśnięcie strzałki zaznaczonej na rysunku 3. Po wzniowieniu programu zielona dioda LED powinna migać.

Ekran początkowy i uruchomienie programu
Rys. 3 Ekran początkowy i uruchomienie programu

Uruchomiony program sygnalizuje swój stan wyświetlając "Thread #1 (Running: User Request)" i użyta przed chwilą "strzałka" staje się nieaktywna. Program można zatrzymać w dowolnym momencie klikając na symbol "pauzy" lub zakończyć go klikając na czerwony kwadrat oznaczony "Terminate". Zatrzymany program zawsze można wznowić ponownie klikając na symbol "strzałki". 

Sygnalizacja pracy programu i możliwość zatrzymania/zakończenia pracy
Rys. 4 Sygnalizacja pracy programu i możliwość zatrzymania/zakończenia pracy

Debugger jest bardzo przydatnym i rozbudowanym narzędziem. Daje możliwość podglądu zmiennych podczas pracy programu, zmiany ich wartości, podgląd rejestrów i jeszcze więcej. Można analizować program "krok po kroku". Pułapki ("breakpoint") można ustawiać w dowolnym miejscu kodu. Należy kliknąć dwukrotnie na polu obok numeru linii, w której program powinien się zatrzymać. Pułapka sygnalizowana jest niebieskim znacznikiem. Tymczasowa pułapka została ustawiona w linii 70 (rysunek 3). W kolejnych artykułach pojawią się różne zmienne, które będą widoczne w zakładce "Variables".