Programowanie STM32 pod Linuksem

Napisano dnia 16.08.2014 r. o godzinie 23:21
Autor: Piotr Sperka

Programowanie STM32 pod Linuksem

Wstęp

Od dłuższego czasu przymierzałem się do przeniesienia się z programowaniem mikrokontroerów na Linuksa z którego korzystam przez większość czasu. O ile w przypadku AVRów nie miałem problemu, gdyż wystarcza mi AVR-GCC i Geany (i tak nie posiadam debuggera), to w przypadku STM32 do których posiadam debugger ST-LINK v2 stanąłem przed problemem wyboru odpowiedniego środowiska. Miało ono umożliwiać debugowanie programu oraz podgląd rejestrów mikrokontrolera i przede wszystkim być darmowe. W przypadku Windowsa doskonale swoje zadanie spełniało EmBlocks. Niestety nie jest ono dostępne dla Linuksa, a do Code::Blocks, na którym opiera się EmBlocks, wtyczka umożliwiająca debugowanie mikrokontrolerów STM32 jest płatna. Po wielu poszukiwaniach i przeczytaniu wielu poradników wybór stanął na środowisku Eclipse z dodatkowymi wtyczkami, OpenOCD oraz toolchainie gcc-arm-embedded, z którego korzystałem również pod Windowsem. Całość już działa równie dobrze jak pod Windowsem, dlatego postanowiłem opisać całą instalację i konfigurację, co może być szczególnie pomocne dla początkujących. Zakładam tutaj jednak, że skoro chcemy konfigurować całe IDE pod Linuksem, to znamy chociaż podstawy jego obsługi.

Przygotowania

Na początek musimy wyposażyć się w niezbędne oprogramowanie. Możemy je pobrać bezpośrednio ze stron podanych niżej lub z repozytorium, o ile je tam znajdziemy. Wybór drogi instalacji pozostawiam Wam, natomiast opiszę swoją. Najpierw zainstalowałem OpenOCD umożliwiające debugowanie. W tym wypadku zainstalowałem je z repozytorium w wersji 0.7.0 (Ubuntu 14.04). Jednak, jeżeli ktoś chce, może pobrać źródła aplikacji w najnowszej wersji ze strony http://openocd.sourceforge.net. Następnie pobrałem najnowszą wersję Eclipse (dla programistów C/C++) ze strony https://www.eclipse.org. W moim przypadku była to wersja Luna. Pozostało jeszcze pobrać toolchain, który można znaleźć tu: https://launchpad.net/gcc-arm-embedded. Kolejnym krokiem jest rozpakowanie pobranych paczek z Eclipse oraz toolchainem. Następnie należy wybrać, gdzie chcemy trzymać rozpakowane aplikacje. Można je pozostawić w katalogu domowym, jednak ja zdecydowałem się umieścić je w katalogu /opt. Dlatego też w konsoli przeszedłem do miejsca ich rozpakowanie i przeniosłem poleceniem:

sudo mv /opt/eclipse ./eclipse

Podobnie postąpiłem w przypadku toolchaina. Dodatkowo aby móc uruchomić eclipse bezpośrednio z konsoli poleceniem eclipse (bez podawania dodatkowej ścieżki) utworzyłem link symboliczny:

sudo ln -s /opt/eclipse/eclipse /usr/bin/eclipse

Instalacja wtyczek

Po tych przygotowaniach możemy przejść do konfiguracji środowiska Eclipse. Najpierw instalujemy dwie potrzebne wtyczki: GNU ARM Eclipse oraz EmbSysRegView. Po uruchomieniu Eclipse przechodzimy do instalacji wtyczek poprzez Help → Install New Software. Następnie w polu Work with podajemy adres http://gnuarmeclipse.sourceforge.net/updates i potwierdzamy enterem. Po chwili poniżej powinna pojawić się wtyczka do instalacji. Zaznaczamy ją i przeprowadzamy instalację, podczas której pojawi się komunikat o nie podpisanym oprogramowaniu. Należy go potwierdzić. Po instalacji program zapyta, czy uruchomić go ponownie. Wyrażamy zgodę, a po jego ponownym uruchomieniu powtarzamy proces, z tym, że dla wtyczki EmbSysRegView: http://embsysregview.sourceforge.net/update.

Pierwszy projekt

Teraz przyszedł czas na stworzenie pierwszego projektu. Przechodzimy do File → New → C Project. W nowo otwartym oknie podajemy nazwę projektu oraz wybieramy interesujący nas typ projektu, w moim przypadku był to STM32F2xx C/C++ Project. W następnym kroku wybieramy szczegóły naszego projektu. Moje ustawienia można zobaczyć na screenie poniżej.

Eclipse - nowy projekt dla STM32

W kolejnych krokach można zmienić położenie poszczególnych części projektu oraz ustawienia konfiguracji Debug/Release. Ja zostawiłem domyślne. W ostatnim kroku wybieramy toolchain oraz podajemy ścieżkę do niego. W moim przypadku było to:

GNU Tools for ARM Embedded Processors (arm-none-eabi-gcc)
/opt/gcc-arm-none-eabi/bin

Po kliknięciu Finish powinniśmy ujrzeć gotowy projekt z utworzonym plikiem main.c. W tym momencie, jeżeli wszystko wykonaliśmy poprawnie, projekt powinien dać się skompilować poprzez Project → Build All. W zakładce Console możemy znaleźć przebieg kompilacji, a w zakładce Problems ewentualne ostrzerzenia i błędy.

Eclipse - pierwsza kompilacja dla STM32

Jeżeli kompilacja przebiegła poprawnie (jak na powyższym screenie), możemy przejść do napisania prostego programu i konfiguracji debuggera. W moim przypadku program załączał i wyłączał kolejne diody LED (jest on widoczny na jednym ze screenów).

Konfiguracja debuggera

Przechodzimy do menu Run → Debug Configurations… Klikamy prawym klawiszem myszy na GDB OpenOCD Debugging i następnie na New. Na poniższych screenach zaznaczyłem miejsca w których coś zmieniałem. Należy tylko zaznaczyć, że gdy kompilowaliśmy OpenOCD samemu, należy wpisać odpowiednio poprawione ścieżki. To samo może dotyczyć instalacji z repozytorium ale innych systemów niż Ubuntu. W przypadku pola Debug → Config options należy podać oczywiście ścieżki do plików związanych z naszym debuggerem (w moim przypadku ST-LINK v2) oraz mikrokontrolerem. Na jednym z poniższych screenów są pokazane dostępne w mojej wersji OpenOCD pliki konfiguracyjne. Na koniec klikamy Apply i uruchamiamy debugowanie poprzez kliknięcie Debug. Jeżeli wszystko poszło dobrze aplikacja przełączy się w widok debugowania. Działanie możemy wypróbować np. na pracy krokowej. Na koniec warto wyświetlić okno wtyczki EmbSysRegView poprzez Window → Show View → Other. W nowo otwartym oknie rozwijamy Debug i wybieramy EmbSys Registers. Aby wtyczka działała należy wybrać typ mikrokontrolera z jakim pracujemy poprzez kliknięcie na kwadracik po lewej stronie napisu Error: (…). Aby monitorować wybrany rejestr należy kliknąć na niego dwukrotnie.

Eclipse - konfiguracja debuggera STM32 Eclipse - konfiguracja debuggera STM32 Eclipse - konfiguracja debuggera STM32 OpenOCD - dostępne pliki konfiguracyjne Eclipse - debugowanie STM32

Podsumowanie

Jeżeli wszystko wykonaliśmy poprawnie, otrzymaliśmy w pełni funkcjonalne środowisko umożliwiające programowanie i debugowanie mikrokontrolerów STM32 pod Linuksem całkowicie za darmo. Jedyną dotąd zauważaną przeze mnie niedogodnością może być fakt, że samo środowisko Eclipse jest dość zasobożerne, co może powodować, że praca stanie się uciążliwa na starszych komputerach.