Kurs STM32 – #2 – Podstawowe informacje o STM32

Kurs STM32 – #2 – Podstawowe informacje o STM32

Ruszamy dalej z kursem. Wybór padł na układy STM32, ponieważ pytało o nie coraz więcej osób szukających następstwa dla AVRów.

Na początku warto zapoznać się z podstawowymi informacjami teoretycznymi na temat nowych układów, które będziemy programować!

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.

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.

Logo firmy ARM.

Logo firmy ARM.

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.

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:

ModelProducentArch.RdzeńDo poczytania/Więcej informacji
LPC-2114NXPARMv4ARM7Stary kurs programowania (na forum).
AT91SAM9260AtmelARMv4ARM9Recenzja modułu pod kontrolą Linuxa.
BCM2835BroadcomARMv6ARM11Kurs Raspberry Pi (z tym procesorem)
LPC-1114NXPARMv6CortexM0Stary kurs programowania (na forum).
STM32F103STARMv7CortexM3Opisywany w niniejszym kursie
AM-335xTIARMv7CortexA8Kurs 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.

stm32-2

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:

  1. 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.
  2. 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.
  3. 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.
Źródło: materiały prasowe STM32.

Źródło: materiały prasowe STM32.

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.

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.

Źródło: materiały prasowe STM32.

Źródło: materiały prasowe STM32.

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.

Zestaw elementów do kursu

Gwarancja pomocy na forum Błyskawiczna wysyłka

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!

Kup 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.

Zestaw używany w kursie.

Zestaw używany w kursie.

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

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:Atmega128STM32F103
Pamięć RAM4K20K
Zegar16MHz72MHz
ADC1 x 10-bit2 x 12-bit
UART23
SPI12
I2C12
DMA-+

Nie można również zapominać, że Atmega jest układem 8-bitowym, a STM32F103 daje nam możliwości 32-bitów.

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

arm, cortex, kurs, kursSTM32, mikrokontrolery, programowanie, ST, stm32