Witam
Jak że jest to mój pierwszy wpis tego typu to proszę o wyrozumiałość.
Słowem wstępu.
Chciał bym się z wami podzielić kilkoma moimi doświadczeniami w programowaniu mikrokontrolarów STM32F103 i STM32L152 (STMDISCOVERY) za pomocą otwartej biblioteki libopencm3 ( http://www.libopencm3.org ). Ja pracuję tylko na Ubuntu 64bit. Jako toolchain używam Summon ARM (link do instalacji : http://gnuarmeclipse.livius.net/wiki/Summon_ARM_toolchain_installation_on_Linux) , w wgrywam za pomocą SWD z STM32Ldiscovery.
Cytuję za stroną „Projekt libopencm3 ma na celu stworzenie wolnej, otwartej (LGPL v3) biblioteki oprogramowania dla różnych mikrokontrolerów ARM opartych o rdzenie: Cortex-M0(+)/M3/M4 takich jak: ST STM32, Ti Tiva and Stellaris, NXP LPC 11xx, 13xx, 15xx, 17xx parts, Atmel SAM3, Energy Micro EFM32 i innych.”
Projekt libopencm3 nie jest systemem operacyjnym. Jest biblioteką która ma podobne zadanie jak STM32F10x_StdPeriph_Lib. Nie uwalnia nas czytania datasheet czy manual, nie posiada sterowników wyższego poziomu (ale posiada bardzo przyjemne wsparcie USB dla STM32F103 i STM32L152 co przetestowałem osobiście).
Instalacja libopencm3 jest bardzo prosta (o ile mamy poprawnie zainstalowany toolchain).
Ponieważ korzystam z różnych kompilatorów na różne platformy to aby mieć porządek stworzyłem sobie prosty skrypt .sh:
następnie w terminalu przed kompilacją biblioteki (jak i przykładów) ustawienia wczytuję poleceniem:
Następnie pobieramy źródła biblioteki:
wchodzimy do katalogu
i kompilujemy:
I w zasadzie jeśli chodzi o bibliotekę to to już wszystko.
Teraz wypadało by jakiś miganie diodami przetestować.
Programiści libopencm3 mają osobne repozytoriom GIT dla przykładów: libopencm3-examples.
Otwieramy nowy terminal.
Tradycyjnie wczytujemy skrypt z ustawieniami.
Pobieramy źródła przykładowych kodów:
Teraz jest bardzo ważne. Należy w katalogu z przykładami (tam gdzie jest plik Makefile i README) stworzyć dowiązanie symboliczne do katalogu libopencm3 (usunąć istniejące).
Potem już zwyczajnie wystarczy
Jeśli wszystko przebiegło poprawnie to mamy zrobione gotowe przekłady kodów na wiele platform.
Są tam również przykłady obsługi USB. Minusem przykładowych kodów z repozytorum jest to że każdy przekład „mieści” się w jednym pliku źródłowym. Do testowanie jest to może i OK ale dla poważniejszych zastosowań to już nie wystarczy, dlatego przerobiłem plik Makefile tak że kompiluję sobie kod z kilku plików źródłowych. Przerobiłem go już dosyć dawno i nie pamiętam ja czyich plikach się opierałem.
Gdyby ktoś potrzebował to załączam te pliki.
O ile przebrnęliście do tego miejsca i wszystko wam działa to super.
Przykładowo ja wgrywam firmware za pomocą openocd poprzez stm32ldiscovery:
Tyle na temat opisu biblioteki libopencm3i przykładów.
Wyświetlacz
Na Ebayu można kupić bardzo tanio kolorowe wyświetlacze 2.2" 240*320 SPI TFT LCD Module Display ILI9341 ( http://www.ebay.pl/itm/2-2-inch-240-320-SPI-T...LI9341-For-51-AVR-STM32-ARM-PIC-/321150097254 )
Na zdjęciu widać programator STM32LDISCOVERY, płytkę prototypową z STM32F103, wyświetlacz ILI9341 oraz podpięty analizator logiczny bez którego bym tego nie uruchomił.
Mi udało się przeportować kod z dla arduino na bibliotekę libopencm3. Opierałem się głównie na kodach gmtii/ili9341-arduino ( link: https://github.com/gmtii/ili9341-arduino ), przeniosłem tylko to co mi było potrzebne więc nie ma jeszcze wszystkich funkcji ale wyświetlacz ładnie działa.
Niestety pomimo wielu godzin spędzonych próbując uruchomić ten wyświetlacz na STM32LDISCOVERY nie udało się mi odczytać poprawnej odpowiedzi tego wyświetlacza, natomiast gdy przeniosłem kod na STM32F103 na moją płytkę prototypową to praktycznie ruszyło do razu.
Gdyby ktoś potrzebował to dołączam również kod to sterowania ILI9341.
W pliku SPI_ILI9341 mam również obsługę UART wraz z stdio więc działa funkcje printf ale za to kod ma około 32kb
Jak że jest to mój pierwszy wpis tego typu to proszę o wyrozumiałość.
Słowem wstępu.
Chciał bym się z wami podzielić kilkoma moimi doświadczeniami w programowaniu mikrokontrolarów STM32F103 i STM32L152 (STMDISCOVERY) za pomocą otwartej biblioteki libopencm3 ( http://www.libopencm3.org ). Ja pracuję tylko na Ubuntu 64bit. Jako toolchain używam Summon ARM (link do instalacji : http://gnuarmeclipse.livius.net/wiki/Summon_ARM_toolchain_installation_on_Linux) , w wgrywam za pomocą SWD z STM32Ldiscovery.
Cytuję za stroną „Projekt libopencm3 ma na celu stworzenie wolnej, otwartej (LGPL v3) biblioteki oprogramowania dla różnych mikrokontrolerów ARM opartych o rdzenie: Cortex-M0(+)/M3/M4 takich jak: ST STM32, Ti Tiva and Stellaris, NXP LPC 11xx, 13xx, 15xx, 17xx parts, Atmel SAM3, Energy Micro EFM32 i innych.”
Projekt libopencm3 nie jest systemem operacyjnym. Jest biblioteką która ma podobne zadanie jak STM32F10x_StdPeriph_Lib. Nie uwalnia nas czytania datasheet czy manual, nie posiada sterowników wyższego poziomu (ale posiada bardzo przyjemne wsparcie USB dla STM32F103 i STM32L152 co przetestowałem osobiście).
Instalacja libopencm3 jest bardzo prosta (o ile mamy poprawnie zainstalowany toolchain).
Ponieważ korzystam z różnych kompilatorów na różne platformy to aby mieć porządek stworzyłem sobie prosty skrypt .sh:
Code: bash
następnie w terminalu przed kompilacją biblioteki (jak i przykładów) ustawienia wczytuję poleceniem:
Code: bash
Następnie pobieramy źródła biblioteki:
Code:
git clone git://github.com/libopencm3/libopencm3.git
wchodzimy do katalogu
Code:
cd libopencm3
i kompilujemy:
Code:
make
I w zasadzie jeśli chodzi o bibliotekę to to już wszystko.
Teraz wypadało by jakiś miganie diodami przetestować.
Programiści libopencm3 mają osobne repozytoriom GIT dla przykładów: libopencm3-examples.
Otwieramy nowy terminal.
Tradycyjnie wczytujemy skrypt z ustawieniami.
Pobieramy źródła przykładowych kodów:
Code:
git clone git://github.com/libopencm3/libopencm3-examples.git
Teraz jest bardzo ważne. Należy w katalogu z przykładami (tam gdzie jest plik Makefile i README) stworzyć dowiązanie symboliczne do katalogu libopencm3 (usunąć istniejące).
Potem już zwyczajnie wystarczy
Code:
make
Jeśli wszystko przebiegło poprawnie to mamy zrobione gotowe przekłady kodów na wiele platform.
Są tam również przykłady obsługi USB. Minusem przykładowych kodów z repozytorum jest to że każdy przekład „mieści” się w jednym pliku źródłowym. Do testowanie jest to może i OK ale dla poważniejszych zastosowań to już nie wystarczy, dlatego przerobiłem plik Makefile tak że kompiluję sobie kod z kilku plików źródłowych. Przerobiłem go już dosyć dawno i nie pamiętam ja czyich plikach się opierałem.
Gdyby ktoś potrzebował to załączam te pliki.
O ile przebrnęliście do tego miejsca i wszystko wam działa to super.
Przykładowo ja wgrywam firmware za pomocą openocd poprzez stm32ldiscovery:
Code:
sudo openocd -f interface/stlink-v2.cfg -f target/stm32f1x_stlink.cfg -c "init" -c "reset halt" -c "flash write_image erase SPI_ILI9341.elf" -c "reset run" -c "shutdown"
Tyle na temat opisu biblioteki libopencm3i przykładów.
Wyświetlacz
Na Ebayu można kupić bardzo tanio kolorowe wyświetlacze 2.2" 240*320 SPI TFT LCD Module Display ILI9341 ( http://www.ebay.pl/itm/2-2-inch-240-320-SPI-T...LI9341-For-51-AVR-STM32-ARM-PIC-/321150097254 )


Na zdjęciu widać programator STM32LDISCOVERY, płytkę prototypową z STM32F103, wyświetlacz ILI9341 oraz podpięty analizator logiczny bez którego bym tego nie uruchomił.
Mi udało się przeportować kod z dla arduino na bibliotekę libopencm3. Opierałem się głównie na kodach gmtii/ili9341-arduino ( link: https://github.com/gmtii/ili9341-arduino ), przeniosłem tylko to co mi było potrzebne więc nie ma jeszcze wszystkich funkcji ale wyświetlacz ładnie działa.
Niestety pomimo wielu godzin spędzonych próbując uruchomić ten wyświetlacz na STM32LDISCOVERY nie udało się mi odczytać poprawnej odpowiedzi tego wyświetlacza, natomiast gdy przeniosłem kod na STM32F103 na moją płytkę prototypową to praktycznie ruszyło do razu.
Gdyby ktoś potrzebował to dołączam również kod to sterowania ILI9341.
W pliku SPI_ILI9341 mam również obsługę UART wraz z stdio więc działa funkcje printf ale za to kod ma około 32kb
