Drugą część kursu publikujemy pod adresem.

 

Firma STM stosuje prostą i skuteczną taktykę promowania swoich 32-bitowych mikrokontrolerów – dostarcza tanie i bardzo tanie zestawy ewaluacyjne oraz bezpłatne programowe wsparcie w postaci bibliotek obsługujących układy peryferyjne. Wśród użytkowników wszystkich rodzin mikrokontrolerów STM32 najbardziej znane są zestawy DISCOVERY. Wszystkie zestawy DISCOVERY są wyposażone w niezależny programator/debuger ST-Link/V2. Programator może współpracować z mikrokontrolerem zestawu DISCOVERY lub po przełożeniu dwu zworek programować zewnętrzny mikrokontroler. Interfejs ST-Link jest wspierany przez wszystkie liczące się implementacje środowisk projektowych IDE w tym przez środowiska oferowane przez firmę Keil (ARM) i IAR.

Jest cała rzesza entuzjastów elektroniki, którzy potrzebują środowisk tanich i łatwych w użyciu, a jednocześnie elastycznych i dających duże możliwości.

Firma STM pomimo sukcesu zestawów DISCOVERY poszła dalej i zaoferowała kolejną rodzinę zestawów o nazwie NUCLEO (fotografia 1), które są sprzętowo zgodne ze standardem Arduino Uno Rev. 3 i są oferowane z różnymi typami mikrokontrolerów STM32 od rodziny L0, poprzez L1, F0, F1, F3, F4 aż do F7.

 

Fot. 1. Wygląd płytki zestawu NUCLEO-64

 

Oprócz złącza standardu Arduino Uno na płytce NUCLEO-64 umieszczono złącza standardu Morpho zaprojektowanego przez STM. Umieszczenie złącz Morpho powoduje, że możliwe jest podłączenie dużo większej liczby linii mikrokontrolera niż w przypadku tylko standardowego złącza Arduino R3.

Wyposażenie płytek NUCLEO w elementy dodatkowe jest stosunkowo ubogie, co wynika z bazowania na idei Arduino: bazowy moduł mikrokontrolera ma za zadanie sterować wymiennymi modułami z układami peryferyjnymi dołączanymi poprzez zestandaryzowane złącza.

Fabrycznie skonfigurowany moduł jest gotowy do pracy z programatorem i zasilaniem poprzez złącze USB. Programator ST Link/V2-1 wymaga do prawidłowej pracy zainstalowania dedykowanego drivera dla systemu Windows. Driver należy pobrać z firmowej strony www.st.com i zainstalować. Po instalacji można podłączyć NUCLEO do portu USB komputera. Interfejs ST-Link/V2-1 (ta wersja jest implementowana w NUCLEO-64) jest widziany w komputerze jako osobny napęd z zapisanym plikiem strony mbed czyli wirtualnego IDE z kompilatorem C/C++.

 

Sieciowe środowisko projektowe mbed.org

Programowanie zestawów NUCLEO jest możliwe w sieciowym środowisku mbed. Sieciowe środowisko wymusza niekonwencjonalne podejście do organizacji projektu i samego programowania. Do tej pory programista kupował komercyjne narzędzia projektowe lub ściągał wersje bezpłatne składające się z IDE, kompilatora i bibliotek, instalował na komputerze lub komputerach. Wszystkie pliki projektu były umieszczone na lokalnym dysku.

Idea narzędzi sieciowych lub – inaczej mówiąc – idea programowania w chmurze jest inna. Dostęp do środowiska projektowego jest możliwy z dowolnego komputera z zainstalowaną przeglądarką stron WWW i połączonym z Internetem. Nie trzeba instalować żadnego oprogramowania, a wszystkie pliki projektu są umieszczone gdzieś w przestrzeni sieciowej w związku z czym podczas pracy nie mamy ich kopii na dysku lokalnym.

Jak już wspomniałem plik z linkiem do środowiska mbed jest umieszczony w folderze napędu widzianego w komputerze po podłączeniu modułu NUCLEO z programatorem ST-Link/V2-1. Wystarczy kliknąć na ten plik i otworzyć stronę https://developer.mbed.org/account/login, na której można utworzyć nowe konto użytkownika lub zalogować się do istniejącego konta. Po zalogowaniu okno IDE jest otwierane po kliknięciu na przycisk Compiler w prawym górnym rogu strony. Jeżeli już wcześniej pracowaliśmy z mbed, to po zalogowaniu otworzą się projekty aktywne w momencie zamykania strony z IDE.

Po otwarciu strony po pierwszym zalogowaniu trzeba utworzyć własny projekt, lub otworzyć projekt przykładowy. Wcześniej wspomniałem, że mbed wspiera platformy projektowe różnych producentów. Jeżeli w czasie logowania jest do portu USB podłączony moduł NUCLEO, to zostanie automatycznie rozpoznany jego wersja (w naszym przypadku jest to NUCLEO-F411RE) i jego symbol wyświetlony w prawym górnym rogu strony IDE. Po kliknięciu na ten symbol otwiera się okno z opisem platformy, możliwością dodawania kolejnych platform i możliwością wyboru aktywnej. Dodatkowo jest tam umieszczony opis wyprowadzeń modułu Pinoutrysunek 2.

 

Rys. 2. Okno wyboru platformy mbed

 

Tworzenie nowego projektu rozpoczynamy od kliknięcia na New->Program. Otwiera się okno, w którym można wybrać platformę (Platform), szablon (Template) oraz nazwę projektu (Program name). Nowy projekt zostanie umieszczony w oknie Program Workspace. Do tak utworzonego projektu można dodawać pliki źródłowe (New->New File) z rozszerzeniem .c, .cpp lub. h, nowe foldery i biblioteki.

Dodawanie plików źródłowych ni wymaga szerszego komentarza. Zatrzymamy się na chwilę przy dodawaniu bibliotek. Użytkownik może dodawać biblioteki do swojego projektu po kliknięciu prawym klawiszem na nazwę projektu w oknie Program Workspace i wybraniu z rozwijanej listy polecenia Import Library->From Import Wizard. Pojawi się okno wyboru Import a Library From Import mbed.org. Na liście do wyboru jest umieszczona oficjalna biblioteka mbed oraz szereg bibliotek utworzonych przez użytkowników. Na będzie interesowała oficjalna biblioteka mbed i ją należy dodać do projektu.

Używanie różnego rodzaju bibliotek dostarczanych bezpłatnie lub kupowanych jest powszechną praktyką programistów. Przykładem są biblioteki CMSIS (Cortex Microcontroller Software Interface) używane przez użytkowników mikrokontrolerów z rdzeniem Cortex-M. Biblioteka w znacznym stopniu przyspiesza programowanie układów peryferyjnych. Programista nie musi wgłębiać się dokładnie w strukturę rejestrów konfiguracyjnych i nie musi znać znaczenia poszczególnych bitów tych rejestrów. Oczywiście każdy producent musi przygotować dla swoich mikrokontrolerów własną wersję biblioteki, ale funkcje biblioteczne są takie same dla wszystkich mikrokontrolerów z rdzeniem Cortex-M. Niejako przy okazji w bibliotekach są umieszczane szablony przykładowych projektów dla najbardziej popularnych środowisk IDE. CMSIS mogą zawierać błędy, mogą nie być napisane optymalnie, mogą w przypadku, kiedy pójdzie coś nie tak zatrzymywać cały program, ale na pewno znacząco przyspieszają programowanie. Doświadczony programista zapewne poradzi sobie z drobnymi błędami, a coraz nowsze wersje bibliotek działają coraz lepiej.

Biblioteki związane z pracą układów peryferyjnych są tak pisane, żeby użytkownik miał do dyspozycji funkcje API i nie musiał znać jak są konfigurowane i jak pracują układy peryferyjne. Na tej zasadzie jest zbudowana biblioteka mbed library. Na rysunku 3 pokazano model warstwowy tej biblioteki. Kolorem niebieskim oznaczono warstwy niezależne od typu mikrokontrolera (producenta, rodziny), kolorem żółtym warstwy zależne od typu mikrokontrolera, a kolorem zielonym warstwę najniższą związaną z rejestrami konfiguracyjnymi mikrokontrolera.

 

Rys. 3. Model warstwowy biblioteki mbed library

 

Taka struktura pozwala na pisanie programów w taki sam sposób niezależnie od wybranej platformy wspieranej przez mbed. A co jeżeli platforma nie jest wpierana?. Wtedy trzeba sobie napisać port do nowego typu mikrokontrolera. W plikach pomocy są zamieszczone wskazówki jak to zrobić, ale jest to zadanie dla bardziej doświadczonych programistów. Dla tych mniej doświadczonych pozostaje nadzieja, że oferta wspieranych modułów będzie się sukcesywnie poszerzać i uda się dobrać coś do własnych potrzeb.

Idea bibliotek mbed pokazuje trend odchodzenia od programowania przez użytkownika układów peryferyjnych. Wystarczy wiedza, że taki a taki układ jest i może wykonać określone funkcje. Resztę wykonają funkcje biblioteki. To kolejny krok w oddalaniu się programistów od struktury mikrokontrolera. Dzisiaj mało kto zna listę rozkazów i potrafi programować w asemblerze. Za jakiś czas mało kto będzie znał strukturę układów peryferyjnych i sposób ich programowania. Wraz ze znacznym zwiększeniem możliwości mikrokontrolerów ich programowanie coraz bardziej przypomina programowanie w systemie operacyjnym z BIOS-em.

Wróćmy jednak do naszego programu tworzonego w środowisku mbed. Po dołączeniu biblioteki mbed mamy do dyspozycji szereg gotowych klas z funkcjami obsługi układów peryferyjnych: wejść (ADC) i wyjść (DAC) analogowych, interfejsów CAN, I2C, SPI. UART, PWM, manipulacji stanami na liniach portów , obsługi timera w tym licznika Tick. Oprócz tego można używać funkcji związanych z układem przerwań, funkcji systemu plików i funkcji związanych z Ethernetem.

 

Rys. 4. Okno z elementami mbed i plikiem pomocy

 

Na rysunku 4 pokazano okno IDE mbed z otwartą zakładką Classes biblioteki mbed (okno Program Workspace) i wybranym interfejsem I2C. W oknie z prawej strony wyświetla się cos w rodzaju pliku pomocy z opisem funkcji klasy i przykładami użycia.

 

Praktyczne testy

Jak już wspomniałem miałem do dyspozycji moduł NUCLEO-F411RE z mikrokontrolerem STM32F411RET6 obudowie z 64 wyprowadzeniami i wyposażony w 512kB pamięci Flash, oraz 96kB statycznej pamięci RAM. Mikrokontroler ma bardzo wydajny rdzeń Cortex M4 taktowany z maksymalną częstotliwością 84 (100) MHz. Lista układów peryferyjnych jest również bogata: 12-bitowy przetwornik analogowo cyfrowy, interfejsy SPI, I2C, UART, USB (OTG), moduły RTC, CRC. Złącza Morpho umożliwiają podłączenie za pomocą przewodów z nasadkami na goldpiny dowolnego układu peryferyjnego.

Ważnym elementem testu jest shield KA-NUCLEO-WEATHER zawierający: cyfrowy termometr STLM75, cyfrowy ciśnieniomierz LPS331 (MEMS), cyfrowy higrometr HTS221 (MEMS), miernik natężenia światła, LED-RGB i miniaturowy joystick. Wszystkie wymienione cyfrowe sensory zostały wyposażone w interfejs I2C. Schemat shielda KA-NUCLEO-WEATHER jest dostępny na stronie producenta, na fotografii 5 pokazano wygląd shielda zamontowanego na płytce NUCLEO-F411RE.

 

Fot. 5. Widok płytki NUCLEO-F411RE z zamontowanym shieldem KA-NUCLEO-WEATHER

 

W kolejnej części artykułu przedstawimy obsługę sensorów zastosowanych na płytce na przykładzie programu napisanego w mbed dla zestawu NUCLEO-F411RE.

Tomasz Jabłoński