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.