KursyPoradnikiInspirujące DIYForum

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

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

W poprzedniej części kursu zapoznaliśmy się z mikrokontrolerem STM32F103, na którym będą bazowały nasze przykłady.

W tej części zajmiemy się instalacją środowiska oraz poznaniem płytki Nucleo. Wgramy również pierwszy program.

Platforma sprzętowa - NUCLEO-F103RB

Jako podstawa kursu wybrana została płytka NUCLEO-F103RB. Nie powinno być zaskoczeniem, że jest ona wyposażona w mikrokontroler STM32F103RB. Jest to bardzo prosta, ale dzięki temu również relatywnie tania płytka ewaluacyjna. Do jej zalet trzeba zaliczyć m.in.:

  • wbudowany programator zgodny z ST-LINK,
  • konwerter UART - USB,
  • wyprowadzenie praktycznie wszystkich pinów mikrokontrolera,
  • dodatkowe wyprowadzenia zgodne z Arduino.

Jako wadę, albo chociaż pewną niespodziankę można potraktować brak kwarcu na płytce. Typowe zestawy ewaluacyjne (np. Discovery) wyposażone są w 8MHz kwarc, który za pomocą pętli PLL pozwala na taktowanie procesora z częstotliwością 72MHz. Na płytce Nucleo przewidziane są odpowiednie pady, jednak domyślnie elementy nie są lutowane.

Miejsce na kwarc...

Miejsce na kwarc...

Bardzo ciekawy jest podział płytki na dwie części – górna zawiera programator oraz konwerter UART-USB i jak widać łatwo może zostać odłamana. Dzięki temu nawet po zakończeniu kursu będziemy mogli wykorzystać tą część płytki w przyszłych konstrukcjach. Programator oraz konwerter to bardzo przydatne narzędzia.

Część płytki będąca m.in. programatorem.

Część płytki będąca m.in. programatorem.

Niezbędna dokumentacja

Zacznijmy od dokumentacji. Więcej informacji o płytce Nucleo-F103RB znajdziemy na stronie producenta. Kurs omawia programowanie mikrokontrolera STM32F103RB, nie możemy więc także przeoczyć strony z dokumentacją tego układu.

To co jest nam niezbędne:

Spokojnie, nie trzeba wszystkiego od razu czytać. Będziemy do tej dokumentacji wracać, więc warto pamiętać gdzie jej szukać.

Datasheet zawiera informację o charakterystyce naszego układu, będziemy korzystać z opisu wyprowadzeń (linii I/O). Reference manual jest strasznie długi, ale omawia wszystkie moduły procesora STM32F103. Będziemy wykorzystywać gotową bibliotekę dostarczaną przez ST, więc nie musimy czytać znaczenia każdego z rejestrów procesora. Jednak ogólny opis modułów, które posiada nasz układ najlepiej opisany jest właśnie tutaj.

Ostatni dokument to errata. Początkujący pewnie nie uwierzą, ale produkowane procesory mają błędy... Najczęściej jak coś źle działa, to dlatego, że źle napisaliśmy program, albo coś źle zlutowaliśmy, ale okazuje się, że same mikrokontrolery też nie są idealne.

Gotowe zestawy do kursów Forbota

 Komplet elementów  Gwarancja pomocy  Wysyłka w 24h

Zestaw ponad 120 elementów do przeprowadzenia wszystkich ćwiczeń z kursu można nabyć u naszych dystrybutorów! Dostępne są wersje z płytką Nucleo lub bez niej!

Zamów w Botland.com.pl »

Sterowniki

Najnowszą wersję sterowników można pobrać tutaj. Instalacji sterowników nie trzeba chyba opisywać, wspomnę tylko żeby je zainstalować przed podłączeniem płytki NUCLEO. Jeśli ich nie zainstalujemy, po podłączeniu płytki system wykryje ją jako nośnik danych, jednak interfejsy komunikacyjne pozostaną niedostępne:

01_brak_sterowników

Brak sterowników do płytki Nucleo.

Po prawidłowej instalacji sterowników i podłączeniu płytki powinniśmy zobaczyć aż 3 nowe urządzenia:

  1. wirtualny port szeregowy (np. COM3)
  2. dysk USB
  3. programator STLink
02_sterowniki

Prawidłowo wykryte urządzenia.

Warto również uaktualnić oprogramowanie naszego programatora. Nowsze wersje mogą działać szybciej oraz stabilniej. Program do aktualizacji firmware-u znajdziemy tutaj.

03_firmware

Aktualizacja oprogramowania.

Środowisko programistyczne

 

Kurs bazuje na darmowym środowisku System Workbench for STM32 dostępnym w ramach projektu OpenSTM32. Kompilator wraz z edytorem i debuggerem jest dostępny do pobrania ze strony: http://www.openstm32.org/HomePage

Środowisko bazuje na Eclipse, a przez to wymaga Javy. Jeśli nie mamy jej zainstalowanej, może pojawić się odpowiedni komunikat:

04_brak_javy

Brak zainstalowanej Javy.

Strona z maszyną Javy powinna automatycznie zostać otwarta w przeglądarce, na wszelki wypadek podam link: http://www.oracle.com/technetwork/java/javase/downloads/index.html

Dalsza instalacja powinna przebiegać bez problemów.

Dlaczego środowiskiem nie jest CooCox lub ręcznie konfigurowany Eclipse? W przypadku tego pierwszego problemem okazała się niedawna aktualizacja, która zmienia bardzo dużo w tym środowisku. Stało się ono przez to mało wygodne. Co więcej, w obawie przed kolejnymi tak dużymi zmianami zdecydowano o innym środowisku. Natomiast wykorzystanie samego Eclipsa jest dość trudne. Nie ma potrzeby męczyć się z ręcznym tworzeniem środowiska, gdy możemy korzystać z gotowego i darmowego System Workbench for STM32.

Pierwszy projekt na STM32

Po uruchomieniu środowiska zobaczymy ekran początkowy typowy dla Eclipse. Utwórzmy nowy projekt, wybieramy opcję File→New→C Project, powinniśmy zobaczyć okno tworzenia projektu. Podajemy nazwę projektu i naciskamy przycisk Next.

05_nowy_projekt

Tworzenie nowego projektu.

Następne okno pozwala na wybór konfiguracji, domyślne wersje Debug oraz Release. Są dla nas odpowiednie, więc naciskamy Next. Teraz czeka nas bardzo ważny krok, czyli wybór mikrokontrolera oraz płytki.

W polu Series wybieramy STM32F1, a następne jako Board wybieramy NUCLEO-F103RB. Konfiguracja powinna wyglądać następująco:

06_nowy_projekt2

Odpowiednia konfiguracja projektu.

Po naciśnięciu przycisku Next przejdziemy do ekranu wyboru biblioteki. Środowisko pozwala na pisanie programów bez wykorzystania bibliotek, w oparciu o biblioteki StdPeriph oraz Cube.

Podczas pierwszego uruchomienia środowiska musimy pobrać kod biblioteki. W tym celu klikamy przycisk Download target firmware, a następnie zgadzamy się na warunki licencji.

Podczas tworzenia kolejnych projektów nie będzie potrzeby ponownego pobierania plików. Możemy wybrać sposób dołączenia biblioteki do naszego projektu. Dostępne są dwie opcje:

  1. skopiowanie biblioteki do projektu (As sources)
  2. utworzenie biblioteki statycznej, współdzielonej przez kilka projektów (As static external libraries).

Wybieramy pierwszą opcję i naciskamy Finish.

07_nowy_projekt3

Sposób dołączenia biblioteki.

Projekt powinien zostać automatycznie wygenerowany.

08_nowy_projekt4

Wygenerowany projekt.

Warto poświęcić chwilę na zapoznanie się ze strukturą utworzonego projektu. Ponieważ wszystkie przykłady podczas kursu będą tworzone w ten sam sposób, będzie to fragment wielokrotnie powtarzany w przyszłości.

W projekcie znajdziemy kilka folderów z kodem:

  • StdPeriph_Driver – kod biblioteki StdPeriph. Ponieważ wybraliśmy opcję As Sources, cała biblioteka została skopiowana do naszego projektu.
  • Utilities – przykładowy kod dla płytki Nucleo. Nie będziemy go wykorzystywać podczas kursu
  • inc – folder na pliki nagłówkowe (.h)
  • src – folder na pliki z kodem programu (.c)
  • startup – zawiera plik z kodem w asemblerze, który jest uruchomiany zaraz po resecie mikrokontrolera
  • CMSIS – biblioteka dostarczana przez ARM, pozwala na niskopoziomowy dostęp do zasobów mikrokontrolera

Na początek usuwamy folder Utilities wraz z całą zawartością - nie będziemy tego kodu używać podczas kursu. Z pliku main.c musimy również usunąć odwołanie do właśnie usuniętego pliku nagłówkowego:

Warto również wyłączyć opcję automatycznej kompilacji projektu. Kompilacja zajmuje sporo czasu, a spowolnienie komputera które powoduje może skutecznie zniechęcić do używania Eclipse:

09_auto_build

Wyłączenie automatycznej kompilacji.

Mamy wreszcie nasz pierwszy projekt gotowy do uruchomienia. Najpierw kompilujemy kod (wystarczy kliknąć przycisk Build). Kompilacja powinna zakończyć się sukcesem.

10_compile

Pierwsza kompilacja.

Uruchomienie programu

Czas uruchomić nasz pierwszy program. Przy pierwszym uruchomieniu musimy przygotować odpowiednią konfigurację. Podłączamy płytkę Nucleo i wybieramy opcję menu:

Run→Run Configurations
(lub wybieramy tą samą opcję za pomocą paska narzędzi):

11_Run

Wybór odpowiedniej opcji.

Zobaczymy okno z dostępnymi konfiguracjami uruchomieniowymi:

11_Run2

Konfiguracje uruchomieniowe.

Klikamy podwójnie na pierwszej opcji Ac6 STM32 Debugging. Nowa konfiguracja zostanie utworzona automatycznie:

11_Run3

Utworzenie nowej konfiguracji.

Teraz wystarczy przycisnąć "Run".

Nasz program jest pusty i nic nie robi, więc musimy po prostu uwierzyć, że działa... Aby kolejny raz uruchomić program wystarczy wybrać opcję Run. Nie trzeba ponownie konfigurować programu.

Debugowanie

Pierwszy program nie robi nic ciekawego, więc jego uruchomienie nie daje rezultatów. Zmieńmy więc trochę kod programu i spróbujmy uruchomić go debuggerem.

Tym razem zamiast Run wybierzmy opcję Debug. Uruchomienie debuggera chwilę trwa, w międzyczasie zostaniemy zapytani o przełączenie do widoku Debug (zgadzamy się na tą opcję). Po chwili powinniśmy zobaczyć mniej więcej taki widok:

12_Debug

Okno debuggera.

Jak widzimy, nasz program został zatrzymany na pierwszej instrukcji wewnątrz funkcji main. Możemy zobaczyć zawartość zmiennych w oknie Variables (widoczne w prawym górnym rogu). Program można wykonywać krokowo za pomocą opcji Run→Step Over (F6). Aby wznowić wykonywanie programu możemy wybrać opcję Resume (F8).

Na początek warto zobaczyć, czy program działa naciskając F6 i obserwując wykonywanie kolejnych linii programu.

Zadanie domowe 3.1

Umieść w komentarzu dwa zrzuty ekranu demonstrujące podgląd (z debuggera) na wartość inkrementowanej zmiennej.

Podsumowanie

W tej części zobaczyliśmy jak utworzyć oraz uruchomić nowy projekt. Warto dobrze opanować te operacje, ponieważ od teraz będziemy je wykorzystywać w każdej części kursu. W kolejnym artykule zajmiemy się już pisaniem programów.

Jako pierwszymi peryferiami zajmiemy się uniwersalnymi portami wejścia/wyjścia GPIO. Omówimy również niezbędne operacje, które należy wykonać w celu uruchomienia poszczególnych portów.

Nawigacja kursu

Jeśli nie chcesz przeoczyć kolejnego odcinka, to korzystając z poniższego formularza i zapisz się na powiadomienia o nowych publikacjach!

Autor kursu: Piotr (Elvis) Bugalski
Redakcja: Damian (Treker) Szymański

instalacja, kursSTM32, programator, środowisko, sterowniki, stm32, uart

Trwa ładowanie komentarzy...