Bluepill (STM32F103C8T6) to ekstremalnie tania wersja STM32, płytkę można kupić za ok 10 zł.
Mocny mikrokontroler STM32 może być wykorzystany do tanich, małych projektów dzięki temu układowi. Jednak nie posiada on wbudowanego programatora (jak w przypadku Nucleo), ale można wykorzystać
- ST-LINK z SWD z innej płytki Nucleo
- zewnętrzny, tani konwerter USB-UART o nazwie FTDI
Wariant pierwszy FTDI
Podłączenia:
FTDI -> STM32
RX -> A9
TX -> A10
VCC -> 5V
GND -> G (GND)
CTS i DTR niepodłączone.
Złącza VCC i GND dostarczają zasilanie do STM32.
Zasilamy całość z portu USB komputera -> FTDI -> STM32 (VCC).
Zworki
FTDI – 5V (a nie 3,3V – nie działa programowanie wtedy)
STM32 – górną zworkę (bliżej pinów G, G, 3,3V, R, …) należy przestawić w pozycję 1 (w prawo), dolna zostaje w pozycji 0, jak na zdjęciu, wg poradnika.
Programowanie i projekt ArduinoIDE odpalamy wg instrukcji:
https://www.electronicshub.org/getting-started-with-stm32f103c8t6-blue-pill/
Ustawienia w ArduinoIDE
Muszą zgadzać się z konfiguracją, zwłaszcza:
- Narzędzia – Upload method: SERIAL (!)
- Płytka: Generic STM32F103C series
- Variant – 64k
- Port (tu należy odczytać Win+X -> n -> Porty (COM, LPT))
- W Plik->Preferencje->Dodatkowe adresy URL do menadżera płytek wklejamy adres: http://dan.drown.org/stm32duino/package_STM32duino_index.json
Przykłady
Plik -> przykłady ->A_STM32_Examples -> Stubs -> Hello World
1 2 3 4 5 6 7 8 | void setup() { Serial.begin(115200); // Ignored by Maple. But needed by boards using hardware serial via a USB to Serial adaptor } void loop() { Serial.println("Hello World!"); delay(1000); } |
UWAGA! Nasz port COM (u mnie COM7) do FTDI stanie się teraz też konsolą UART STM32! Program kompilujemy, wgrywamy na urządzenie ikoną (->), łączymy konsolą Putty jako SERIAL z prędkością 115200 i np. portem COM odczytanym z menadżera urządzeń np. COM7. Możemy teraz widzieć „Hello World” w konsoli.
Wariant drugi – ST-LINK SWD
Jeśli posiadamy inną płytkę STM32 z programatorem ST-LINK, np. moja to Nucleo F103RB, możemy wykorzystać złącze SWD do programowania zewnętrznego urządzenia STM32. Zyskujemy łatwą komunikację np. ze środowiskiem uVision i MDK.
Hardware
- Usuwamy 2 zworki oznaczone ST-LINK z programatora (np. w płytce Nucleo F103RB), powodują one, że programator działa dla zewnętrznej płytki STM32
- Łączymy złącze CN4 z programatora ST-LINK (Nucleo F103RB) ze złączem programatora BluePill
- Nucleo F103RB ST-LINK (od góry) SWD <-> STM32F103C8T6 BluePill
- PIN1 VDD_TARGET – niepodłączony
- PIN2 SWCLOCK -> SWCLK (BluePill pin obok GND)
- PIN3 GND -> GND (BluePill skrajny)
- PIN4 SWDIO -> SWD (BluePill pin obok 3,3V)
- PIN5 NRST -> R (Reset pin na złączu 20)
- PIN6 niepodłączony
- 3,3V wyjście nie z ST-LINK tylko ze złącz F103RB -> 3,3V BluePill złącze programatora
- W środowisku ARDUINO IDE zaznacz: Narzędzia – Upload Method – ST-Link
- Podłączamy SWD jak wyżej w poprzednim punkcie Z WYJĄTKIEM LINII 3,3 ze złącz F103 RB (sam ST-LINK nie posiada linii zasilania!), zatem podłączamy linie:
SWD ST-LINK (Nucleo) => STM32 BluePill
SWDCLOCK -> SWCLK,
GND -> GND,
SWDIO -> SWD
NRST -> R (reset)
3,3V – NIEPODŁĄCZONA!!! - Podłączamy FTDI:
FTDI => STM32 BluePill
VCC(FTDI)->5V(STM32),
GND(FTDI) -> GND(STM32),
RX(FTDI)-> PB10 (TX UART3, Serial3),
TX->PB11 (RX UART3, Serial3).
To wszystko. Nie mamy tylko konsoli UART zajętej przez Nucleo.
FTDI i SWD razem
Możnana zechcieć korzystać z ST-LINK SWD (do flashowania) oraz FTDI do terminala COM (przez USB). W tym celu podłączymy nasz układ przez 2 porty USB!. Zasada 1 – podłączamy jedno napięcie – w naszym przypadku 5V z portu FTDI do linii 5V STM32.
Z jakiegoś powodu, jeśli korzystamy z SWD nie działa komunikacja z UART1 (dopiero po odłączeniu SWD rusza). Z kolei port UART2 nie jest 5V tolerant, zostaje UART3.
Kod ArduinoIDE, program BLINK, po wykonaniu cyklu wyrzuca na UART3 komunikat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void setup() { // initialize digital pin PB1 as an output. pinMode(PC13, OUTPUT); Serial3.begin(115200); } // the loop function runs over and over again forever void loop() { digitalWrite(PC13, HIGH); // turn the LED on (HIGH is the voltage level) delay(2000); // wait for a second digitalWrite(PC13, LOW); // turn the LED off by making the voltage LOW delay(2000); // wait for a second Serial3.println("Hello3 World!"); } |
Wady: 2 przewody USB do komputera. Zalety: Szybkość flashowania, dostępność ST-LINK z programów STM32CubeIDE, Keil uVision (w przypadku korzystania tylko z FTDI musimy flashować przez zewnętrzny program).