Płytka zaprojektowana została w taki sposób, aby wykorzystać możliwie minimalną liczbę podzespołów, a jednocześnie, aby w żaden sposób nie ograniczać możliwości mikrokontrolera. W efekcie powstała bardzo mała, niedroga, prosta w konstrukcji (a także do samodzielnego montażu) oraz funkcjonalna platforma bazująca na mikrokontrolerze STM32 L4.
Artykuł został przygotowany w taki sposób, aby każdy wątek dotyczący projektu płytki znalazł się w osobnym rozdziale. Tym samym oddzielnie opisany został wątek dotyczący zasilania mikrokontrolera, układu resetu (zerowania), sygnału zegarowego, konfiguracji BOOT oraz interfejsu USB. Dzięki temu niniejszy materiał można potraktować nie tylko jako dokumentację z opisem płytki, ale również jako prosty poradnik ze wskazówkami jak w warstwie sprzętowej projektować systemy z mikrokontrolerami STM32 L4.
Mikrokontroler
Zastosowany na płytce mikrokontroler to model oznaczony STM32L476RGT6. Układ ten należy do najnowszej w ofercie STMicroelectronics rodziny STM32 L4, którą zaprojektowano z myślą o umiejętnym połączeniu trzech bardzo istotnych z punktu widzenia aplikacji cech: względnie wysokiej mocy obliczeniowej, niezwykle niskiego poboru prądu oraz bogatego zestawu zintegrowanych peryferiów.
Tym samym układy STM32 L4 można określić nie tylko mianem mikrokontrolerów niskomocowych, przeznaczonych dla systemów zasilanych z baterii, ale również mianem mikrokontrolerów ogólnego przeznaczenia, mogących znaleźć zastosowanie w szerokiej gamie urządzeń konsumenckich oraz przemysłowych.
Moc obliczeniową w mikrokontrolerach STM32 L4 gwarantuje rdzeń ARM Cortex-M4 (z FPU) oraz blok ART Accelerator. Dzięki nim mikrokontroler uzyskuje wynik 100 DMIPS oraz 273 punktów CoreMark w warunkach pracy z maksymalną, wynoszącą 80 MHz częstotliwością taktowania.
Energooszczędność zapewnia szereg dedykowanych do tego celu rozwiązań, w tym między innymi specjalne peryferia (low-power UART, low-power timer, zoptymalizowane peryferia analogowe), mechanizm skalowania napięcia zasilania rdzenia, tryb BAM (Batch Acquisition Mode) oraz większa niż w przypadku wcześniejszych układów STM32 liczba trybów pracy o obniżonym poborze prądu (RUN, Low Power RUN Sleep, Low Power Sleep, STOP1, STOP2, Standby, Shutdown). Co istotne, w każdym trybie uśpienia jako źródło przerwania można wykorzystać zegar czasu rzeczywistego (RTC).
Kolejnym atutem mikrokontrolerów STM32 L4 jest bogate wyposażenie. Obejmuje ono szereg interfejsów komunikacyjnych, liczne peryferia analogowe, liczniki/timery, jak również bardziej wyspecjalizowane zasoby takie jak kontroler LCD, interfejs FSMC i QSPI, moduł DMA oraz blok DFSDM.
Szczegółowe parametry zastosowanego na płytce mikrokontrolera STM32L476RGT6 przedstawiono w tabeli 1. Warto odnotować, że wskazany układ nie jest jedynym modelem, który można użyć na płytce. Jeśli zajdzie taka potrzeba, mikrokontroler STM32L476RGT6 można zastąpić innym układem, co jest możliwe dzięki kompatybilności rodziny STM32 pod względem układu wyprowadzeń.
Zamiennikami w grupie STM32 L4 mogą być trzy inne mikrokontrolery w obudowie LQFP64: STM32L476RC (mniej pojemna pamięć Flash: 256 kB), STM32L476RE (mniej pojemna pamięć Flash: 512 kB) oraz STM32L486RG (dodatkowy moduł szyfrujący AES).
Zasilanie
W mikrokontrolerach z rodziny STM32 L4 wydzielone zostały różne domeny zasilania. Jest ich łącznie siedem. Niemal wszystkie z nich (dokładnie sześć) są od siebie niezależne. Dzięki temu na etapie projektu można zdecydować, czy korzystniej będzie doprowadzić napięcie zasilania osobno do każdej z sześciu domen, czy jednak połączyć część z nich lub nawet wszystkie wspólnym napięciem zasilania.
W pierwszej domenie znajdują się porty wejścia/wyjścia, wbudowany stabilizator napięcia i wybrane elementy analogowe, takie jak układ resetu (zerowania) oraz wewnętrzne źródła sygnału zegarowego. Napięcie do tej domeny dostarczane jest poprzez grupę wyprowadzeń o nazwie VDD.
Napięcie wyjściowe wbudowanego stabilizatora (VCORE) służy do zasilania drugiej domeny. Tworzą ją: rdzeń Cortex-M4, pamięć SRAM oraz peryferia cyfrowe. Pamięć Flash jest zasilana zarówno napięciem VCORE, jak też VDD.
Trzecia domena to większość peryferiów analogowych. Są wśród nich wzmacniacze operacyjne, komparatory, bufor referencyjny napięcia, przetworniki A/C i przetworniki C/A. Pin, przez który napięcie dostarczane jest do tej domeny, oznaczony jest jako VDDA. Z tą domeną związany jest również pin VREF+ dostarczający napięcie referencyjne dla przetworników A/C i C/A.
Czwarta domena jest jednoelementowa. Jest nią kontroler USB, który zasilany jest z wyprowadzenia VUSB.
Kolejna domena, również jednoelementowa, to kontroler wyświetlacza LCD. Napięcie zasilania dla tej domeny doprowadzone jest przez pin VLCD. Alternatywnie napięcie zasilania może zostać wytworzone przez zintegrowaną w mikrokontrolerze przetwornicę podwyższającą napięcie.
W przypadku mikrokontrolerów z większą liczbą wyprowadzeń (obudowy LQFP144, BGA132, CSP72 oraz CSP81) piny portu wejścia/ wyjścia G (GPIO G) są oddzielną domeną. Zasilanie realizowane jest przez wyprowadzenie VDDIO2.
Ostatnia domena wydzielona została dla zegara czasu rzeczywistego, zewnętrznego źródła sygnału zegarowego (oscylator 32 kHz) oraz rejestrów backup. Napięcie zasilania do tej domeny doprowadzane jest przez pin VBAT.
Domeny zasilania w mikrokontrolerach z rodziny STM32 L4 zostały pokazane w sposób graficzny na rysunku 1. Dopuszczalne zakresy napięć zasilających te domeny wypisano w tabeli 2.
Najważniejszym elementem bloku zasilania na płytce jest stabilizator napięcia. Wykorzystany model to LD1117 firmy STMicroelectronics. Napięcie wejściowe dla stabilizatora podawane jest z gniazda USB, zatem zgodnie ze specyfikacją USB, ma ono wartość ok. 5 V.
Układ LD1117 obniża napięcie do poziomu 3,3 V na wyjściu. Aby zapewnić poprawną pracę stabilizatora napięcia, pomiędzy jego wyprowadzenie wejściowe i masę oraz pomiędzy jego wyprowadzenie wyjściowe i masę dołączono kondensator, odpowiednio o pojemności 100 nF i 10 µF.
Wytwarzane przez LD1117 napięcie 3,3 V jest jedynym napięciem zasilania dla mikrokontrolera STM32 L4 (zostało ono doprowadzone do wszystkich domen zasilania układu, a tym samym nóżek zasilania: VDDA/VREF+, VDDUSB, VDD, VBAT), co pozwoliło uzyskać prostą konstrukcję płytki.
Tak jak stabilizator LD1117 wymaga podłączenia kondensatorów, tak też analogiczny zabieg konieczny jest w przypadku mikrokontrolera STM32 L4. Między wyprowadzeniami VDDA/VREF+ oraz VSSA/VREF- umieszczono dwa kondensatory, pierwszy o pojemności 1 µF, drugi o pojemności 10 nF.
Ponadto między pinem VDDUSB i masą przewidziano również dwa kondensatory, jeden o pojemności 1 µF, drugi o pojemności 100 nF. Dodatkowo pomiędzy każdym z wyprowadzeń VDD i masą zastosowano po jednym kondensatorze o pojemności 100 nF.
Układ zerowania
Blok zerowania odpowiada za wytwarzanie sygnału, który resetuje mikrokontroler, co rozumieć należy jako ustawienie wartości domyślnych w rejestrach, a w efekcie też rozpoczęcie wykonywania aplikacji od początku. Linia resetu wewnątrz mikrokontrolera połączona jest przez rezystor z napięciem zasilania, co powoduje, że sygnał resetu ma domyślnie poziom wysoki.
Taki stan nie ingeruje w żaden sposób w działanie mikrokontrolera. Gdy jednak sygnał zmieni poziom na niski, wtedy mikrokontroler zostanie zresetowy. Poziom ten może zostać wygenerowany wewnętrznie lub zewnętrznie.
W przypadku pierwszego wariantu mogą to być: peryferia (watchdog, firewall), zmiana w obszarze Option bytes, reset programowy (z poziomu aplikacji), Brown Out Reset (spadek napięcia zasilania) lub wybudzenie z trybu uśpienia. Drugi wariant przewiduje podanie sygnału z zewnątrz, poprzez wyprowadzenie NRST. Schemat bloku zerowania pokazano na rysunku 2.
Projektant na kilka sposobów może podejść do układu resetu mikrokontrolera. Jedną z możliwości jest podłączenie wyprowadzenia NRST do zewnętrznego układu, który kontrolując poziom logiczny na tej linii we wskazanym momencie czasu resetuje mikrokontroler.
Inny wariant to ręczne resetowanie mikrokontrolera. W takim scenariuszu między linię NRST i masę należy podłączyć przycisk oraz kondensator o pojemności np. 100 nF. Wciśnięcie przycisku zresetuje mikrokontroler. Najprostszy możliwy wariant to pozostawienie wyprowadzenia NRST niepodłączonego do żadnego zewnętrznego komponentu, co oznacza brak możliwości wygenerowania sygnału resetu zewnętrznie.
Na płytce wyprowadzenie NRST połączono z gniazdem programatora/ debugera. Rozwiązanie to łączy wariant pierwszy i trzeci. Mianowicie gdy programator/debuger jest podłączony do płytki, ma on dostęp do linii NRST. Gdy programator/debuger nie jest podłączony do płytki, nie ma możliwości zresetowania mikrokontrolera z zewnątrz.
Sygnał zegarowy
Zasoby wewnętrzne mikrokontrolerów z rodziny STM32 L4 mogą być taktowane z jednego z czterech źródeł sygnału zegarowego: HSE, HSI16, MSI lub PLL (rysunek 3).
HSE (High Speed External) to zewnętrzne źródło sygnału zegarowego. Może mieć ono dwie formy. Pierwszą jest generator sygnału zegarowego, dołączony do wyprowadzenia OSC_IN. Drugim, bardziej popularnym rozwiązaniem jest oscylator kwarcowy, dołączony do wyprowadzeń RCC_OSC_IN oraz RCC_OSC_OUT i jednocześnie połączony przez kondensatory do masy. HSE może wytwarzać sygnał zegarowy z przedziału 4 - 48 MHz.
Drugie źródło sygnału zegarowego to HSI (High Speed Internal). Jest to zintegrowany w mikrokontrolerze rezonator RC o częstotliwości 16 MHz.
Trzecim źródłem sygnału zegarowego jest MSI (MultiSpeed Internal). Podobnie jak HSI, MSI również jest zintegrowanym w mikrokontrolerze rezonatorem RC. Przy pomocy MSI możliwe jest uzyskanie jednej z dwunastu częstotliwości sygnału zegarowego, w zakresie od 100 kHz do 48 MHz.
Ostatnim źródłem sygnału zegarowego jest pętla sprzężenia fazowego PLL (Phase Locked Loop). Wykorzystując na wejściu sygnał wygenerowany przez HSE, HSI lub MSI oraz używając mnożników i dzielników, PLL może wytwarzać sygnał o częstotliwości do 80 MHz włącznie.
Oprócz czterech źródeł sygnału zegarowego wysokiej częstotliwości, mikrokontrolery z rodziny STM32 L4 mogą korzystać też z dwóch źródeł sygnału zegarowego o niskiej częstotliwości. Są to LSE oraz LSI.
LSE (Low Speed External) jest zewnętrznym źródłem sygnału zegarowego. LSE może mieć postać albo generatora sygnału, podłączonego do wyprowadzenia RCC_OSC32_IN, albo oscylatora kwarcowego, wpiętego między wyprowadzenia RCC_OSC32_IN i RCC_OSC32_OUT oraz dodatkowo połączonego przez kondensatory do masy. LSE może generować sygnał o częstotliwości 32,768 kHz i służy do taktowania kontrolera LCD oraz zegara czasu rzeczywistego.
LSI (Low Speed Internal) jest zintegrowanym w mikrokontrolerze oscylatorem RC o częstotliwości 32 kHz. Pełni on tą samą funkcję co LSE oraz dodatkowo może zasilać w sygnał zegarowy watchdog (IWDG).
Aby mikrokontroler mógł korzystać ze wszystkich źródeł sygnału zegarowego, na płytce umieszczono dwa oscylatory kwarcowe. Pierwszy z nich, o częstotliwości 8 MHz jako źródlo HSE oraz drugi, o częstotliwości 32,768 kHz z myślą o źródle LSE.
Każdy z oscylatorów został dołączony do dedykowanych wyprowadzeń mikrokontrolera (odpowiednio do CC_OSC_IN, RCC_OSC_OUT i RCC_OSC32_IN, RCC_OSC32_OUT), jak również połączony z masą przez kondensatory (odpowiednio 20 pF i 12 pF).
BOOT
Mikrokontrolery z rodziny STM32 L4, tak jak i inne układy STM32, mogą wykonywać aplikację umiejscowioną w pamięci programu (Flash), pamięci danych (SRAM) lub pamięci systemowej, w której znajduje się Bootlader. O tym, jaka pamięć jest w danym momencie wybrana, decydują tak zwane ustawienia BOOT. Są to konkretnie dwie jednobitowe wartości: BOOT0 oraz BOOT1.
Wartość BOOT0 wskazywana jest sprzętowo, poprzez podanie odpowiedniego napięcia na wyprowadzenie BOOT0: potencjał masy symbolizuje wartość 0, analogicznie potencjał zasilania symbolizuje wartość 1. Z kolei wartość BOOT1 wskazywana jest programowo.
Jest to bit nBOOT1 w przestrzeni Option bytes. Konfiguracje BOOT i przypisane im pamięci wykonywania aplikacji pokazano w tabeli 3. Płytka została zaprojektowana w taki sposób, aby mikrokontroler wykonywał aplikację z pamięci Flash. W tym celu wyprowadzenie BOOT0 zostało podłączone do masy.
Interfejs programowania/debugowania
Moduł programowania/debugowania w mikrokontrolerach z rodziny STM32 L4 określany jest mianem SWJ-DP. Skrót ten łączy w sobie dwa interfejsy: SW-DP (Serial Wire Debug Port) oraz JTAG-DP (JTAG Debug Port). Oba oferują taką samą funkcjonalność.
To, co jednak je różni, to liczba linii sygnałowych, z których korzystają. Interfejs JTAG-DP wykorzystuje łącznie pięć wyprowadzeń (JTMS, JTCK, JTDI, JTDO oraz JNTRST). Interfejs SW-DP wymaga natomiast tylko dwóch linii sygnałowych (SWDIO i SWCLK). Lista linii sygnałowych obu interfejsów oraz przypisane im wyprowadzenia mikrokontrolera pokazano w tabeli 4.
Na płytce zastosowano interfejs SW-DP, który jest bardziej ergonomiczny niż JTAG. Obie linie tego interfejsu, a więc z sygnałem danych (SWDIO - Serial Wire Data Input Output) oraz z sygnałem zegarowym (SWCLK - Serial Wire Clock) podłączono do złącza.
Ponadto do tego złącza doprowadzono linie, z których dodatkowo korzystać może programator/debuger: linie zasilające (dodatni i ujemny potencjał), linię z sygnałem resetu oraz linię SWO (Serial Wiever Output), przez którą aplikacja może przesyłać wskazane przez programistę informacje do środowiska programistycznego. Interfejs ten nie wymaga zastosowania dodatkowych rezystorów szeregowych, czy podciągających do napięcia zasilania
Interfejs USB
Mikrokontrolery z rodziny STM32 L4 wyposażone są w moduł USB zawierający kontroler USB Full-Speed ( device/host/OTG) oraz nadajnik-odbiornik USB. Moduł ten jest zgodny ze specyfikacją USB 2.0.
Implementacja interfejsu USB w warstwie sprzętowej dla mikrokontrolerów STM32 L4 jest niezwykle prosta. Przede wszystkim wymagane jest połączenie linii zasilania oraz linii sygnałowych gniazda USB (GND, D+, D- oraz ID) z odpowiadającymi im wyprowadzeniami mikrokontrolera.
Co istotne, nie ma potrzeby dołączenia rezystorów do linii sygnałowych. Rezystory szeregowe na liniach D+ i D- nie są wymagane, gdyż nadajnik-odbiornik USB jest odpowiednio dopasowany wewnątrz mikrokontrolera. Ponadto rezystor podciągający do zasilania na linii D+ jest zintegrowany w mikrokontrolerze i może zostać włączony/wyłączony programowo.
Ostatnim podzespołem, o którym należy pamiętać w przypadku interfejsu USB jest oscylator kwarcowy, który zapewni sygnał o częstotliwości 48 MHz. Może to być albo wysokoczęstotliwościowy oscylator kwarcowy 48 MHz dla źródła sygnału HSE (z lub bez PLL), albo alternatywnie niskoczęstotliwościowy oscylator kwarcowy 32,768 kHz, który skalibruje wbudowany w mikrokontroler oscylator 48 MHz ze źródła MSI.
Zgodnie z powyższymi wskazówkami został zrealizowany interfejs USB na płytce. Linie gniazda USB, a więc GND, D+, D- oraz ID podłączone zostały odpowiednio do wyprowadzeń mikrokontrolera GND, PA12, PA11 i PA10. Dla linii tych nie przewidziano żadnych rezystorów. Jako że do mikrokontrolera podłączono zarówno kwarc wysokoczęstotliwościowy, jak i niskoczęstotliwościowy, sygnał dla interfejsu USB może zapewnić źródło HSE/PLL lub MSI z kalibracją za pomocą źródła LSE.
Schemat elektryczny płytki
Kompletny schemat elektryczny uwzględniający wszystkie opisane wcześniej wątki dotyczące projektowania systemów z mikrokontrolerem STM32 L4 przedstawiono na rysunku 4. Oprócz wymienionych wcześniej podzespołów, na płytce znalazły się jeszcze cztery listwy kołkowe. Stanowią one proste rozwiązanie pozwalające na podłączenie mikrokontrolera do zewnętrznych podzespołów, modułów i systemów.
Przygotowanie stanowiska pracy
Przygotowanie stanowiska pracy obejmuje czynności związane zarówno ze sprzętem, jak i oprogramowaniem. Ze sprzętowego punktu widzenia po pierwsze niezbędne jest doprowadzenie do płytki napięcia zasilania. Zrealizować to należy przez połączenie płytki i komputera przewodem USB (micro USB).
Po drugie konieczne jest dołączenie do płytki programatora/debugera. Tanim rozwiązaniem, wybranym przez autora, jest programator/debuger ST-Link, który jest częścią zestawu 32L476GDISCOVERY. Aby go użyć, wystarczy odłączyć linie interfejsu SW-DP od mikrokontrolera w zestawie Discovery (poprzez wyjęcie obu zworek ze złącza CN3) i podłączyć je przez złącze CN4 do płytki prototypowej. Taką konfigurację pokazano na fotografii 5.
Z programowego punktu widzenia konieczne jest przygotowanie odpowiedniego oprogramowania, pozwalającego na tworzenie aplikacji. Przykładowy zestaw narzędzi to generator kodu CubeMX (wraz z bibliotekami Cube HAL) oraz kompatybilne z nim środowisko programistyczne: EWARM firmy IAR Systems, MDK-ARM firmy ARM/Keil, TrueSTUDIO firmy Atollic lub System Workbench for STM32 firmy AC6.
Podsumowanie
Układy STM32 L4 to najnowsza grupa w rodzinie mikrokontrolerów STM32. Z pewnością warto zwrócić na nie uwagę, gdyż dzięki połączeniu trzech ważnych cech, jakimi są przyzwoita moc obliczeniowa, całkiem pokaźny zestaw peryferiów oraz bardzo niski pobór prądu, mogą one być rozwiązaniem atrakcyjnym dla bardzo różnych zastosowań, w tym tak popularnych w ostatnim czasie systemów Internet of Things.
Zaprezentowany w tym artykule projekt stanowi dobre źródło wiedzy o tym, jak projektować systemy oparte na mikrokontrolerach STM32 L4. Pokazano tu krok po kroku kolejne aspekty dotyczące projektu systemu w warstwie sprzętowej.
Opisana płytka jest prostą do wykonania i tanią platformą uruchomieniową dla mikrokontrolerów STM32 L4. Może ona posłużyć do poznawania w praktyce nowych mikrokontrolerów firmy STMicroelectronics, jak też do budowania autorskich systemów prototypowych.
Szymon Panecki
szymon.panecki@st.com
Literatura
1. www.st.com/stm32l4, Karta katalogowa (datasheet) dla mikrokontrolerów STM32L476xx
2. www.st.com/stm32l4, Nota aplikacyjna AN4555 "Getting started with STM32L4 series hardware development"
3. www.st.com/web/en/seminar.html Szkolenie online "STM32L4 Online Training"