Jak opracować program do wykrywania STM32 w systemie Linux? [Zamknięte]

26

Mam płytę odkrywczą STM32 i chciałbym móc ją programować w systemie Linux.

Jak najłatwiej to zrobić?

Gordon Williams
źródło
Zainstalowałem Codesourcery na LinuxhUbuntu i trochę na sobie: PATH jest w porządku, ale program nie pojawia się na desce rozdzielczej ani w centrum oprogramowania. Być może to Ubuntu zmieniłbym jakoś, ale nie wiem jak. Jeśli masz pomysł, napisz. Dziękuję Ci. Tom
Tom Rert
1
@TomRitzmann PeterJ ma rację, nie używaj odpowiedzi do zadawania pytań. Co więcej, problemy z oprogramowaniem są tutaj nie na temat, SuperUser jest właściwym miejscem.
clabacchio

Odpowiedzi:

12

Prostym sposobem na zaprogramowanie i debugowanie płyty STM32 Discovery (lub dowolnego STM32 używającego programatora ST-Link) jest skorzystanie z projektu „stlink” https://github.com/texane/stlink (jednak OpenOCD wydaje się również popularny)

Płyty ST Nucleo pojawiają się również jako urządzenia flash USB, więc nawet nie potrzebujesz stlink - po prostu skopiuj do nich plik.

Istnieje kilka dobrych stron na temat programowania dla wykrywania STM32 w systemie Linux, takich jak http://gpio.kaltpost.de/?page_id=131 i http://torrentula.to.funpic.de/2012/03/22/ setup-up-the-stm32f4-arm-development-toolchain / i http://jethomson.wordpress.com/2011/11/17/getting-started-with-the-stm32f4discovery-in-linux/

Jednak najbardziej użyteczny był ostatni link. Pokazuje, jak budować projekty STM32 w obecnej postaci - Jedyną zmianą jest dodanie jego Makefile, co wydaje się idealnym rozwiązaniem.

W najnowszych wersjach Ubuntu istnieje pakiet, który można zainstalować, który zawiera kompilator ARM:

sudo apt-get install gcc-arm-none-eabi

Zauważ, że wszystkie procesory są nieco inne. STM32F0..4 będzie potrzebował różnych flag kompilatora, a skrypt linkera będzie nieco inny dla każdego (choć tylko ze względu na zmienione rozmiary pamięci RAM i Flash).

Edycja: jeśli chcesz naprawdę szybko zacząć, możesz także zajrzeć na stronę http://www.espruino.com . Jest to interpreter JavaScript, który działa na samym STM32, więc po zainstalowaniu „stlink”, aby można było flashować na płycie, możesz po prostu pobrać obraz z tej strony, flashować go, a następnie połączyć się z aplikacją terminalową i rozpocząć programowanie.

Gordon Williams
źródło
Oto lista obsługiwanych płyt STM32x Discovery firmy OpenOCD: github.com/openrisc/openOCD/tree/master/tcl/board (wyszukaj „odkrycie” za pomocą przeglądarki)
rbaleksandar
8

Jeśli bardziej interesują Cię edytory tekstu i pliki Makefile zamiast korzystania z GUI, możesz:

  • Zainstaluj zestaw narzędzi zapewniający arm-none-eabi-gcc. Na Archlinuxie potrzebujesz społeczności / arm-none-eabi-binutils, arm-none-eabi-gcc i arm-none-eabi-newlib (i arm-none-eabi-gdb, jeśli chcesz debugować) - wszystko od społeczności repo lub https://launchpad.net/gcc-arm-embedded (który można znaleźć w AUR Archlinux jako gcc-arm-none-eabi-bin).
  • Zdecyduj, czy i jakiej biblioteki chcesz użyć, aby uzyskać dostęp do sprzętu. Z góry mojej głowy są trzy typowe opcje:
    1. Żaden. Piszesz wszystko od zera. Niezalecane dla początkujących.
    2. STM32Cube : AC lib dostarczone przez sam ST.
    3. Libopencm3 : biblioteka typu open source obsługująca dość wiele rdzeni kory różnych producentów.
    4. STM32PLUS : A C ++ lib. Nie mogę jednak powiedzieć więcej na ten temat, ponieważ go nie testowałem.
  • Utwórz lub skopiuj swój pierwszy projekt.
    1. Bez biblioteki lib napisz własny plik makefile, skrypt linkera, kod startowy i uruchom prosty plik makefile. Powodzenia ;)
    2. Z STM32Cube: Pobierz i zainstaluj STM32CubeMX . Po rozpakowaniu plik * .exe jest w rzeczywistości tylko plikiem java i można go uruchomić za pomocą „java -jar filename.exe”. Instalacja wymaga sudo. Po zakończeniu utwórz projekt i wygeneruj kod dla „Truestudio”. To powinno dać ci punkt wyjścia ze skryptem linkera, kodem startowym, trywialną funkcją główną (i makefile, jeśli dobrze pamiętam). W rzeczywistości, nawet jeśli nie korzystasz z biblioteki STM32Cube, STM32CubeMX doskonale nadaje się do obliczania wartości drzewa zegara i sprawdzania poprawności, czy możesz skonfigurować układ tak, jak myślisz.
    3. Z libopencm3: Pobierz przykłady libopencm3 , znajdź przykład pasujący do twojej planszy i użyj go jako punktu wyjścia. Przykłady powinny być gotowe do uruchomienia. Po prostu wpisz „make”. Następnie wykorzystaj ten przykład jako punkt wyjścia do własnego rozwoju.
    4. Z STM32Plus: Nie wiem. Przepraszam.
  • Doprowadź swój projekt do tablicy. Albo użyj

    1. Seryjny bootloader: stm32flash działa świetnie.
    2. Port debugowania: Możesz użyć openocd, aby porozmawiać z adapterem debugującym znajdującym się na płycie. Openocd jest świetny, ale dokumentacja nie zawsze jest najlepsza. W razie wątpliwości dołącz do kanału irc openocd. Ludzie tam są naprawdę mili.
  • Kod w edytorze tekstu i użyj narzędzi wiersza polecenia. Ten samouczek zawiera wiele wskazówek.

Cieszyć się

mox
źródło
5

Eclipse , GCC i OpenOCD to jeden zestaw narzędzi. Zalecane przez EMCU-IT i nie ma dodatkowych informacji tutaj . Strony te również zalecają korzystanie z RTOS, takiego jak FreeRTOS.org , ale to zależy od ciebie.

Aby uzyskać pomoc w kompilowaniu przykładów STM32 w systemie Linux, przejdź tutaj . Ten link wskazuje plik makefile dla przykładów, które można wywołać

git clone git://github.com/snowcap-electronics/stm32-examples.git
cd stm32-examples
wget http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32_f105-07_f2xx_usb-host-device_lib.zip
unzip stm32_f105-07_f2xx_usb-host-device_lib.zip

Udokumentowano również kilka drobnych poprawek kodu, ale większość projektu powinna działać

make CROSS_COMPILE=/path/to/arm-2011.03/bin/arm-none-eabi-
embedded.kyle
źródło
1
Dzięki! Nie widziałem wcześniej tych linków. Dziwi mnie, że gdzieś nie ma bardziej definitywnego przewodnika, ponieważ różne tablice odkryć mają subtelnie różne flagi kompilacji.
Gordon Williams
Tak, ST stworzył bardzo tanią płytę i rozdał je, tysiące z nich, a sam STM32 jest niesamowitym układem, aż do F4, ale programowanie ich jest ogromnym bólem w tyłek. Ich sterowniki są niezwykle słabo udokumentowane i nie są dobrze nazwane, a znalezienie IDE i łańcucha narzędzi, które grają dobrze razem za darmo, nie jest zbyt łatwe.
hak8or
1

Odniosłem sukces w https://github.com/JorgeAparicio/bareCortexM (patrz także powiązane posty na blogu). Uwielbiam to, że mogę po prostu przejść krok po kroku przez kod lub przeglądać pamięć urządzenia zamiast wstawiać w kodzie instrukcje debugowania lub zgadywać, co dzieje się w układzie.

Projekt bareCortexM jest szablonem Eclipse do programowania z serią Cortex M, zwłaszcza STM32, w C ++ bez systemu operacyjnego. Jest skonfigurowany do korzystania z openocd, gcc i ma skrypty do flashowania i debugowania na kilku celach, w tym na niektórych płytach odkrywania. Postępując zgodnie z instrukcjami i instalując zalecane wtyczki Eclipse, mogłem używać mojego STM32VLDISCOVERY na Ubuntu.

Zgodnie z zaleceniami połączyłem szablon Eclipse z biblioteką szablonów libstm32pp C ++ tego samego autora dla sprzętu STM32. libstm32pp zapewnia zaskakująco kompletne zastąpienie CMSIS i często krytykowanych sterowników STM32 modelem programowania, który pozwala wypowiadać się jak PB10::setMode(gpio::cr::GP_OPEN_DRAIN_2MHZ)i / PINB::setLow()lub w PINB::setHigh()większości skompilowany inline ze względu na szablony C ++. Konfiguracja jest bardzo ładna.

współpracownik
źródło
Nie polecam już nieobsługiwanego bareCortexM; sprawdź stm32plus na andybrown.me.uk/wk
joeforker
Problem z takimi sterownikami urządzeń polega na tym, że są one nieefektywne. Dla odpowiednich szybkich sterowników urządzeń, które nie marnują cykli procesora, potrzebujesz pod nimi rtos, abyś mógł właściwie zaplanować.
Martin,
0

Może przydałby się komuś: mój krótki artykuł (po rosyjsku) i prosty projekt . Wszystko w systemie Linux i bez zbędnych rzeczy, takich jak zaćmienie.

Biblioteki zostały pobrane ze strony internetowej ST, makefile - z jednego z wielu przykładów GPL w Internecie.

Eddy_Em
źródło
0

Oto niewielki, ale innowacyjny projekt szablonu umożliwiający szybkie rozpoczęcie korzystania z płyty STM32F0 Discovery w systemie Linux lub dowolnym innym systemie operacyjnym:

https://github.com/dobromyslov/stm32f0-chibios-template

Pamiętaj, że projekt wykorzystuje ChibiOS - darmowy system operacyjny czasu rzeczywistego typu open source, więc nie jest to od samego początku implementacja gołej kości.

Wiaczesław Dobromysłow
źródło
0

Używam vim i arm-none-eabi-gcc wraz ze wszystkimi zwykłymi narzędziami programistycznymi dla Linuksa. Linux jest moim zdaniem zdecydowanie lepszym środowiskiem programistycznym do pracy osadzonej. Do debugowania używam stlink i arm-none-eabi-gdb.

Jaskółka oknówka
źródło
0

Rozważ platformio . Jeśli w ogóle nie podoba ci się wiersz poleceń, przekonasz się, że platformio znacznie ułatwia proces programowania. pio initmożna użyć do skonfigurowania projektu. pio runwykorzystuje zestaw narzędzi do kompilacji. pio run --target uploadwysyła kod do urządzenia. Platformio dba o pobieranie komponentów łańcucha narzędzi, bibliotek itp. W razie potrzeby.

dat
źródło