Jak korzystać z dokumentacji do STM32 – Datasheet, Reference Manual i Errata

Najczęściej zadawanym pytaniem przez osoby zaczynające swoją przygodę z mikrokontrolerami jest to, skąd czerpać wiedzę i uczyć się o nowych układach. Wśród padających odpowiedzi (poza książkami i kursami online) – szczególnie ze strony doświadczonych osób zajmujących się programowaniem uC od lat – jest dokumentacja.

Sam z doświadczenia wiem, że dokumentacja jest bardzo pomocna, a nawet niezbędna przy projektach embedded, co staram się pokazywać w swoich artykułach na blogu. I to nawet wtedy, gdy korzystamy z bibliotek (jak HAL Library dla STM32), nie mówiąc już o pisaniu typowo korzystając z rejestrów. Jednak czy początkująca osoba jest w stanie nauczyć się programowania z dokumentacji, jeżeli dopiero rozpoczyna naukę mikrokontrolerów lub w ogóle przygodę w IT? Na pewno będzie to trudne. Powodów jest kilka:

  • Dokumentacje są długie i na początku ciężko się w ich „połapać”.
  • Do wielu zastosowań nie potrzebujemy całej wiedzy z dokumentacji, a jedynie fragmentów, które jest ciężko „wyłuskać”.
  • Dokumentacje są napisane w języku angielskim z użyciem specjalistycznego słownictwa, co może być sporym utrudnieniem, jeżeli ktoś nigdy nie programował mikrokontrolerów.
  • Często plików do danego mikrokontrolera jest kilkanaście, a nawet kilkadziesiąt i nie wiadomo, które są nam tak naprawdę potrzebne.

Z dokumentacją do STM32 nie jest inaczej. Pomimo tego, że są naprawdę dobrze napisane i często mogą służyć jako swego rodzaju poradnik, do każdego układu mamy do dyspozycji kilkadziesiąt plików PDF, które potrafią składać się nawet z kilku tysięcy stron. Jak poradzić sobie z tym na początku nauki STM32? Na to pytanie postaram się odpowiedzieć w poniższym artykule, gdzie na podstawie układu STM32L476RG pokażę, gdzie znaleźć najważniejsze informacje, które są potrzebne przy starcie.

Skąd pobrać dokumentację do mikrokontrolera

Oczywiście ze strony producenta. Choć odpowiedź wydaje się prosta, nie zawsze jest jednak tak łatwo znaleźć odpowiednie pliki, które będą nam potrzebne, jeśli po raz pierwszy jesteśmy na stronie ST. Wpisujemy zatem w przeglądarkę nazwę naszego mikrokontrolera i przechodzimy do strony producenta. W moim przypadku będzie to ten adres. Podstawową dokumentację (typowy Datasheet) znajdziemy pod tytułem z nazwą naszego mikrokontrolera.

Reszta potrzebnych plików znajduje się w zakładce Documentation.

Mamy tutaj do dyspozycji bardzo dużo ciekawych dokumentów, które w miarę poznawania STM32 powinniśmy przynajmniej przejrzeć (oczywiście w miarę własnych potrzeb), chociażby po to, aby poznać, jakie możliwości oferuje nasz mikrokontroler. Wiele elementów jest wspólnych dla różnych układów, szczególnie, jeżeli są z tej samem serii, dlatego poznanie jednego uC pozwala nam już znacznie łatwiej odnaleźć się przy użyciu innego. Na początku nauki potrzebujemy jednak tak na prawdę jeszcze dwóch plików: Reference Manual i Errata Sheet.

W artykule postaram się opisać tylko najważniejsze elementy dokumentacji potrzebne (moim zdaniem) osobom początkującym. Podając numery stron będę odnosił się do dokumentacji dla mikrokontrolera STM32L476RG, jednak układ elementów w pliku PDF jest podobny dla wszystkich uC z serii STM32. Aby odnaleźć opisywane materiały w innym pliku, wystarczy sprawdzić w spisie treści, na której stronie znajduje się konkretny rozdział.

Datasheet – zasilanie, peryferia i FT

Datasheet to najbardziej szczegółowa dokumentacja. Obejmuje kilka układów o tym samym oznaczeniu (np. STM32L476xx) w różnych obudowach i z różnymi konfiguracjami pamięci Flash i RAM. W pliku tym znajdziemy dokładne informacje o napięciu zasilania układu, poborze prądu w różnych trybach oraz dokładna listę urządzeń peryferyjnych dostępnych w układzie.

Pełna lista układów peryferyjnych dostępnym w danych chipie znajdziemy w Tabeli 2. STM32L476xx family device features and peripheral counts na stronie 15. Dostępne są tutaj informacje dotyczące ilości pamięci, ilości interfejsów komunikacyjnych, GPIO oraz typ obudowy. Jest to istotna część dokumentacji w przypadku, gdy mamy już określone wymagania dla naszego projektu i szukamy mikrokontrolera dedykowanego do konkretnego zastosowania.

Kolejnym ważnym elementem Datasheet-u jest diagram blokowy mikrokontrolera na stronie 17. Możemy się tutaj zapoznać z siatką połączeń poszczególnych elementów mikrokontrolera – szyn, układów DMA, interfejsów, pamięci i zegarów. Pozwala nam dokładniej poznać strukturę układu. Z punktu widzenia początkującej osoby najważniejszą informację jest to, do jakich szyn podłączone są peryferia np. Timery. Jest to potrzebne do sprawdzenia, z jaką częstotliwością są taktowane układy liczników, co pozwala prawidłowo ustalić częstotliwość pracy m.in. wyjść PWM.

Istotną kwestią z punktu widzenia programisty STM32 jest tabela 15. i 16. na stronach od 67 do 91, a także tabela 17. i 18. na stronach od 92 do 106. W tabeli 15. i 16. znajdziemy informację o strukturze pinów, a w tym o istotnej informacji, czy dany pin jest FT (5 V tolerant IO). Ma to duże znaczenie w przypadku gdy podłączamy w naszym projekcie elementy pracujące z napięciami 5 V (przypomnę że STM32 standardowo pracuje z systemem napięć 3,3 V) np. czujnikami i nie chcemy uszkodzić mikrokontrolera.

Poza tym w tabeli 16. oraz 17. i 18. znajdziemy informacje o tym, jakie funkcje alternatywne są dostępne na poszczególnych pinach. Tabele te są dość długie i szczególnie na początku nieporęczne, jednak niosą bardzo dużo informacji potrzebnych przy konfiguracji wejść i wyjść uC. W kwestii funkcji alternatywnych na pinach znacznie łatwiej jest odnaleźć się korzystając z konfiguratora CubeMX i graficznego sprawdzenia, na jakich nóżkach dany układ peryferyjny może być umieszczony.

Każda z osób uczących się STM32 dochodzi do momentu, w którym chciałaby stworzyć własny projekt i dedykowaną do niego płytkę PCB. W tym momencie kluczową kwestią jest to, jak powinno wyglądać zasilanie mikrokontrolera. Korzystając z zestawów ewaluacyjnych nie musimy się martwić tą kwestią, jednak chcąc zaprojektować własny obwód drukowany musimy wiedzieć gdzie doprowadzić napięcie zasilające i jak je filtrować. Taką informację znajdziemy na schemacie 20. na stronie 113. Może tutaj zobaczyć jakie piny powinny mieć doprowadzone napięcie zasilania oraz jakie kondensatory, ile i przy jakich pinach powinny się znaleźć.

Poza tym w dokumencie znajdziemy całą masę informacji dotyczących charakterystyk napięciowych i prądowych wszystkich peryferiów, charakterystyki zegarów oraz informacji o obudowach, oznaczeniach na nich i sposobach pakowania. Wiedza ta jest potrzebna np. przy produkcji na większą skalę, jednak mało przydatna na początku drogi z mikrokontrolerami.

Reference Manual – funkcje układów peryferyjnych i opis rejestrów

Reference Manual to najobszerniejsza dokumentacja mikrokontrolera (w przypadku STM32L476RG liczy 1903 strony). Jest to absolutny niezbędnik w przypadku, jeśli chcemy programować STM32 bez użycie HAL Library. Jednak nawet w przypadku zastosowania biblioteki HAL, Reference Manual jest dla programisty ważnym dokumentem i często bez niego trudno jest znaleźć rozwiązanie na pojawiające się problemy.

W instrukcji znajdziemy opis funkcjonalności wszystkich elementów, układów peryferyjnych i interfejsów dostępnych w mikrokontrolerze. W rozdziałach dotyczących poszczególnych części uC znajdziemy informacje, w jaki sposób może być użyty dany układ oraz jak przebiega proces konfiguracji i inicjalizacji. Na końcu każdego rozdziału znajdziemy opis wszystkich rejestrów i poszczególnych bitów danego interfejsu. Strukturę takiego rozdziału oraz porady, w jaki sposób korzystać z informacji zawartych w Reference Manual-u przedstawię na przykładzie jednego z interfejsów. Opisanie każdego oddzielnie (nawet biorąc pod uwagę tylko te najważniejsze) wydaje mi się bezcelowe i zajęło by bardzo dużo miejsca.

Najpierw jednak prześledźmy, jakie najważniejsze informacje znajdziemy w instrukcji. Jedną z istotnych kwestii jest tryb bootowania naszego mikrokontrolera. Określa on rodzaj pamięci, z jakiego rozpoczyna pracę układ po starcie. Ma to duże znaczenie, gdy chcemy uruchomić mikrokontroler np. w trybie bootloader-a. Opis trybów i odpowiadających im stanów na pinach BOOT dostępny jest w tabeli 6. na stronie 93.

W dalszej części dokumentu znajdziemy informację o sposobie konfiguracji pamięci, zegarów, DMA, kontrolera przerwań NVIC, wyjść GPIO, konwerterów ADC i DAC, TIMER-ów oraz interfejsów UART, SPI, I2C, kontrolera LCD czy USB. Przykładowy rozdział opiszę na podstawie magistrali UART.

Rozdział 40. na stronie 1340 rozpoczyna się od ogólnego opisu interfejsu i jego podstawowych właściwości. Dowiemy się tutaj z jaką prędkością maksymalną może komunikować się UART, jakie ilości bitów danych i stopu, a także tryby parzystości obsługuje oraz to, że może współpracować z DMA. Dalej znajdziemy informacje, w jakich trybach UART może pracować (IrDA, LIN, wsparcie dla ModBus). Umieszczona jest również tabela pokazująca, które interfejsy UART (przeważnie mamy ich do dyspozycji kilka) może w danych trybie się komunikować.

W dalszej części znajdziemy opis ramki dla każdego z trybów oraz szczegółowy podrozdział dotyczący funkcjonalności. W takim rozdziale przedstawiona jest przede wszystkim procedura konfiguracji rejestrów niezbędna do uruchomienia interfejsu. Tutaj najwięcej czasu spędza każdy programista, który chce skonfigurować UART za pomocą rejestrów bez użycia HAL Library. Poniżej zamieściłem przykładową procedurę do transmisji.

W przypadku UART-u w Reference Manual-u znajdziemy także wzory na obliczenie wartości potrzebnych do wpisania w rejestrach, aby skonfigurować transmisję z danych baud rate (strona 1356). W tabeli 248. znajdziemy także błędy w prędkości transmisji dla poszczególnych ustawień (przy niektórych wartościach baudrate nie jesteśmy w stanie skonfigurować idealnie dla danych prędkości).

W każdym z rozdziałów dotyczących interfejsów znajdziemy także informację dotyczącą przerwań, jakie może generować. Na końcu umieszczone są dokładne opisy bitów w rejestrach. Na początku na pewno ciężko jest w tym odnaleźć, ponieważ rejestry w STM32 są 32-bitowe. Polecam jednak powoli zapoznawać się z rejestrami w trakcie nauki nawet w przypadku używania biblioteki HAL, ponieważ gdy nam coś nie działa, najłatwiej jest sprawdzić, czy właściwie są skonfigurowane najważniejsze rejestry interfejsu i w ten sposób znaleźć miejsce wadliwego kodu.

W podobny sposób zorganizowane są rozdziały dla innych układów peryferyjnych. Na końcu Reference Manual znajdziemy jeszcze rejestry dotyczące debugowania oraz informację o Unique device ID register, czyli rejestrze przechowujących unikalną wartość charakterystyczną dla naszego mikrokontrolera. Może być ona przydatna, gdy chcemy w jakiś sposób identyfikować poszczególne urządzenia przy masowej produkcji.

Errata, czyli dlaczego mi nie działa, chociaż robię dobrze

Errata sheet do dokument do którego sięgamy z przykrością, jednak czasami może się okazać rozwiązaniem naszych długotrwałych problemów. Dokument ten zawiera błędy występujące na poziomie krzemu danego układu, które dotychczas się udało zidentyfikować. Jeżeli nam coś nie działa, a sprawdziliśmy już wszystkie możliwości i jesteśmy pewni, że konfigurujemy mikrokontroler poprawnie, warto zajrzeć do Erraty. Znajdziemy tam informacje odnośnie występujących błędów w uC, obostrzenia dla używania kilku interfejsów jednocześnie, ale co najważniejsze w wielu przypadkach sposób na rozwiązanie naszego problemu (Workaround). Dobrym przykładem takiego przypadku jest bardzo powszechnie znany problem z konfiguracją interfejsu I2C na mikrokontrolerach z serii STM32F105/107, gdzie w Erracie znajdziemy dość długą, ale co najważniejsze, skuteczną procedurę inicjalizacji I2C.

Podsumowanie

Dokumentacja do mikrokontrolera dostarcza nam podstawowej wiedzy o jego zasobach i działaniu. Na początku przygody może jednak nas przytłaczać – jest długa, napisana w obcym języku i z technicznym słownictwem. Powinniśmy się z nią stopniowo zapoznawać w całości, jednak na początku potrzebne są właściwie tylko fragmenty dokumentacji. Mam nadzieję, że w przedstawione w artykule najważniejsze elementy plików STM32 pomogą, zwłaszcza początkującym osobom, wdrożyć się w ich używanie i zachęcą do samodzielnego studiowania.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *