STM32F0, STM32L0, STM32G0 - który wybrać?

STM32F0, STM32L0, STM32G0 - który wybrać?
Pobierz PDF Download icon

W pewnym okresie rozwoju mikrokontrolerów spróbowano zastąpić mikrokontrolery 8-bitowe przez jednostki 32-bitowe. W rezultacie projektanci dostaliby o wiele bardziej wydajne jednostki oferujące możliwości nie do osiągnięcia dla 8-bitowców, ale przy podobnych kosztach. Żeby to się udało należało pokonać pewne bariery.

Pierwszą za nich była cena mikrokontrolera. Klasyczne rdzenie 32-bitowe są optymalizowane do jak największej wydajności i funkcjonalności, co powoduje, że ich struktura jest skomplikowana i do jej realizacji są potrzebne płytki krzemowe o relatywnie dużej powierzchni. Dlatego są droższe w produkcji w porównaniu z prostymi rdzeniami 8-bitowymi. Wyjściem z tej sytuacji byłoby zaprojektowanie rdzenia, który wciąż miałby sporo większą wydajność od jednostek 8-bitowych, ale jednocześnie byłby uproszczeniem klasycznych rdzeni 32-bitowych.

W odpowiedzi na te oczekiwania firma ARM zaprojektowała uproszczony rdzeń nazwany Cortex-M0, który miał zapewnić odpowiednią wydajność i niski koszt produkcji. Warunkiem koniecznym była kompatybilność programowa z wydajnymi rdzeniami już istniejącymi na rynku. Otwierało to możliwość korzystania z istniejących już środowisk projektowych, kompilatorów, czy programatorów/debuggerów przeznaczonych dla klasycznych mikrokontrolerów 32-bitowych. Żeby obniżyć koszty projektu Cortex-M0 wzięto udany rdzeń Cortex-M3 i usunięto z niego część funkcjonalności.

Kolejną modyfikacją wynikającą z uproszczenia struktury rdzenia było zredukowanie listy instrukcji do 56. Żeby zapewnić oczekiwaną kompatybilność programową wszystkie instrukcje Cortex-M0 są podzbiorem instrukcji większych rdzeni i są obsługiwane przez każdy z rdzeni Cortex-M (rysunek 1). W kolejnym kroku usunięto moduł ochrony pamięci MPU i za jednym zamachem uproszczono układ przerwań (mniejsza ilość przerwań obsługiwana przez kontroler NVIC i układ debugowania). Te zmiany zaowocowały drastycznym bo trzykrotnym zmniejszeniem powierzchni krzemu potrzebnej na zaimplementowanie rdzenia z 0,12 mm2 Cortex-M3 do 0,04 mm2 Cortex-M0. Dwukrotnie spadło też dynamiczne zapotrzebowanie mocy z 32 μW/MHz do 16 μW/MHz.

Rysunek 1. Zestaw instrukcji rdzeni Cortex-M

Na pierwszy rzut oka wydaje się, że odniesiono sukces. Implementacja rdzenia jest tańsza, a pobór mocy wyraźnie mniejszy. Wiele firm, w tym ST zaczęło stosować nowe rozwiązanie w swoich mikrokontrolerach. Tak powstała rodzina STM32F0, która miała konkurować z mikrokontrolerami 8-bitowymi ceną, poborem mocy i wydajnością. Jednak rzeczywistość trochę zredukowała optymizm projektantów rdzeni i producentów mikrokontrolerów. Cortex-M0 za stosowany w STM32F0, ale tez w rodzinach innych producentów nie do końca spełnił wszystkie pokładane w nim nadzieje. Odchudzenie rdzenia spowodowało przede wszystkim znaczące zmniejszenie wydajności z 1,25 DMIPS/MHz (Cortex-M3) do 0,84 DMIPS/MHz (Cortex-M0). Poza tym znaczne uproszczenie listy rozkazów powodowało, że część operacji zamiast wykonywać się w jednej instrukcji wymagała dwu instrukcji. ARM wydawał się też nie zauważyć specyfiki układów sterowania, w których używano szybkich 8-bitowych mikrokontrolerów. Często stosowano tam szybkie operacje na liniach portów.

W Cortex-M0 zastosowano dwutaktowy dostęp do linii portów, co wyraźnie spowalnia dostęp.

Reklamowana 32-bitowa wydajność w cenie 8 bitowych jednostek nie została do końca w praktyce zrealizowana. Rodzina mikrokontrolerów STM32F0 odniosła jednak pewien sukces, bo mikrokontroler oprócz rdzenia to także pamięć i układy peryferyjne. Do tego dochodzą środowiska programowe, kompilatory, wsparcie producenta w postaci modułów ewaluacyjnych czy gotowych bibliotek. Jednak rdzeń wymagał poprawy i ARM wykonał kolejną modyfikację dodając nowe możliwości, w tym te które wcześniej zostały usunięte:

  • Dodano blok MPU ze sprzętowym podziałem pamięci na 8 chronionych obszarów,
  • Umożliwiono dynamiczną relokację tablicy wektorów przerwań i wyjątków,
  • Rozbudowano układ debugowania o dodatkowe bloki sprzętowe Micro Trace Buffer, Breakpoint i Data Watchpoint,
  • Wprowadzono tryb uprzywilejowany z określoną ilością uprawnień,
  • Wprowadzono szybki dostęp do linii I/O (jednotaktowy),
  • Zmniejszono przetwarzanie potokowe z trzypoziomowego na dwupoziomowe.

Te działania zwiększyły wydajności do 0,93 DMIPS/MHz przy jednoczesnym dalszym ograniczeniu poboru mocy do 11 μW/MHz. Nowy rdzeń nazwano Cortex-M0+ i obecnie jest implementowany w nowych mikrokontrolerach, w których wymagane są niskie koszty produkcji. Firma ST stosuje je w rodzinach STM32L0 i STM32G0.

Co wybrać?

Użytkownicy mikrokontrolerów STM32 mają do dyspozycji trzy rodziny prostych 32-bitowych mikrokontrolerów STM32:

  • STM32F0 - historycznie najstarsza z rdzeniem Cortex-M0,
  • STM32L0 - optymalizowana pod względem niskiego poboru mocy z rdzeniem Cortex-M0+,
  • STM32G0 - najnowsza uniwersalna rodzina z rdzeniem Cortex-M0+ i niskim poborem mocy.

Każda z tych rodzin dzieli się jeszcze na linie, które różnią się miedzy sobą wyposażeniem w układy peryferyjne i pamięci programu i danych. Tak duża ilość możliwości może powodować trudności z optymalnym wyborem elementu do własnej aplikacji. Mając na uwadze to co zostało napisane wyżej rodzina STM32F0, najstarsza i wyposażona w mniej udany rdzeń powinna odpadać we wstępnej selekcji. Jednak STM32F0 są nadal produkowane i sprzedawane. Oznacza to że powinniśmy się wstrzymać z daleko idącymi wnioskami, bo być może właśnie STM32F0 będzie najbardziej właściwym wyborem dla projektowanej aplikacji. Zacznijmy więc od zaprezentowania co oferują mikrokontrolery STM32F0.

STM32F0

Jak już wiemy STM32F0 mają wbudowany rdzeń Cortex-M0. Który może być taktowany częstotliwością do 48 MHz. Rodzina jest podzielona na 4 linie:

  • STM32F0x0 Value Line - przewidzianej do bezpośredniej konfrontacji z dotychczas stosowanymi mikrokontrolerami 8-bitowymi i mniej wydajnymi 16-bitowymi,
  • STM32F0x1 Access Line - z wbudowanym szeregiem układów peryferyjnych, oraz dużą pamięcią programu i danych pozwalającymi na realizację bardziej rozbudowanych aplikacji nie wymagających dużych wydajności rdzenia,
  • STM32F0x2 USB Line - skierowanej na układy transmisji danych w tym transmisji przez moduł komunikacyjny USB,
  • STM32F0x8 Low-voltage Line - przewidzianej do zasilania niskim napięciem +1,8 V ±8%.

Zestawienie możliwości STM32F0 zostało pokazane na rysunku 2.

Rysunek 2. Zestawienie możliwości mikrokontrolerów rodziny STM32F0

Mimo niezbyt wydajnego rdzenia (jak na 32-bitową jednostkę) STM32F0 broni się dobrym wyposażeniem w układy peryferyjne, oraz dużą pamięcią programu i danych. Na rysunku 3 pokazano schemat blokowy mikrokontrolera STM32F030 z najniższej linii Value.

Rysunek 3. Schemat blokowy STM32F030 (Value Line)

Rdzeń Cortex-M0 taktowany częstotliwością 48 MHz jest uzupełniony pamięcią programu wielkości 16 kB i pamięcią danych 4 kB, oraz wieloma układami peryferyjnymi:

  • 5-kanałowym układem DMA,
  • Modułami komunikacyjnymi: 2×SPI, 2×I2C, 6×USART,
  • 12-bitowym modułem przetwornika analogowo cyfrowego ADC z 16 kanałami pomiarowymi, oraz sensorem temperatury,
  • Układami liczników: 16-bitowym licznikiem PWM dla układów sterowania silnikiem, 5×16-bitowy uniwersalny licznik PWM, oraz 2×16-bitowe liczniki uniwersalne ogólnego przeznaczenia.

To wszystko jest uzupełnione rozbudowanymi układami taktowania, układami watchodg’a, oraz modułem RTC. Ta specyfikacja przypomina bardzo dobrze wyposażone mikrokontrolery 8-bitowe, a STM32F030 jest jednym z najniżej pozycjonowanym mikrokontrolerem w całej rodzinie STM32F0. Na rysunku 4 pokazano portfolio mikrokontrolerów STM32F0 Value Line.

Rysunek 4. Portfolio STM32F0 Value Line

Rodzina STM32F0 nie jest optymalizowana pod kątem poboru energii tak jak opisywana dalej rodzina STM32L0, ale jak każde współczesne mikrokontrolery ma wbudowane tryby oszczędzania energii, które pozwalają w dużym stopniu ograniczać pobór prądu.

Na rysunku 5 pokazano typowe wartości poboru prądu dla różnych trybów pracy. Daje to możliwość porównania energooszczędności z innymi mikrokontrolerami.

Rysunek 5. Typowe pobory prądu dla różnych trybów oszczędzania energii STM32F0

Mikrokontrolery STM32F0 Value Line w całej ofercie 32-bitowych mikrokontrolerów STM32 są jednymi z najprostszych i powinny rywalizować w mniej wymagających zastosowaniach i wszędzie tam gdzie liczy się cena. Na rysunku 6 pokazano zestawienie tych mikrokontrolerów z uwzględnieniem jednostkowej ceny przy zamówieniu 10000 sztuk. To zestawienie jest generowane przez selektor mikrokontrolerów STM32CubeMX i powinno dawać ogólne pojęcie o zakresie cen. Najtańszy element STM32F030F4Px w obudowie TSSOP20 kosztuje 0,385 $. Przy dużych partiach produkcyjnych STM32F0 Value Line, jeżeli tylko spełnia techniczne wymagania projektu może być cenowo bardzo atrakcyjną opcją.

Rysunek 6. Zestawienie STM32F0 Value Line z uwzględnieniem cen

W wyższych liniach na przykład w STM32F0x2 USB Line jest jeszcze lepiej jeżeli chodzi o wyposażenie w układy peryferyjne i pamięć. Schemat blokowy STM32F072 i portfolio tej linii zostały pokazane na rysunkach 7 i 8. Jedną z ważniejszych cech STM32F0x2 jest dodanie modułu komunikacyjnego USB 2.0 FS, który nie wymaga taktowania generatorem stabilizowanym kwarcem. Układy komunikacyjne zostały ponadto uzupełnione o interfejs CAN, SPI z możliwością konfigurowania jako I2S, oraz HDMI. Oczywiście to musi się odbić na cenie mikrokontrolerów - rysunek 9.

Rysunek 7. Schemat blokowy mikrokontrolera STM32F072
Rysunek 8. Portfolio linii STM32F0x2 USB Line
Rysunek 9. Zestawienie STM32F0x2 z uwzględnieniem cen

STM32L0

Rozwój urządzeń mobilnych spowodował, że pojawiło się zapotrzebowanie na mikrokontrolery, które mogą efektywnie zarządzać poborem mocy w trakcie kiedy zapotrzebowanie na moc jest ograniczone, a z drugiej strony zużywają relatywnie mało energii w czasie intensywnej pracy. Efektywne zarządzanie poborem energii jest ściśle związane z wbudowanymi trybami czuwania, ale też z dynamicznym inteligentnym sterowaniem napięciem zasilania. Sprawdza się tu ogólna zasada - im niższe napięcie zasilania tym mniejszy pobór energii, ale też mniejsze maksymalne częstotliwości taktowania i tym samym mniejsza wydajność (rysunek 10).

Rysunek 10. Maksymalne częstotliwości taktowania w funkcji napięcia zasilania rdzenia

Zapotrzebowanie na energię w trakcie normalnej pracy zależy od energochłonności zastosowanego rdzenia, układów pamięci i układów peryferyjnych. Pośrednio zależy też w pewnym stopniu od wydajności rdzenia. Jeżeli mamy jakieś zadanie, które należy wykonać w trakcie normalnej pracy i potem wejść w tryb obniżonego poboru, to szybszy rdzeń wykona to szybciej i pobór prądu w tym czasie będzie krótszy, a pobrana energia mniejsza.

Rodzina mikrokontrolerów STM32L0 jest konstrukcyjnie optymalizowana do pracy w układach zasilanych bateryjnie i wszędzie tam, gdzie jest wymagane niskie zużycie energii. Historycznie powstała później niż STM32F0 i zastosowano tu już zmodyfikowany rdzeń Cortex-M0+, ale taktowany mniejszą maksymalną częstotliwością 32 MHz vs 48 MHz dla rodziny STM32F0.

STM32L0 mają możliwość wyboru kilku trybów obniżonego poboru energii. W większości przypadków rdzeń (CPU) jest albo zatrzymany albo wyłączony. Wyjątkiem jest Low Power Run, gdzie rdzeń jest taktowany częstotliwością 32 kHz. Zestawienie trybów oszczędzania energii zostało pokazane w tabeli 1.

Wprowadzono 2 nowe tryby oszczędzania: Low Power Run i Low Power Sleep. Są niezwykle użyteczne w przypadku, kiedy aplikacja nie dopuszcza wyłączenia jakiejś części układów peryferyjnych i/lub wymagana jest minimalna aktywność rdzenia mikrokontrolera. Przy tak niskim taktowaniu regulator napięcia zasilającego przechodzi w tryb LP (Low Power) i dzięki temu zużycie energii jest mocno ograniczane. Ponadto jest możliwe wyłączenie pamięci Flash i wykonywanie kodu z pamięci RAM.

Włączenie wewnętrznego oscylatora RC MSI redukuje pobór prądu układu taktowania do 1,5 μA. Maksymalny pobór prądu w trybie LP (Low Power) jest określany tylko przez częstotliwość taktowania i ilość aktywnych układów peryferyjnych.

W czasie, gdy aktywne są tryby oszczędzania energii mogą być potrzebne działające układy peryferyjne. W rodzinie STM32L0 zastosowano siedem specjalnie zoptymalizowanych pod względem poboru mocy układów peryferyjnych, które mogą pracować ciągle nawet kiedy rdzeń jest w trybie Stop i system taktowania zostanie zatrzymany, a główny oscylator oraz pamięć wyłączone. Są to:

  • Para komparatorów o ultra niskim poborze prądu ok. 3 μA pozwalająca na monitorowanie napięcia analogowego. Komparatory mogą wybudzać rdzeń kiedy napięcie zewnętrzne osiągnie zadany próg. Połączenie dwu komparatorów daje możliwość konfiguracji komparatora okienkowego. Jeden z komparatorów ma wejście typu rail to rail i jego wyjście może być przekierowane do wyzwalania timera ogólnego przeznaczenia LPTIM;
  • Moduł zegara czasu rzeczywistego RTC realizujący funkcje zegara i kalendarza. Może periodycznie wybudzać mikrokontroler z trybu oszczędzania energii na przykład po włączeniu zaprogramowanego alarmu. RTC pracuje w trybie standby, kiedy większość układów peryferyjnych jest wyłączona. Ma wbudowane 80 bajtów pamięci, którą można przeznaczyć do zapisywania danych w trakcie przejścia w tryb standby;
  • Sterownik wyświetlacza LCD z 8 wspólnymi liniami i 32 segmentami. Sterownik może współpracować z opcjonalnym wewnętrznym konwerterem step-up używanym do regulacji kontrastu wyświetlacza LCD w szerokim zakresie napięć zasilających mikrokontroler (Vdd) i pobiera prąd ok. 5 μA;
  • Timer ULPTIM (Ultra Low Power Timer). Jest to 16-bitowy licznik/timer zaprojektowany do pracy z niskim poborem energii. Możliwość wyboru wielu źródeł zegara pozwala na działanie niezleżenie od wybranego trybu oszczędzania energii. ULPTIM może również pracować jako licznik zliczający impulsy zewnętrzne, kiedy nie jest potrzeby żaden wewnętrzny sygnał zegarowy. ULPTIM pracujący z ekstremalnie niskim poziomem poborem energii może wybudzać mikrokontroler w momencie przepełnienia;
  • Interfejs ULPUART (Ultra Low Power UART). Uniwersalny dwukierunkowy interfejs UART zaprojektowany do pracy z niskim poborem energii. Dla prędkości transmisji do 9600 bodów może być taktowany energooszczędnym zegarem LSE o częstotliwości 32,768 kHz. ULPUART czeka na odebranie znaku (bajtu) i wybudza mikrokontroler z trybu Stop po jego odebraniu;
  • Interfejs I2C wybudza MCU z trybu Stop, kiedy odbierze bajt swojego adresu. Do taktowania trzeba wybrać oscylator HSI16. W trybie obniżonego poboru energii HSI16 jest wyłączony i nie pobiera energii. Po odebraniu sekwencji START HSI16 jest włączany i wyłącza się automatycznie po odebraniu sekwencji STOP.

Na rysunku 11 jest pokazane przykładowe zużycie energii w poszczególnych trybach zasilania. Jeżeli porównamy to z rodziną STM32F0 (rysunek 5), to widać, że wykonano tu solidną pracę. Na przykład w trybie STANDBY mamy 230 nA dla STM32L0 i 2,5 μA dla STM32F0, w trybie STOP z działającym RTC pobór prądu wynosi 440 nA dla STM32L0 i 5,4 μA dla STM32F0. Rodzina STM32L0 jest również podzielona na linie: Value, Access, USB i USV&LCD - rysunek 12. 

Rysunek 11. Zużycie energii STM32L0 w różnych trybach zasilania
Rysunek 12. Portfolio rodziny STM32L0

Schemat blokowy mikrokontrolerów rodziny STM32L0 z linii Access został pokazany na rysunku 13. STM32L011x4 ma wbudowane opisywane wyżej układy peryferyjne o ekstremalnie niskim poziomie poboru mocy: 2 komparatory, ULPUART, licznik/timer ULPTIM, oraz RTC. Układów peryferyjnych jest oczywiście więcej, m.in. 12-bitowy przetwornik SAR z 10 kanałami pomiarowymi czasem konwersji na poziomie 1 μs, rozbudowany USART z obsługą interfejsu kart SD, LIN i IrDA , interfejs SPI i I2C, oraz trzy 16-bitowe timery.

Rysunek 13. Schemat blokowy mikrokontrolerów z linii Value

Do dyspozycji jest też 7-kanałowy moduł DMA. Zależnie od konkretnego typu na pamięć programu przeznaczono od 8 kB do 16 kB pamięci Flash, 2 kB pamięci RAM i 521 bajtów pamięci EEPROM.

Dużo lepiej wyposażone są mikrokontrolery z linii LCD&USB. Schemat blokowy został pokazany na rysunku 14. Oprócz większej pamięci programu (od 64 kB do 128 kB), pamięci danych SRAM (20 kB) i EEPORM (6 kB) umieszczono tu interfejs USB 2.0 nie wymagający taktowania z generatora kwarcowego oraz sterownik wyświetlacza LCD. Pozostałe interfejsy są podobne ale jest ich zdecydowanie więcej.

Rysunek 14. Schemat blokowy mikrokontrolerów z linii LCD&USB

W wielu wrażliwych aplikacjach przemysłowych oprócz takich cech jak rdzeń, pamięć i wyposażenie w układy peryferyjne kluczowe znaczenie mają inne parametry: zakres napięć zasilania, dopuszczalna temperatura otoczenia, czy układy zapewniające prawidłową pracę w otoczeniu z silnymi zakłóceniami EMI. STM32L0 mogą pracować w temperaturze otoczenia od -40 do +125°C. Szczególnie zakres pracy w temperaturach dodatnich robi wrażenie. Napięcie zasilania może mieć wartość od +1,65 do +3,6 V i w całym tym zakresie nie ma ograniczeń w prędkości działania CPU. Układ zasilania jest podzielony na 5 niezależnych domen: analogową VDDA, rdzenia VCORE, modułu wyświetlacza LCD LCD i wewnętrznego boostera VUSB & VDD. Wydzielenie domeny analogowej VDDA może pozytywnie wpływać na jakość pomiaru napięć analogowych o małych poziomach.

Praca w otoczeniu silnych zakłóceń EMI może powodować wytrącenie mikrokontrolera z normalnego działania i w konsekwencji nie przewidywalne zachowanie się mikrokontrolera. W takich przypadkach bardzo przydatne są układy watchdog i BOR. Zastosowano tu 2 niezależnie liczniki watchdog, które można użyć jako bardzo skuteczny watchdog okienkowy. Układ BOR ma za zadanie wykryć obniżenie napięcia zasilania poniżej zaprogramowanej wartości. Takie zdarzenie skutkuje wejściem w stan zerowania.

Taktowanie mikrokontrolera za pomocą oscylatorów kwarcowych wiąże się z ryzykiem braku startu w czasie włączania napięcia zasilania lub zerwaniem oscylacji w trakcie normalnej pracy (uszkodzenie kwarcu, zmiany temperatury pracy, itp). Wbudowany układ nadzoru wykrywa brak oscylacji i automatycznie przełącza na taktowanie przez niezawodny wewnętrzny oscylator RC.

Pamięć danych jest zabezpieczana sprzętowym modułem CRC. Chroni on pamięć programu przed naruszeniem jej integralności.

Energooszczędne mikrokontrolery mogą być idealnymi elementami dla aplikacji IoT zasilanych bateryjnie. Urządzenia końcowe IoT oprócz niskiego poboru energii powinny zapewniać bezpieczeństwo transmisji i odporność na ataki hakerów. W części mikrokontrolerów rodziny STM32L0 zaimplementowano rozwiązania ułatwiające zbudowanie systemu bezpieczeństwa dla urządzeń IoT (rysunek 15):

  • Możliwość blokowania debugowania kodu (Debug Lock),
  • Zabudowanie czujników antysabotażowych zintegrowanych z modułem RTC (Tamper Pad),
  • Wbudowanie sprzętowego modułu kryptograficznego z generatorem liczb losowych,
  • Wbudowanie mechanizmów ułatwiających implementację autoryzacji,
  • Wbudowanie mechanizmów ochrony pamięci.
Rysunek 15. Rozwiązania wspierające bezpieczeństwo w aplikacjach IoT
Rysunek 16. Ceny mikrokontrolerów STM32L0 Value Line
Rysunek 17. Ceny wybranych mikrokontrolerów STM32L0 linii USB&LCD

Ceny najmniej rozbudowanych mikrokontrolerów z linii Value zostały pokazane na rysunku 16. Najtańszy STM32L01F4 kosztuje 0,44 euro przy partii 10000 sztuk. Dla porównania na rysunku 17 pokazano ceny wybranych mikrokontrolerów z linii USB&LCD. Zdecydowanie większe możliwości mają odzwierciedlenie w wyraźnie wyższej cenie.

STM32G0

Najnowsza rodzina mikrokontrolerów STM32G0 ma również wbudowany nowszy rdzeń Cortex-M0+ taktowany maksymalną częstotliwością 56 MHz. W założeniu ma być następcą rodziny STM32F0 i została podzielona na trzy linie:

  • Value Line
  • Access Line
  • Access Line & Encryption (AES)

Wyposażenie w zasoby (pamięć, peryferia, itp.) w zależności od linii zostało pokazane na rysunku 18.

Rysunek 18. Linie produktów STM32G0

Już na pierwszy rzut oka widać, ze nowa rodzina mikrokontrolerów jest solidnie wyposażona w układy peryferyjne i pamięć, a linia Access Line & Encryption jest mocno zorientowana na stosowanie w aplikacjach IoT. Na rysunku 19 jest pokazane portfolio rodziny STM32G0.

Rysunek 19. Portfolio rodziny STM32G0

Schemat blokowy najprostszego mikrokontrolera z linii Value STM32G030 został pokazany na rysunku 20. Rdzeń Cortex-M0+ jest taktowany maksymalną częstotliwością 56 MHz. Elastyczny układ taktowania zawiera dwa oscylatory kwarcowe: 32 kHz i 1…56 MHz, dwa wewnętrzne oscylatory RC: 32 kHz i 16 MHz i układ PLL. Wyposażenie w układy peryferyjne jak na mikrokontroler, który jest umieszczony w obudowie 8-wyprowadzeniowej jest całkiem niezłe. Znajdziemy moduł zegara RTC, 12-bitowy przetwornik SAR próbkujący z prędkością 2 MSps, interfejsy SPI, USART z opcjami LIB, IrDA i obsługa kart SD, interfejs I2C, licznik przeznaczony do sterowania silnikami DC z komplementarnymi wyjściami PWM, oraz klasyczny licznik PWM i 5-kanałowy układ DMA. Jednak nie znajdziemy tu wielu układów peryferyjnych z wyższych linii. Temperatura pracy została ograniczona do +85°C a zakres napięć zasilających od 2,0 do 3,6 V. Podobnie jak w poprzednio opisywanych rodzinach zastosowano rozbudowany konfigurowalny i elastyczny system taktowania.

Rysunek 20. Schemat blokowy mikrokontrolera STM32G030

Podstawowym źródłem zegara może być oscylator stabilizowany kwarcem o częstotliwościach od 1 do 56 MHz lub wewnętrzny oscylator RC o częstotliwości 16 MHz (w wyższych liniach kalibrowany laserowo na etapie produkcji). Dostępne są tez dwa oscylatory kwarcowy i RC o niskich częstotliwościach ok. 32 kHz. Wbudowany układ kontroli taktowania nadzoruje pracę oscylatora kwarcowego i po zaniku oscylacji w wyniku awarii automatycznie przełącza na taktowanie z wewnętrznego oscylatora RC 16 MHz. Dokładną częstotliwość taktowania można zaprogramować w bloku PLL połączonym z preskalerem. Nadzór nad prawidłowym wykonywaniem programu sprawują 2 niezależne liczniki watchdog, które można łączyć w watchdog okienkowy.

Na drugim biegunie są najbardziej rozbudowane mikrokontrolery linii Acces AES.

Schemat blokowy mikrokontrolera STM32G0A1 z tej linii został pokazany na rysunku 21. Ta jednostka może być umieszczana obudowie o nawet 100 wyprowadzeniach i może mieć do 512 kB pamięci programu Flash i do 80 kB pamięci SRAM. Zakres napięć zasilających rozszerzono od 1,8 do 3,6 V, a górną temperaturę pracy aż do +125°C.

Rysunek 21. Schemat blokowy mikrokontrolera STM32G0A1

Wyposażenie w układy peryferyjne jest imponujące. Blok peryferii odpowiadający za szyfrowanie zawiera 256-bitowy moduł szyfrujący AES i generator liczb losowych True RNG. Interfejs USB 2.0 Full Speed OTG został uzupełniony o USB PDI (Power Delivery Interface).

Interfejsy analogowe to 12-bitowy przetwornik analogowo cyfrowy SAR próbkujący z szybkością 2 MSps z 16 kanałami pomiarowymi, 2-kanałowy 12-bitowy przetwornik cyfrowo analogowy DAC, 2 komparatory i sensor do pomiaru temperatury. Standardowe interfejsy komunikacyjne SPI (opcjonalnie I2S), USART (opcja LIN, IrDA, obsługa kart SD i sterowanie modemem) i I2C są uzupełnione znanym z rodziny STM32L0 interfejsem LPUART o małym poborze prądu. Podobnie jest w przypadku liczników - oprócz 16-bitowego licznika przeznaczonego do sterowania silnikami (komplementarne PWM) i 16-bitowych liczników uniwersalnych z opcją PWM dodano dwa liczniki o niskim poziomie poboru prądu Low Power Timer. Blok liczników uzupełnia moduł zegara czasu rzeczywistego RTC z możliwością zasilania z baterii.

Specyfikacja STM32G0A1 jest wyraźnie nastawiona na możliwość stosowania w aplikacjach IoT. Z jednej strony mamy blok szyfrujący z możliwością autoryzacji, a z drugiej strony widać dbałość o niski poziom poboru energii. Umieszczenie modułów peryferyjnych o bardzo niskim poborze prądu sugeruje, że linia Access jest optymalizowana pod względem możliwości niskiego poboru mocy podobnie jak to jest w przypadku STM32L0. Na rysunku 22 pokazano możliwe tryby oszczędzania energii z orientacyjnymi poborami prądu.

Rysunek 22. Orientacyjne pobory prądu dla różnych trybów oszczędzania energii

W nowo wprowadzonym trybie SHUTDOWN mikrokontroler pobiera rekordowo niski prąd 40 nA i 400 nA z włączonym modułem RTC. Tryb STANDBY jest porównywalny w obu seriach 200 nA dla STM32G0 vs 230 nA dla STM32L0. W tym względzie rodzina STM32G0 przejęła najlepsze cechy z energooszczędnej rodziny STM32L0.

Popatrzmy teraz jak wygląda kryterium cenowe. Ceny dla linii Value zostały pokazane na rysunku 23.

Rysunek 23. Orientacyjne ceny mikrokontrolerów STM32G0 Value line

Niestety nie ma w bazie STM32G030 ale są dostępne ceny STM32G070 również Value Line. Jeżeli porównamy te ceny z cenami STM32F0 Value Line z podobną pamięcią Flash (128 kB) to ceny STM32G0 są trochę niższe. Jednak w przypadku F0 możemy znaleźć elementy gorzej wyposażone w pamięć i sporo tańsze. Być może kiedy rodzina STM32G0 powiększy się o prostsze elementy, to będzie również konkurencyjna.

Na rysunku 24 pokazano ceny STM32G081 z pamięcią 128 kB z linii Access AES. Te ceny są zdecydowanie wyższe, ale trzeba pamiętać, ze możliwości mikrokontrolerów są spore.

Rysunek 24. Orientacyjne zeny mikrokontrolerów z linii Access AES

Podsumowanie

Trudno odpowiedzieć jednoznacznie na postawione na początku pytanie: „co wybrać”. Zaprezentowałem kilka cech każdej z rodzin, które mogą rzutować na decyzję, zależnie od potrzeb aplikacji. Najważniejsze z nich to zastosowany rdzeń, wyposażenie w pamięć, układy peryferyjne, szacunkowy pobór prądu w różnych trybach oszczędzania energii i orientacyjna cena. STM32F0 historycznie są najstarsze i mają relatywnie gorszy rdzeń Cortex-M0. Za to dostępna jest bardzo szeroka gama tych mikrokontrolerów we wszystkich liniach z wieloma możliwościami doboru konfiguracji wyposażenia do aplikacji. Precyzyjnie dobrany element będzie miał optymalnie dobraną cenę, bo nie płacimy za możliwości, których nie wykorzystamy, na przykład za zbyt dużą pamięć lub nie potrzebne peryferia.

STM32L0 zoptymalizowane do pracy z niskim poborem energii są naturalnym wyborem dla urządzeń zasilanych bateryjnie. Umieszczenie w bardziej rozbudowanych liniach modułów kryptograficznych pozwala myśleć o stosowaniu w aplikacjach IoT. STM32L0 mają nowszy rdzeń Cortex-M0+, ale częstotliwość taktowania jest ograniczona do 32 MHz. Ograniczenie wydajności w części zastosowań może się okazać znaczące.

Najnowsza seria STM32G0 wydaje się obecnie najbardziej atrakcyjna technicznie. Nowszy rdzeń, dobre wyposażenie w układy peryferyjne i pamięć, oraz niski pobór mocy porównywalny z STM32L0 to silne strony tej rodziny. Ze wszystkich trzech rodzin rdzeń jest taktowany najwyższą częstotliwością 56 MHz i będzie najbardziej wydajny. Ukierunkowanie na możliwości łatwego stosowania w IoT to dodatkowa zaleta. Problemem może być obecnie mała ilość dostępnych typów i tym samym ograniczona możliwość dobrania mikrokontrolera do aplikacji. To oczywiście z czasem powinno się zmieniać przy założeniu, że ST będzie dalej rozwijać tę bardzo ciekawą rodzinę.

Przy wyborze może być bardzo pomocny selektor mikrokontrolerów wbudowany w konfigurator projektu STM32CubeMX lub STM32CubeIDE. Można tak wybierać kierując się wieloma kryteriami: rodziną mikrokontrolera, linią w ramach rodziny, ceną, ilością linii I/O, rozmiarem pamięci, czy wbudowanymi układami peryferyjnymi.

Tomasz Jabłoński, EP

Artykuł ukazał się w
Elektronika Praktyczna
styczeń 2020
DO POBRANIA
Pobierz PDF Download icon
Zobacz też
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio kwiecień 2020

Świat Radio

Magazyn użytkowników eteru

APA - Automatyka Podzespoły Aplikacje marzec 2020

APA - Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich kwiecień 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów