Skocz do zawartości
Komentator

Kurs STM32 - #3 - Płytka Nucleo, konfiguracja środowiska

Pomocna odpowiedź

nox, a próbowałeś wyczyścić projekt przed kompilacją?

Udostępnij ten post


Link to post
Share on other sites
nox, a próbowałeś wyczyścić projekt przed kompilacją?

Usunąłem cały katalog workspace,
Utworzyłem nowy projekt o nazwie proba4,
Usunąłem z Project explorer katalog - utilities,
Usunąłem wpis z main.c - #include "stm32f1xx_nucleo.h"

Zapisałem zmiany,
Wcisnąłem debug,

Nadal niestety nadal wyrzuca mi ten warning.

Sterowanie diodą i przyciskiem, które jest opisane w dalszej części kursu działa mi normalnie, więc ten warning nie wpływa na działanie kodu, ale ciekaw jestem co go powoduje.

Wygląda jakby coś jeszcze się odnosiło się do tego pliku poza #include "stm32f1xx_nucleo.h"

Udostępnij ten post


Link to post
Share on other sites

W ustawieniach projektu zostało odwołanie do usuniętej ścieżki. Nie ma to wpływu na program, ale jak ktoś można pozbyć się warning-u usuwając nieaktualny wpis.

Udostępnij ten post


Link to post
Share on other sites
W ustawieniach projektu zostało odwołanie do usuniętej ścieżki. Nie ma to wpływu na program, ale jak ktoś można pozbyć się warning-u usuwając nieaktualny wpis.

Usunięcie ścieżki z includes nie rozwiązało do końca problemu,
okazało się, że wpis był jeszcze w MCU GCC Linker -> General,

Po usunięciu tych dwóch wpisów warning nie jest już pokazywany.

Dziękuję za pomoc w rozwiązaniu problemu.

Udostępnij ten post


Link to post
Share on other sites

Witam. 🙂

To moja pierwsza wiadomość na Waszym forum, więc witam Was wszystkich. 🙂

Testowałem na Ubuntu 14.04 oraz NUCLEO-F103RB i działa bardzo ładnie. Tylko trzeba odinstalować wszystko co było z dystrybucją - jest stare i tylko przeszkadza.

OpenOCD: http://sourceforge.net/projects/openocd/files/openocd/0.9.0/

Kompilator: https://launchpad.net/gcc-arm-embedded/+download

Java: najlepiej oryginalna http://java.com/en/

Eclipse: najnowsza wersja, z CDT http://www.eclipse.org/downloads/

STM32 plugin: http://gnuarmeclipse.sourceforge.net/updates

Plugin sam pobiera bibliotekę StdPeriph.

Nie trzeba nic więcej niż pod Windę wiedzieć o programowaniu ARM-ów, datasheet-y też nie będą niezbędne.

Przepraszam, miałbyś może trochę czasu i napisałbyś odrobinę więcej na temat instalacji i użycia tego wszystkiego razem na pingwinku?

Płytka, którą posiadam, to STM32F103RBT6 - z zestawu polecanego w Waszym kursie. 🙂

Wydaje mi się, że coś źle zrobiłem - chociaż zainstalowałem sobie Javę, Eclipse i kompilator. Do tego OpenOCD oraz STM32 plugin, tak więc wszystko, co wypisałeś.

Jednak nie potrafię powiedzieć Eclipse, żeby wgrał mi program do pamięci. Byłbym bardzo wdzięczny, gdybyś napisał w jaki sposób należy skonfigurować nowy projekt i jak należy "uruchomić program na płytce".

Dodam że za pomocą samego OpenOCD z poziomu terminala mogę wgrać skompilowany plik *.hex na płytkę i nawet działa, ale jednak chciałbym żeby nie trzeba było za każdą zmianą w kodzie przełączać się do terminala - IDE z definicji ma być przecież dla programisty wygodne. 😉

Proszę wybaczyć i mnie poprawić, jeśli napisałem jakieś głupoty.

Pozdrawiam serdecznie. 🙂

EDIT:

Udało mi się samodzielnie dojść do rozwiązania, chociaż kosztowało mnie to trochę nerwów. 😋

Dla potomnych: w "Run Configurations" należy wybrać z panelu po lewej "GDB OpenOCD Debugging", następnie w prawym panelu wybrać zakładkę "Debugger" i tam w polu "Config options" wpisać:

-f XXX

gdzie XXX to ścieżka do pliku konfiguracyjnego Waszej płytki, dostarczanego przez OpenOCD.

U mnie wygląda to tak:

-f /home/draghan/Projekty/STM32/openocd-0.9.0-source/tcl/board/st_nucleo_f103rb.cfg

Pozdrawiam ponownie. 🙂

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

draghan, dziękuję, że podzieliłeś się rozwiązaniem swojego problemu. Na pewno komuś się jeszcze przyda 🙂

Udostępnij ten post


Link to post
Share on other sites

Nie ma sprawy. 🙂 Mam nadzieję, że się przyda.

Swoją drogą Eclipse to okropnie niewygodne i mało wydajne IDE. Jak będę miał wolną chwilę, muszę trochę posiedzieć nad zrozumieniem całego procesu kompilacji i wgrywania na płytkę - może uda mi się zaprząc do tego inne IDE, np. Code::Blocks.

Jeśli uda mi się coś zmajstrować, na pewno się z Wami podzielę. 😉

Pozdrawiam. 🙂

Udostępnij ten post


Link to post
Share on other sites

draghan, w takim razie czekamy na informacje 🙂

Udostępnij ten post


Link to post
Share on other sites

Witam ponownie. 🙂

Oto instrukcja konfiguracji środowiska Code::Blocks do programowania µC na płytce STM32 Nucleo F103RB - czyli przedstawianej w tym kursie. 🙂

Przygotowując ten materiał, próbowałem posiłkować się przeróżnymi źródłami, żeby móc samodzielnie napisać odpowiednią konfigurację środowiska, jednak zawsze coś nie grało jak należy. W końcu postanowiłem wesprzeć się projektem generowanym w AC6 Tools - System Worbench for STM32 - oto efekty. 🙂

Nie biorę odpowiedzialności za ewentualne szkody, powstałe w wyniku wykonania tej instrukcji, jednak u mnie jak dotąd wszystko śmiga bez zająknięcia. 😉

Jak pisałem dwa posty wyżej, Eclipse IDE jest mało intuicyjne, w dodatku dość ociężałe z uwagi na język, w którym zostało napisane (Java, który wymaga uruchomienia maszyny wirtualnej). Dlatego postanowiłem przenieść konfigurację z AC6 Tools - System Worbench for STM32 do Code::Blocks, które jest wygodne, proste i szybkie - poza tym posiada kilka featurów ułatwiających znacznie pracę programistyczną, jak SmartSense (podpowiadanie składni) czy A-style Source Formatter (konfigurowalne porządkowanie formatowania kodu).

Na chwilę obecną można wygodnie programować, kompilować oraz wgrywać skompilowany program na płytkę - natomiast nie zajmowałem się debuggerem programowym. Jeśli ktoś z Was wie cokolwiek na ten temat, proszę pisać. 🙂

Środowisko konfigurowałem na systemie GNU/Linux Mint 17.2 KDE (kernel 3.13.11.7). Jestem pewny, że na MS Windows konfiguracja będzie przebiegać w sposób zbliżony, jeśli nie identycznie. Jeśli będę miał chwilę czasu, to sprawdzę czy nie występują jakieś problemy.

Lista potrzebnego oprogramowania:

1) Bohater tego wpisu, czyli IDE Code::Blocks. Można pobrać stąd, aczkolwiek niedługo powinno pojawić się nowe wydanie.

2) Zestaw kompilatorów GCC ARM Embedded (pobieramy stąd wersje skompilowane, odpowiednie dla naszego systemu operacyjnego).

3) Oprogramowanie OpenOCD do obsługi programatora, dostarczonego nam razem z płytką Nucleo, które pobieramy stąd .

4) Paczuszka z projektem C::B, o której powiem za moment słów kilka. Znajduje się w załącznikach do tego posta.

5) Ewentualny interfejs do obsługi portu szeregowego, np. CuteCom. To tylko jako uzupełnienie dla dalszej części kursu, gdzie pracujemy z interfejsem UART - nie jest niezbędne do programowania. 😉

Wspomniany projekt zawiera niezmienione pliki, które wygenerował AC6 Tools - System Worbench for STM32 i których użycie zalecane jest w niniejszym kursie. Pobierając i używając tych plików, zgadzasz się z odpowiednimi licencjami, którymi sygnowane są pliki. Ponadto plik projektu zawiera konfigurację kompilatorów, niezbędną do prawidłowego ich funkcjonowania oraz instrukcje "post-build", służące do konwersji pliku *.elf na plik *.hex. Jeśli zamierzasz korzystać z innej płytki, niż opisywana w kursie, dwa razy się zastanów! Opcje kompilatora - jak i wszystkie pliki projektu - dedykowane są wyłącznie dla STM32 Nucleo F103RB!

Tak naprawdę, Code::Blocks konfigurujemy w trzech prostych krokach - dodajemy kompilatory, dodajemy jedną zmienną globalną oraz tworzymy narzędzie do wgrywania oprogramowania na płytkę. Konfiguracja procesu kompilacji jest już zapisana w przygotowanym przeze mnie pliku projektu.

Lista kroków konfiguracji:

Wstępnie należy przygotować wszystkie niezbędne pliki.

0. Najlepiej najpierw utworzyć sobie katalog na pliki niezbędne do programowania STM-ki gdzieś w łatwo dostępnym miejscu - trzeba będzie potem odnieść się do dwóch katalogów przy konfiguracji C::B. U mnie to jest katalog /home/draghan/Projekty/STM32/Tools/

1. Instalacja Code::Blocks. Oczywista sprawa, nie muszę chyba komentować. 😉

2. Wypakowanie GCC ARM Embedded - najlepiej do podkatalogu utworzonego w punkcie zerowym folderu - u mnie jest to /home/draghan/Projekty/STM32/Tools/gcc-arm-none-eabi/.

3. Wypakowanie OpenOCD - jak wyżej, z tym że do osobnego podkatalogu. Na moim komputerze OpenOCD znajduje się w /home/draghan/Projekty/STM32/Tools/openocd/.

Teraz część konfiguracyjna. Włączamy program Code::Blocks.

4. Dodanie ścieżki do kompilatorów GCC ARM Embedded w C::B.

4.1. Wchodzimy w menu Settings/Compiler.

4.2. Następnie wybieramy z listy rozwijanej "Selected compiler" opcję "GNU GCC Compiler for ARM".

4.3. Przechodzimy na kartę Toolchain executables i w polu "Compiler's instalation directory" podajemy ścieżkę do katalogu, gdzie wypakowaliśmy GCC ARM Embedded.

UWAGA - nie korzystamy z opcji Auto-detect. Należy też zwrócić uwagę, żeby w podanym katalogu znajdował się podkatalog "bin", "lib" i "share". U mnie dodatkowo oprócz tych trzech znajduje się katalog "arm-none-eabi", w którym również są podkatalogi "bin", "lib" oraz "share" - to nie ten folder wskazujemy! U mnie podana ścieżka wygląda tak: /home/draghan/Projekty/STM32/Tools/gcc-arm-none-eabi/.

A tak wygląda zawartość danego katalogu:

4.4. Poprawiamy nazwy binarek, ponieważ domyślne mają inny przedrostek, niż w naszym zestawie.

Odpowienio powinny to być:

C compiler:

arm-none-eabi-gcc

C++ compiler:

arm-none-eabi-g++

Linker for dynamic libs:

arm-none-eabi-g++

Linker for static libs:

arm-none-eabi-ar

Poprawnie wypełnione pola:

4.5. Można zaznaczyć jeszcze debugger, ale konfiguracją debuggera się nie zajmowałem.

4.6. Zatwierdzamy wszystko przyciskiem "OK".

5. Dodanie ścieżki do OpenOCD w sekcji Global variables. Ma to na celu ułatwienie dodania narzędzia wgrywającego program na naszą płytkę - w skrypcie kilka razy występuje ścieżka dostępu do tego katalogu, dlatego zdecydowałem się na umieszczenie jej w zmiennych IDE - dla Waszej wygody, żeby nie było potrzeby edytowania tego skryptu. 🙂

5.1. Wybieramy z menu Settings/Global variables.

5.2. Klikamy na przycisk "New" w linii "Current variable".

5.3. Jako nazwę podajemy

openocd

To bardzo ważne, żeby nadać ją dokładnie taką, gdyż inaczej zepsujemy odwołania w skrypcie narzędzia wgrywającego.

5.4. W polu base wpisujemy ścieżkę do katalogu, gdzie wypakowaliśmy OpenOCD. Bardzo ważne jest, żeby w tym katalogu znajdowały się foldery "bin" oraz "scripts". U mnie ścieżka wygląda tak: /home/draghan/Projekty/STM32/Tools/openocd/.

5.5. Z prawej strony, w sekcji User-defined fields wpisujemy parę wartości:

board

i

st_nucleo_f103rb.cfg

Jeśli używamy innej płytki, należy dobrać odpowiedni plik z katalogu OpenOCD/scripts/board.

5.6. Zamykamy przyciskiem "Close".

6. Ostatnim krokiem jest dodanie narzędzia, które pozwoli nam wygodnie wgrywać skompilowany program na płytkę.

6.1. Wybieramy z menu Tools/Configure tools...

6.2. Klikamy przycisk "Add".

6.3. Nadajemy dowolną nazwę, u mnie jest to "Run on Nucleo"

6.4. W pola wklejamy odpowiednio:

6.4.1. Executable:

$(#openocd.bin)/openocd

6.4.2. Parameters:

-f $(#openocd)/scripts/board/$(#openocd.board)  -c init -c targets -c "reset halt" -c "flash write_image erase $(TARGET_OUTPUT_DIR)/$(TARGET_OUTPUT_BASENAME).hex" -c "reset run" -c shutdown

6.4.3. Pole Working Directory pozostawiamy puste.

6.5. Spośród "Launching options" wybieramy pierwszą - "Launch tool in a new console window (...)".

6.6. Zatwierdzamy wszystko "OK".

Teraz środowisko powinno być skonfigurowane. Żeby przetestować, wypakujmy gdzieś pliki projektowe i uruchommy plik z rozszerzeniem *.cbp. Po lewej stronie widzimy drzewo plików naszego projektu. W gałęzi sources/src znajduje się plik main.c, gdzie znajduje się funkcja main().

Żeby skompilować projekt, wybieramy z menu build/build lub wciskamy kombinację klawiszy ctrl+F9. Dostępny jest również skrót na pasku szybkiego dostępu, który pozwoli nam zbudować program jednym kliknięciem (u mnie jest odrobinę zmieniona konfiguracja zarówno wyglądu edytora, jak i toolbarów, więc u Was może wyglądać to odrobinę inaczej).

Po zbudowaniu programu w okienku na dole ("Build log") pojawi się informacja o pomyślnym (bądź nie) zbudowaniu programu.

W razie niepowodzenia wyświetlona jest tam lista błędów. Kliknięcie na czerwonej linii z komunikatem błędu przeniesie nas w edytorze do miejsca jego wystąpienia.

Pomyślnie zbudowany program wgrywamy na płytkę (uprzednio ją podłączając do komputera) przez wybranie z menu Tools/XXX, gdzie XXX to nazwa, jaką nadaliśmy w punkcie 7.3.

Zostanie otworzone nowe okienko konsoli, w którym OpenOCD przekaże nam komunikaty, dotyczące procesu wgrywania.

Jeszcze mała wskazówka ode mnie, dotycząca korzystania z podglądu portu komunikacyjnego UART w systemie Linux. W moim systemie, port tworzony przez płytkę znajduje się w /dev/ttyACM0.

Pozdrawiam serdecznie.

ac6NucleoF103RB.rar

Udostępnij ten post


Link to post
Share on other sites

Witam współforumowiczów.

Świetny kurs, dzięki niemu odkopałem i w końcu użyłem dawno już kupione płytki nucleo.

O ile zrozumiałe dla mnie jest wszystko co zostało zawarte w tym kursie to brakuje mi wyjaśnienia jednej rzeczy. Jak z pomocą tego IDE wgrać skompilowany program w wersji 'Release'?

Udostępnij ten post


Link to post
Share on other sites

Aby skompilować można wybrać "Release" z rozwijanych opcji na pasku narzędziowym lub wybrać z menu Project -> Build Configurations -> Set Active -> Release.

Żeby wgrać trzeba postępować tak jak przy wersji Debug, czyli wybrać Run Configurations i utworzyć nową konfigurację uruchamiania, tym razem z plikiem wynikowym z podkatalogu Release. Samo programowanie odbywa się przez SWD, więc identycznie jak dla Debug.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Elvis, dzięki za wyjaśnienie.

Na obecna chwilę z racji tego ze pracuję na linuksie prowadzi to do błędu:

invalid command name "program Release/Program001.elf verify reset exit"

Trafiłem na wątek związany z tym błędem: http://www.openstm32.org/forumthread1167

Jak zapewniają twórcy Ac6, poprawka pojawi się przy najbliższej aktualizacji.

Udostępnij ten post


Link to post
Share on other sites

Witam

Mam pewien problem ,posiadam płytkę STM32f429I-Disco i Windows 7 widzi ją tylko jako programator ST-Link ,zainstalowałem sterowniki i nie ma portu COM

Udostępnij ten post


Link to post
Share on other sites

dominico12, witaj na forum 🙂

Kurs dotyczyły płytki ze układem F103 i tylko o takich staramy się rozmawiać w komentarzach, aby nie mieszać początkującym. Jeśli masz problem z innym zestawem załóż proszę osobny temat na forum (wybierając przy tym odpowiedni dział).

Udostępnij ten post


Link to post
Share on other sites

Witam.

Mam problem. Mianowicie podczas próby utworzenia pierwszego projektu... nie dzieje się nic. Postępuje zgodnie z instrukcjami podanymi w kursie i poajwia mi się puste okno po zakończeniu twozenia nowego projektu. Nie pomaga przeinstalowanie programu, zmiana katalogu dla workbench... Wie ktoś z Was co może być przyczyną?

Ok już wiem dlaczego tak się działo. Wystarczyło poszperać w opcjach 🙂

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...