Arduino i STM32. Łagodny start z ARMem.

Arduino szturmem zdobyło rynek i serca elektroników hobbystów. Dzięki tej platformie możliwe było rozpoczęcie przygody z mikrokontolerami. Są jednak zastosowania, gdzie moc dostarczana przez popularne UNO albo Leonardo jest za mała. Kuszącą alternatywą jest użycie procesora STM32 w ekstremalnie taniej wersji płytki developerskiej, znanej jako Blue Pill. Tak, nawet tańszej niż klony Arduino UNO, bo dostępnej na popularnym krajowym portalu aukcyjnym poniżej 20 złotych z dostawą.

Sercem modułu jest mikrokontroler STM32F103, o rewelacyjnych parametrach. Cechy wyróżniające ten układ to:

– 32-bitowa architektura ARM Cortex-M3, 

– pracuje na częstotliwościach kilkudziesięciu MHz, 

– posiada niemało pamięci: do 32 KB flash, do 10KB SRAM,

– mnóstwo interfejsów komunikacyjnych: USART, I2C, SPI, CAN, USB 2.0.

– 12-bitowe przetworniki A/D

– tryby niskiego poboru energii

i wiele innych. 

Co będziemy potrzebowali ?

1. Komputer z systemem Windows. Poniższy poradnik opracowałem dla systemu Windows 10.

2. Blue Pill (koszt do 20 zł). Najlepiej wyszukiwać wpisując w wyszukiwarkę hasło: „stm32f103 blue pill”.

3. Konwerter USB-UART. Jeśli jeszcze żadnego nie posiadasz, to polecam zakup modułu opartego o układy FT232, ponieważ instalacja sterowników jest bardzo prosta. Tej instalacji nie omówiłem, ale jeśli będzie taka potrzeba to napisz do mnie i to uzupełnię. Aby nabyć taki moduł wpisz w wyszukiwarkę np. portalu aukcyjnego: „usb uart ft232”. 

Dalsze kroki zakładają, że masz zainstalowane Arduino (w moim przypadku wersja 1.8.8), podłączony konwerter USB-UART i zainstalowane sterowniki konwertera. 

Instalacja, konfiguracja i prosty program migający diodą 

1. Konwerter odłączamy od komputera, aby nie uszkodzić żadnego z urządzeń.

2. Podłączamy Blue Pill do konwertera: 

GND z konwertera -> GND na płytce Blue Pill

5V z konwertera -> 5V na płytce Blue Pill

TX na konwertera -> A10 na płytce Blue Pill

RX na konwertera -> A9 na płytce Blue Pill

 

3. Kolejnym krokiem będzie instalacja wsparcia dla STM32 w środowisku Arduino. 

a) Zaczynamy od dodania dodatkowego adresu URL do menedżera płytek. Wchodzimy w „Plik” („File”), następnie wybieramy „Preferencje” („Preferences”) i w pole „Dodatkowe adresy URL do menedżera płytek” („Additional Boards Manager URLs”) wpisujemy: 

http://dan.drown.org/arduino/package_STM32duino_index.json

Zatwierdzamy klikając „OK”.

b) Instalujemy wsparcie dla naszej płytki. Wchodzimy w „Narzędzia” („Tools”), rozwijamy submenu „Płytka”  („Board”) i wybieramy „Menedzer płytek” („Boards Manager”). Niekiedy po uruchomieniu się okna managera należy poczekać chwilkę, aż zostaną zaktualizowane dane – na dole okna pojawi się pasek postępu.

Następnie, w pole wyszukiwania wpisujemy „STM32F1” i wybieramy pozycję STM32F1xx/GD32F1xx(…). Naciskamy „Instaluj” („Install”) i czekamy aż niezbedne pliki zostaną pobrane i zainstalowane.

Po tej operacji środowisko Arduino zamykamy i uruchamiamy ponownie. 

4. Konfigurujemy Arduino do pracy z Blue Pill.

W menu „Narzędzia” („Tools”):

– jako „Płytka” wybieramy „Generic STM32F103C series”,

– „Variant” w naszym wypadku będzie ustawiony jako „STM32F103C8 (20k RAM, 64k Flash),

– „Upload” method ustawiamy jako „Serial”,

– „Port” ustawiamy na numer portu naszego konwertera. Zazwyczaj to będzie COM3 lub wyższy,

– „Programator” („Programmer”) ustawiamy jako „Parallel Programmer”. 

5. Teraz czas na program. Oczywiście zaczniemy od migania diodą, w którą jest wyposażony Blue Pill.

W „Plik” („File”) wybieramy „Przykłady” („Examples”), następnie „01.Basics” i „Blink”. Tutaj musimy dokonac drobnej modyfikacji kodu, ponieważ stała LED_BUILDIN nie jest zadklearowana dla tej płytki.

Aby to naprawić, na początku kodu, zaraz pod blokiem komentarza na początku, deklarujemy: 

#define LED_BUILTIN PC13

Kompetny kod (pomijając górny blok komentarza) wygląda następująco: 

#define LED_BUILTIN PC13

 

// the setup function runs once when you press reset or power the board

void setup() {

  // initialize digital pin LED_BUILTIN as an output.

  pinMode(LED_BUILTIN, OUTPUT);

}

 

// the loop function runs over and over again forever

void loop() {

  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)

  delay(1000);                       // wait for a second

  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW

  delay(1000);                       // wait for a second

}

6. Przed zaprogramowaniem płytki musimy przestawić zworkę BOOT0 na „1”. Zworka BOOT0 znajduje się bliżej listwy z pinami, dalej od przycisku RESET.

Następnie naciskamy przycisk RESET i ładujemy program do płytki. Od razu po załadowaniu dioda powinna zacząć migać. Teraz ustawiamy zworkę BOOT0 na „0”.

Gotowe ! 

W tej chwili możemy ponownie podłączyć naszego Blue Pilla do zasilania i powinniśmy zobaczyć migającą diodę.

UWAGA: Niektóre układy, kupowane bezpośrednio z „azjatyckiego” portalu mogą być zablokowane. Moduł przy którym spotkałem się z tym problemem odróżniał się od innych plastikowym przyciskiem RESET. Wspomniana blokada objawia się m.in. błędem podczas programowania z komunikatem „Can’t initiate chip erase!”. Taki układ wymaga wcześniejszego odblokowania, które wykracza poza zakres tego wpisu. Jeśli napotkałeś taki problem i potrzebujesz pomocy to daj mi znać, abym opublikował post z rozwiązaniem tego problemu.