Kursy • Poradniki • Inspirujące DIY • Forum
STM32 - Wstęp teoretyczny
W ramach kursu omówimy podstawy programowania mikrokontrolerów STM32. Jako płytka bazowa posłuży nam relatywnie tani model NUCLEO-F103RB. Jest to bardzo prosty, ale dzięki temu dość tani moduł. Na płytce znajdziemy mikrokontroler, programator SWD oraz przejściówkę UART-USB.
Płytka zapewnia dostęp do prawie wszystkich wyprowadzeń mikrokontrolera, będziemy więc mogli poeksperymentować podłączając dużo swoich układów. Jest również przygotowana do współpracy z shieldami Arduino.
Do korzystania z kursu potrzebna będzie podstawowa znajomość języka C (można wspierać się kursem Arduino dla początkujących). Osoby mające doświadczenie z układami AVR będą miały ułatwione zadanie, jednak ich znajomość nie jest konieczna. Kurs omówi podstawy programowania układów STM32 i jest adresowany do osób zaczynających przygodę z tymi mikrokontrolerami.
Modne pojęcie "ARM" - co się pod nim kryje?
Firma ARM (Advanced RISC Machines) od lat 80 ubiegłego wieku zajmuje się projektowaniem mikroprocesorów. Co ciekawe, jako jedna z pierwszych odkryła potencjał własności intelektualnej – zamiast inwestować w fabryki i produkować własne układy, jedynie projektuje procesory, a ich produkcją zajmują się inne firmy.
W efekcie, każdy układ jest dziełem co najmniej dwóch firm – ARM projektuje rdzeń, a producent układu (np. Atmel, ST, NXP) tworzy ostateczną konfigurację (ilość pamięci, układy peryferyjne) oraz produkuje fizyczny układ.
Podział mikrokontrolerów
ARM zajmuje się projektowaniem od wielu lat, powstało więc już sporo różnych procesorów. Omówmy kilka popularnych generacji układów. Podstawowy podział wyznaczają architektury, można o nich myśleć jak o generacjach procesorów. Kolejne są numerowane, a najnowsza ma numer 7. Pełna nazwa ma postać ARMv7. Oczywiście wcześniej były np. ARMv4, ARMv5, itd.
W obrębie każdej architektury może być dostępnych wiele rdzeni. Są one niestety nazywane w sposób bardzo podobny do samej architektury np. ARM7, ARM9, czy ARM11.
Jednak numery identyfikujące rdzenie, nie mają związku z numeracją architektur.
Efektem jest straszny bałagan.
Firma ARM chyba dostrzegła zamieszanie w nazwach i zamiast ARM13, rdzenie najnowszej architektury ARMv7 mają nową nazwę - Cortex. A może po prostu byli przesądni i bali się, że 13 przyniesie pecha?
Układy z rodziny ARM wielokrotnie już pojawiały się na naszym forum. Poniżej kilka przykładów, wraz z opisem architektur oraz rdzeni:
Model | Producent | Arch. | Rdzeń | Do poczytania/Więcej informacji |
---|---|---|---|---|
LPC-2114 | NXP | ARMv4 | ARM7 | Stary kurs programowania (na forum). |
AT91SAM9260 | Atmel | ARMv4 | ARM9 | Recenzja modułu pod kontrolą Linuxa. |
BCM2835 | Broadcom | ARMv6 | ARM11 | Kurs Raspberry Pi (z tym procesorem) |
LPC-1114 | NXP | ARMv6 | CortexM0 | Stary kurs programowania (na forum). |
STM32F103 | ST | ARMv7 | CortexM3 | Opisywany w niniejszym kursie |
AM-335x | TI | ARMv7 | CortexA8 | Kurs BeagleboneBlack (z tym proc.) |
Dostępne warianty ARM Cortex
Architektura ARMv7 występuje w trzech wariantach:
- Cortex-A – mikrorocesory, przeznaczone głównie do obsługi systemów operacyjnych, np. Linux, Android, Windows CE. Wymagają zewnętrznych układów do pracy. Często mają moc obliczeniową większą, niż komputery stacjonarne dostępne kilka lat temu.
- Cortex-M – mikrokontrolery, czyli to co nas interesuje. Układy mają zintegrowaną pamięć oraz układy peryferyjne.
- Cortex-R – układy przeznaczone do zastosowaniach w systemach czasu rzeczywistego.
Zastosowanie układów z rdzeniem Cortex-A jest dosyć skomplikowane, chociaż gotowe moduły, jak np. BeagleBone Black sprawiają, że układy mogą być wykorzystane przez hobbystów. Natomiast układów Cortex-R nigdy, poza dokumentacją nie widziałem, ale kto wie, może istnieją...
Nasz wybór - Cortex-M
Mikrokontrolery Cortex-M są tym co nas interesuje - alternatywą dla znanych i sprawdzonych układów 8-bitowych. Rdzeń Cortex-M jest również dostępny w kilku wariantach:
- Cortex-M0 – prosty układ. Miał być konkurencją dla obecnych 8-bitowców.
- Cortex-M3 – główna rodzina układów, pojawiła się jako pierwsza na rynku, jest obecnie najbardziej popularna.
- Cortex-M4 / M7 – najszybsza i najbardziej rozbudowana wersja rdzenia. Zawiera instrukcje DSP oraz koprocesor operacji zmiennopozycyjnych (FPU).
STM32
Jak wybrać która wersja nas interesuje? Ja proponuję następujące kryterium:
- Jeśli szukamy najtańszego układu lub projektujemy urządzenie, które będzie produkowane w dużych ilościach, warto rozważyć zastosowanie rdzenia Cortex-M0.
- Jeśli, chcemy spróbować sił w zaawansowanym DSP, potrzebujemy arytmetyki zmiennopozycyjnej? Chcemy liczyć FFT w czasie rzeczywistym? Wtedy warto wybrać Cortex-M4 lub Cortex-M7.
- Jeśli nadal nie wiemy, który wybrać, to na 99% potrzebujemy Cortex-M3. Ten model jest najpopularniejszy i ma naprawdę duże możliwości.
Jeśli projektujemy urządzenie które nie jest robotem (takim jak opisane w naszym katalogu), warto jeszcze rozważyć kwestię poboru prądu. ST posiada w ofercie specjalne układy przystosowane do pracy z minimalnym poborem mocy.
Wybór układu może ułatwić nam również strona:
http://www.st.com/web/en/catalog/mmc/FM141/
Wszystkie nazwy układów zaczynają się od STM32xx, gdzie xx oznacza:
- F0 - rdzeń Cortex-M0, tanie i proste układy, taktowane zegarem do 48MHz.
- F1 - rdzeń Cortex-M3, zegar do 72MHz. Niektóre modele mają specjalne peryferia do sterowania silnikami.
- F2 - mocniejsza wersja F1, zegar do 120MHz.
- F3 - rdzeń Cortex-M4, zegar maksymalnie 72MHz, obsługa instrukcji DSP oraz arytmetyki liczb zmiennopozycyjnych.
- F4 - mocniejsza wersja F3, taktowanie do 180MHz.
- F7 - najnowsza wersja, przyspieszona względem F4, ponoć nawet dwa razy.
- L0 - układ energooszczędny z rdzeniem Cortex-M0.
- L1 - model energooszczędny z rdzeniem Cortex-M3.
Nadal układów jest sporo, ale mam nadzieję, że teraz będzie nieco łatwiej dostrzec pewną systematykę w ofercie firmy.
Jak chodzi o aktualne roboty budowane przez czytelników Forbota, to najczęściej pojawiają się w nich układy z grupy F1, np. STM32F103. Wybór wydaje się jak najbardziej uzasadniony! Jednak jeśli uznamy, że nasz projekt ma większe wymagania obliczeniowe, możemy wybrać model STM32F2, albo nawet STM32F4.
Wiele z mikrokontrolerów STM32 jest zgodnych na zasadzie "pin-do-pinu".
Gotowe zestawy do kursów Forbota
Komplet elementów Gwarancja pomocy Wysyłka w 24h
Zestaw ponad 120 elementów do przeprowadzenia wszystkich ćwiczeń z kursu można nabyć u naszych dystrybutorów! Dostępne są wersje z płytką Nucleo lub bez niej!
Zamów w Botland.com.pl »Nasz mikrokontroler - STM32F103RBT6
Czas przyjrzeć się naszej płytce. NUCLEO-F103RB wyposażona jest w 2 mikrokontrolery, jednak jeden z nich, to tylko programator. Nasz „główny” układ to STM32F103RBT6. Jak widzimy należy do grupy F1, czyli mikrokontrolerów z rdzeniem Cortex-M3.
Uwaga! Z nieznanej nam przyczyny producent płytki NUCLEO na opakowaniu zestawu nadrukował informację, że wykorzystany mikrokontroler jest wyposażony w rdzeń Cortex-M4. Jest to oczywiście błędem! Jest, to Cortex-M3.
Najłatwiej zrozumieć skąd bierze się "03" w oznaczeniu porównując układ z pozostałymi z grupy.
- STM32F100 - wersja "budżetowa", maksymalny zegar 24MHz
- STM32F101 - zegar do 36MHz
- STM32F102 - 48MHz
- STM32F103 - 72MHz
- STM32F105/107 - 72MHz, więcej układów peryferyjnych
Natomiast:
R oznacza typ obudowy (LQFP64), a B ilość pamięci Flash (128kB).
Co więc dokładnie dostaliśmy?
- Rdzeń Cortex-M3,
- maksymalne taktowanie 72MHz,
- 128KB pamięci Flash,
- 20KB pamięci RAM,
- DMA,
- 12-bitowy przetwornik A/D,
- 2 przetworniki D/A,
- do 51 pinów I/O,
- 7 timerów,
- 2 interfejsy I2C,
- 3 UART (jeden podłączony z przejściówką na USB),
- 2 interfejsy SPI,
- programator i debugger SWD.
Robi wrażenie w porównaniu do AVRów, prawda?
Porównanie z AVR
Jako najbardziej zbliżony układ z rdzeniem AVR możemy porównywać nasz STM32F103 z układem Atmega128 - oba układy mają po 128KB pamięci Flash. Jednak poza tym parametrem właściwie pod każdym względem wygrywa STM32:
Parametr: | Atmega128 | STM32F103 |
---|---|---|
Pamięć RAM | 4K | 20K |
Zegar | 16MHz | 72MHz |
ADC | 1 x 10-bit | 2 x 12-bit |
UART | 2 | 3 |
SPI | 1 | 2 |
I2C | 1 | 2 |
DMA | - | + |
Nie można również zapominać, że Atmega jest układem 8-bitowym, a STM32F103 daje nam możliwości 32-bitów.
Co najciekawsze, w chwili pisania tego tekstu STM32F103 był tańszy,
niż Atmega128 (i to prawie o połowę).
Kurs STM32 - podsumowanie wprowadzenia
Dlaczego więc warto przesiadać się na STM32? Jest między tymi układami jedna zasadnicza różnica. ATmega128 to prawie najmocniejszy z układów o tej architekturze. Nasz STM32F103 to "niższa klasa średnia", więc jeśli opanujemy jego programowanie, możemy bez problemu wykorzystać STM32F105, czy STM32F205 - układy są nawet zgodne pin do pinu! W przypadku AVR musielibyśmy zmieniać architektuerę, a AVR i AVR32 mają ze sobą mało wspólnego.
Jeśli chodzi o wady, to ja widzę tylko jedną: napięcie 3.3V. Przez wiele lat, wszędzie królowało 5V, więc początkującym może to sprawiać pewne problemy. Jednak można się do tego całkiem szybko przyzwyczaić. Dodam jeszcze, że na szczęście większość wyprowadzeń STM32 toleruje napięcie 5V - jednak do tego jeszcze wrócimy (lepiej nie róbcie sami doświadczeń w tym zakresie).
Nawigacja kursu
Kolejnym etapem nauki będzie instalacja kompilatora, zapoznanie się ze środowiskiem i wgranie pierwszego programu. Jeśli nie chcesz przeoczyć kolejnego odcinka, to skorzystaj z poniższego formularza i zapisz się na powiadomienia o nowych publikacjach!
Autor kursu: Piotr (Elvis) Bugalski
Redakcja: Damian (Treker) Szymański
Powiązane wpisy
arm, cortex, kurs, kursSTM32, mikrokontrolery, programowanie, ST, stm32
Trwa ładowanie komentarzy...