STM32F3 - garść porad od strony sprzętowej
| TechnikaNowa seria mikrokontrolerów STM32F3 bazujących na rdzeniu ARM Cortex-M4F (z FPU) zawiera liczne peryferia analogowe i cyfrowe: 12-bitowy przetwornik A/C, 12-bitowy przetworniki C/A, szybkie komparatory analogowe, wzmacniacze PGA i 16-bitowy przetwornik A/C typu sigma-delta. Z kolei peryferie cyfrowe obejmują: timery, interfejsy komunikacyjne (USB, SPI, USART, I²C, CAN, HDMI), kontroler przycisków pojemnościowych, moduł do obliczania CRC, moduł DMA, jednostkę MPU, linie I/O i wiele innych.
Od strony zastosowań układy STM32F3 charakteryzują się dużą uniwersalnością oraz ukierunkowaniem na wydajne aplikacje przemysłowe, które metodami cyfrowymi przetwarzają analogowe sygnały sterujące w systemach sterujących automatyki i przemysłu. Poniżej przestawiamy garść porad na temat aplikowania tego układu od strony sprzętowej.
Zasilanie
Mikrokontrolery z rodziny STM32F zasila się napięciem 2...3,6 V podawanym na końcówki VDD. Napięcie to jest stabilizowane wewnątrz układu do poziomu 1,8 V i dalej wykorzystywane do zasilania części cyfrowej mikrokontrolera oraz z pominięciem stabilizacji używane do zasilania driverów linii GPIO (rys. 1). Peryferyjne układy analogowe, takie jak przetworniki A/C i C/A, wzmacniacz operacyjny, komparator, układ resetu, PLL, zasilane są dodatkowym napięciem, podawanym na VDDA o wartości 2-3,6 V.
Ważne jest, że napięcie to musi być wyższe od podawanego na VDD i ma być załączane wcześniej. Z kolei napięcie VBAT (1,65-3,6 V) zasila układ zegara RTC, logikę wybudzania układu, rejestry backupu. Zasilanie to jest załączane za pomocą wewnętrznego przełącznika zawartego w MCU, gdy VDD jest niedostępne.
Typowo służy do podłączenia baterii podtrzymującej. Gdy wejście VBAT jest nieużywane, łączy się je z VDD. W wybranych wersjach układów (STM32F37x i STM32F38x) dostępne są jeszcze dwie dodatkowe końcówki zasilające: VDDSD12 (2-3,6 V) dla przetworników sigma-delta SDADC1 oraz 2 i wybranych pinów I/O (PB, PE) oraz napięcie VDDSD3 dla przetwornika SDADC3 i wybranych pinów I/O, które są współdzielone z liniami przetworników.
Oba te napięcia muszą być niższe lub równe VDDA, a jeśli nie są wykorzystywane, końcówki należy połączyć z VDDA. Przetworniki te mają ponadto własną końcówkę masy VSSSD.
W sytuacji, gdy przetworniki 1 lub 2 są nieużywane a 3 tak, należy zapewnić warunek, aby napięcie zasilania dla tych nieużywanych było nie wyższe niż dla używanego. Aby zachować dużą dokładność konwersji A/C, napięcie zasilające dla układów analogowych powinno być filtrowane i separowane od zasilania części cyfrowej, zwłaszcza gdy wykorzystuje się jedno napięcie zasilające dla całości.
Reset
W mikrokontrolerze STM32F3 dostępne są trzy typy resetowania: systemowy, zasilania i backupu. Reset systemowy kasuje zawartość wszystkich rejestrów do wartości początkowych z wyjątkiem rejestru flag w kontrolerze sygnału zegarowego CSR i rejestru backupu. Jest wymuszany przez niski stan na końcówce NRST, działanie układu watchdog, działanie programowe (wymuszone instrukcją, działaniem układu zarządzania niskim poborem mocy, pracą loadera kodu) oraz pojawieniem się lub zanikiem napięcia zasilania (POR/PDR) lub wyjściem ze stanu standby.
Reset backupu, kasujący rejestry zachowywane przy resecie systemowym, jest wymuszany programowo oraz przy pojawieniu się napięć VDD lub VBAT, o ile poprzednio były wyłączone. Reset zasilania jest powiązany z poprawną wartością napięć zasilających: POR monitoruje VDD PDR - VDD i VDDA, z tym że reakcja na VDDA jest możliwa do zablokowania programowego. Układ resetu ma wbudowaną histerezę.
Dodatkowo dostępny jest układ monitorowania wartości napięcia zasilania PVD, który dostarcza informacji na temat VDD w odniesieniu do ustalonego progu w rejestrze PWR. W zależności od ustawień przekroczenie lub spadek napięcia zasilania względem wartości progowej generuje przerwanie. Jest to opcja użyteczna do wykonania tzw. awaryjnego wyłączenia systemu. Wczesne wykrycie obniżającego się napięcia zasilania pozwala zareagować, zanim napięcie spadnie poniżej wartości granicznej.
Zegary
Do taktowania mikrokontrolera można wykorzystać trzy źródła sygnału: wewnętrzny oscylator RC 8 MHz (HSI), oscylator zewnętrzny (z generatora lub kwarcu 4-32 MHz) i zegar z pętlą PLL. Prócz tego dostępny jest "wolny" zegar wewnętrzny o częstotliwości około 40 kHz taktujący watchdog i RTC w celu realizacji funkcji automatycznego wybudzania (LSI).
Ostatni generator 32,768 kHz (LSE) stabilizowany zewnętrznym kwarcem służy jako podstawa czasu dla zegara RTC. Możliwe jest też podanie jako sygnał LSE sygnału z oscylatora zewnętrznego. Każdy oscylator może być programowo włączany i zatrzymywany. Sygnał zegar HSI bazujący na wewnętrznym oscylatorze RC 8 MHz może być wykorzystany do taktowania bezpośrednio, a po podzieleniu przez 2 służyć jako sygnał wzorcowy dla PLL.
Wartość częstotliwości jest trymowana na etapie produkcji i waha się pomiędzy poszczególnymi układami maks. 1%. Dodatkowo możliwe jest przekierowanie wyjścia HSI do wejścia multipleksera MCO i dalej do 16-bitowego timera, co pozwala na precyzyjniejszą kalibrację.
Bootowanie
W mikrokontrolerach STM32F3xx dostępne są trzy tryby bootowania programu, które wybiera się, ustawiając właściwy stan na pinach BOOT 0 i 1. Jako źródło kodu można wskazać pamięć Flash, pamięć systemową lub SRAM.
Podczas produkcji STMicroelectronics programuje w pamięci systemowej boot loader pozwalający na reprogramowanie pamięci Flash za pomocą interfejsu stworzonego przez USART 1 lub 2 lub USB z funkcją DFU (Device Firmware Upgrade). Dzięki temu możliwe jest uaktualnianie oprogramowania systemowego podczas pracy.
Debugowanie
Mikrokontroler STM32F3xx ma zintegrowany standardowy port szeregowy ARM CoreSight do debugowania i JTAG (SWDP). Zawiera on 5 pinów współdzielonych z liniami GPIO, które służą jako linie do testowania JTAG lub debugowania. Warto zwrócić uwagę na elastyczność zastosowanego rozwiązania - piny GPIO PA13-15 i PB3-4 po resecie są skonfigurowane do działania jako linie debuggera.
Wyłączenie funkcji odbywa się programowo. Z uwagi na poprawną pracę wymienionych interfejsów linie te wyposażono w rezystory podciągające do masy lub zasilania, przez co spełnione są wymagania IEE w stosunku do portu JTAG, który wymaga tego, aby wyeliminować możliwość niekontrolowanego działania. Podłączenie pomiędzy mikrokontrolerem a standardowym złączem JTAG pokazane zostało na rysunku 2.
Płytka drukowana - zalecenia
O ile w wielu notach aplikacyjnych i projektach referencyjnych można znaleźć przykładowe schematy urządzeń z wykorzystaniem mikrokontrolerów STM32F, co ułatwia projektowanie od strony układowej, to jednak projekt płytki drukowanej z reguły jest całkowicie po stronie konstruktora. Wiele projektów układowych ma charakter open-source lub jest przygotowywana w ramach wsparcia technicznego przez producenta.
Niemniej praktyka pokazuje, że mozaikę ścieżek nie udostępnia się z równą lekkością. Być może też dlatego, że niełatwo jest ją wykorzystać bez dużych zmian, przez co całość traci sens. Niemniej coraz wydajniejsze układy analogowe, w tym głównie przetworniki A/C o dużej rozdzielczości, wymagają bardzo starannego i przemyślanego projektu PCB.
Inaczej pojawiają się zakłócenia od obwodów wykonawczych, losowe błędy w pracy programu i projekt staje się wielkim problemem dla projektanta. Stąd kluczem do dobrze i stabilnie działającego układu z nowoczesnym mikrokontrolerem jest staranny i przemyślany projekt PCB. Producent zaleca, aby płytka drukowana dla układów z mikrokontrolerami STM32F3 była najlepiej 4-warstwowa, z czego dwie warstwy należy poświęcić na masę i zasilanie VDD.
Gdy jest to niemożliwe, zaleca się, aby projekt płytki zacząć od starannego rozmieszczenia ścieżek masy i zasilania dla wszystkich układów na PCB. Dotyczy to głównie separacji obwodów analogowych wysokoprądowych, niskonapięciowych, logiki cyfrowej i zapewnienia możliwie dużego dystansu między obwodami analogowymi niskonapięciowymi a układami cyfrowymi z uwagi na EMI.
Każdy z takich bloków powinien być umasiany oddzielnie, a masy połączone tylko w jednym punkcie. Ścieżki doprowadzające zasilanie powinny być prowadzone blisko linii masowych, a wolna przestrzeń po obu stronach laminatu pomiędzy komponentami wypełniona masą. Wykorzystywanie dużej liczby przelotek (ponad 1) na głównych liniach zasilania jest błędem projektowym.
Wszystkie ścieżki zasilające muszą być odsprzęgane parą kondensatorów: ceramicznym 10-100 nF i tantalowym ok. 4,7 μF umieszczonym jak najbliżej końcówek STM32F3, po tej samej stronie laminatu co MCU, tak jak na rysunku 3. Aby zapewnić wysoką odporność projektu na zaburzenia elektromagnetyczne, konieczne jest spolaryzowanie każdej nieużywanej końcówki poprzez połączenie z masą, zasilaniem lub podciągnięcie rezystorem.
Końcówki, które można konfigurować, należy ustawić programowo jako wyjścia. Wejścia przerwań, liczników i inne końcówki, na których zmiany stanu silnie wpływają na działanie programu, trzeba utrzymywać w możliwie niskiej impedancji, ekranować płaszczyzną masy i odsuwać od potencjalnych źródeł zaburzeń (sygnały zegarowe i stroby długie przewody wejściowe), gdyż działają one jak anteny i mogą poprzez efekt przesłuchu przy silnym polu EM zakłócić działanie kodu.
Różnice w ramach rodziny
Na koniec warto wspomnieć o głównych różnicach pomiędzy dwiema głównymi liniami układów wchodzącymi w skład rodziny STM32F3: STM32F31x i STM32F38x oraz STM32F30x i STM32F37x. STM32F31x i STM32F38x wymagają zasilania napięciem 1,8 V±8% dla VDD oraz 1,65-3,6 V dla części analogowej VDDA.
Wewnętrzny regulator napięcie jest wyłączony i VDD zasila bezpośrednio część cyfrową mikrokontrolera. W układach tych nie są dostępne funkcje związane z resetem jak POR, PDR i PVD, tryb standby i pośrednio także Stop, interfejs USB, obsługa baterii podtrzymującej VBAT.
Robert Magdziak