Bluepill i Blackpill – niedrogie płytki rozwojowe dla mikrokontrolerów STM32
Programowanie płytki za pomocą narzędzi STM32Cube
Tak jak każdy mikrokontroler STM32, płytki BlackPill można też programować za pomocą narzędzi rozwojowych z oferty STMicroelectronics. Zaprezentuję więc prosty przykład migania diodą, tym razem za pomocą środowiska STM32Cube.
Najpierw można uruchomić konfigurator STM32CubeMX. Jak można się domyślić, ST nie przygotował wsparcia dla płytek Blackpill, w związku z czym należy rozpocząć od wyboru mikrokontrolera z poziomu MCU Selector. Aby przyspieszyć poszukiwania można posłużyć się wyszukiwarką lub ustawić widoczność tylko układów z serii STM32F4. Mikrokontrolery zastosowane w Blackpillach to STM32F401CCUx oraz STM32F411CEUx, zależnie od modelu.
Rysunek 9. Wybór mikrokontrolera w STM32CubeMX
Przykładowy projekt będzie również wykonywał tylko mruganie diodą. W związku z tym wystarczy tylko, że skonfigurujemy wyprowadzenie PC13 jako wyjście cyfrowe. Aby to zrobić należy znaleźć pin PC13 na modelu mikrokontrolera w programie i ustawić go jako GPIO_Output.
Rysunek 10. Konfiguracja wyprowadzenia PC13 jako wyjście cyfrowe
Aby wygenerować kod należy przycisnąć GENERATE CODE. Pokaże się okno generacji kodu. Należy w nim wpisać nazwę projektu, ścieżkę do umieszczenia plików oraz wybrać środowisko, w którym będziemy edytować kod. Ja wybrałem polecane obecnie przez ST oprogramowanie STM32CubeIDE. Aby wygenerować kod należy ponownie przycisnąć przycisk.
Kod projektu
Po otwarciu projektu w środowisku ukaże się nam szkielet projektu. Generalnie większości zmian dokonuje się w pliku main.c. Aby nasz projekt mógł mrugać diodą należy w pętli głównej programu umieścić następujący kod:
Listing 2. Fragment kodu mrugającego diodą w płytce Blackpill
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); HAL_Delay(1000); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); HAL_Delay(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */
Rysunek 11. Kod w środowisku STM32CubeIDE
Kod oczywiście ustawia cyklicznie wyprowadzenie PC13 w stan wysoki i niski, co pozwala na włączanie i wyłączanie diody LED. Podczas wprowadzania kodu w środowisku warto umieszczać go między komentarzami USER CODE BEGIN oraz USER CODE END. Pozwoli to zachować kod podczas ewentualnych zmian w konfiguracji i ponownej generacji kodu w programie STM32CubeMX.
Programowanie płytki
Aby wgrać kod do pamięci mikrokontrolera należy użyć programatora ST-LINK lub zgodnego z ST-LINK. Można w tym celu na przykład wykorzystać płytkę ZL30PRGv2 z oferty Kamami.pl. Aby połączyć płytkę z programatorem należy przylutować złącze kątowe do złącza SW na górze płytki. Następnie trzeba połączyć odpowiednie wyprowadzenia ze złączem programatora, tak jak to opisano w tabeli oraz zaprezentowano na poniższej fotografii.
Tabela 1. Połączenie płytki Blackpill z programatorem
Złącze SW płytki Blackpill | Złącze programatora ZL30PRGv2-1 |
GND | GND (np. 10) |
SCK | TCK/SWD CLK (9) |
DIO | TMS/SWD IO (7) |
3.3V | +V_uC (np. 1) |
Rysunek 12. Płytka Blackpill połączona z programatorem ZL30PRGv2-1
Połączenie płytki za pośrednictwem interfejsu SWD można sprawdzić za pomocą programu STM32CubeProgrammer lub STM32ST-LINK Utillity. Jeśli zdecydujemy się na to połączenie, to do wgrania programu na płytkę wystarczy wcisnąć przycisk Run (zielone kółko z białym trójkątem). Środowisko samo skompiluje kod i wgra go na płytkę za pomocą programatora ST-LINK. Oczywiście można w ten sposób skorzystać z innych funkcji programatora, takich jak debugowanie, śledzenie wartości zmiennych itd.
Wgrywanie kodu za pomocą STM32CubeProgrammer
Jednak do samego wgrania kodu wcale nie potrzeba dysponować programatorem ST-LINK. Wystarczy połączyć się z komputerem za pomocą interfejsu DFU, za pomocą przewodu USB, podobnie jak dla Arduino. Należy wtedy tylko skompilować projekt za pomocą przycisku Build (przycisk z młoteczkiem). Kod w postaci binarnej gotowej do wgrania na płytkę znajduje się w folderze Debug lub Release (zależnie od trybu, w którym odbywa się kompilacja) w folderze głównym projektu.
Przy podłączaniu płytki należy przytrzymać przycisk BOOT0. Następnie trzeba połączyć się z płytką w programie STM32CubeProgrammer, za pomocą przycisku Connect w trybie USB.
Rysunek 13. Połączenie płytki w programie STM32CubeProgrammer
Aby wgrać kod należy przycisnąć zakładkę Open file. Otworzy się okno, w którym należy wybrać plik z rozszerzeniem .bin. z folderu Debug lub Release. Aby wgrać kod należy przycisnąć przycisk Download.
Rysunek 14. Wgrywanie kodu za pomocą STM32CubeProgrammer
Aby uruchomić kod należy po wgraniu zresetować płytkę.
Podsumowanie
Płytki Bluepill oraz Blackpill to jedno z najtańszych sposobów na rozpoczęcie przygody z mikrokontrolerami STM32. Ubogie wyposażenie w podzespoły, w porównaniu np. z serią Discovery, nie stanowi problemu, gdyż dzięki wyprowadzeniu większości pinów na złącze rozszerzeń, można swobodnie podłączać dodatkowe moduły. Płytki Bluepill zawierają proste układy z serii STM32F1, natomiast płytki Blackpill – już dość poważne mikrokontrolery STM32F4 z dużą pamięcią, szybkim rdzeniem Cortex-M4, a także szerokim zakresem peryferiów. Dodatkowo, fabrycznie wgrany bootloader umożliwia programowanie płytki w powszechnie stosowanym przez hobbystów środowisku Arduino, co przypadnie do gustu użytkownikom zaznajomionym z tą platformą.
Płytkę Bluepill STM32F103, Blackpill STM32F401 oraz Blackpill STM32F411 można kupić w sklepie internetowym Kamami.pl