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.