Bootloader systemowy w mikrokontrolerach STM32 to niezwykle praktyczne rozwiązanie, które producent STMicroelectronics fabrycznie instaluje w pamięci urządzeń. Pozwala na aktualizację oprogramowania bez specjalistycznego sprzętu programistycznego, takiego jak ST-Link, wykorzystując standardowe interfejsy komunikacyjne.

Wbudowany bootloader zapisany jest w chronionej pamięci System Memory, dzięki czemu zawsze pozostaje dostępny i nie może zostać przypadkowo nadpisany.

Co to jest bootloader?

Bootloader to program uruchamiany jako pierwszy po włączeniu mikrokontrolera. Jego główne zadania obejmują:

  • inicjalizację sprzętu – konfigurację i przygotowanie peryferiów, zegarów oraz interfejsów komunikacyjnych;
  • ładowanie aplikacji użytkowej – wczytywanie kodu z pamięci nieulotnej do RAM i przygotowanie do startu;
  • sprawdzanie integralności – weryfikację, czy obraz aplikacji nie został uszkodzony lub zmodyfikowany;
  • przekazanie kontroli – po zakończeniu wstępnych działań bootloader uruchamia właściwy kod użytkownika.

Lokalizacja bootloadera w STM32

Wbudowany bootloader STM32 znajduje się w System Memory (pamięć systemowa) – specjalnym, chronionym obszarze tylko do odczytu dla użytkownika.

Dzięki ochronie pamięci bootloader pozostaje zawsze dostępny, nawet po błędnym zaprogramowaniu pamięci Flash.

Główne zalety bootloadera systemowego

Użycie wbudowanego bootloadera oferuje znaczące korzyści praktyczne:

  • brak wymagań sprzętowych – nie potrzeba ST-Link; wystarczy odpowiedni interfejs, np. USB, CAN lub UART;
  • aktualizacje dla użytkownika końcowego – możliwość wgrywania nowego firmware’u bez zaplecza serwisowego;
  • elastyczność – obsługa wielu kanałów komunikacyjnych i scenariuszy aktualizacji.

Uruchomienie bootloadera – konfiguracja pinów BOOT

Aby uruchomić bootloader z pamięci System Memory, ustaw BOOT0 = HIGH, BOOT1 = LOW i wykonaj reset mikrokontrolera.

Dokładna kombinacja pinów może zależeć od rodziny i rewizji układu. Sprawdź sekcję „Boot modes” w dokumentacji technicznej konkretnego modelu (np. dla serii STM32F4xx znajduje się tam pełna tabela kombinacji).

Inicjalizacja bootloadera przez interfejsy komunikacyjne

Bootloader STM32 wymaga odpowiedniego zasygnalizowania zanim przyjmie komendy. Metoda inicjalizacji zależy od wybranego interfejsu:

  • UART – rozpoczęcie sesji przez wysłanie bajtu 0x7F (autobaud);
  • I2C – wykrycie poprzez adresowanie ustalonym adresem urządzenia;
  • USB (DFU) – inicjalizacja automatyczna po podłączeniu przewodu i enumeracji hosta.

Interfejsy i inicjalizacja – szybkie porównanie

Poniższa tabela ułatwia dobór interfejsu i wstępną konfigurację:

Interfejs Jak zainicjować Typowe ustawienia Uwagi
UART Wyślij 0x7F Autobaud, 8E1 lub 8N1 Prosty do debugowania, szeroko wspierany
I2C Adresacja właściwym adresem Standard/Fast Mode Wymaga rezystorów podciągających
USB (DFU) Automatyczna po podłączeniu Klasa DFU W Windows mogą być wymagane sterowniki

Praktyczny proces programowania za pomocą STM32CubeProgrammer

Przygotowanie sprzętu

Przed rozpoczęciem programowania wykonaj następujące kroki:

  1. Ustaw mikrokontroler w tryb bootowania z System Memory.
  2. Skonfiguruj piny BOOT0/BOOT1 zgodnie z dokumentacją.
  3. Połącz układ z komputerem przez USB, UART lub ST-Link.

Instalacja narzędzi

Zainstaluj STM32CubeProgrammer z oficjalnej strony STMicroelectronics. Narzędzie obsługuje programowanie zarówno przez ST-Link, jak i bezpośrednio przez interfejsy komunikacyjne mikrokontrolera.

Krok po kroku – wgrywanie oprogramowania

Kroki konfiguracji połączenia:

  1. Uruchom STM32CubeProgrammer.
  2. Wybierz interfejs połączenia (ST-Link, UART, USB DFU) przyciskiem wyboru interfejsu.
  3. Kliknij Connect, aby nawiązać połączenie.

Kroki programowania:

  1. Przejdź do zakładki Erasing & Programming.
  2. Wykonaj Erase pamięci układu.
  3. Wskaż plik wsadu w formacie .bin.
  4. Ustaw adres startowy na 0x08000000 (początek pamięci Flash).
  5. Kliknij Start Programming.

Potwierdzenie sukcesu:

Po zakończeniu pojawi się komunikat „File downloaded complete” oraz odpowiedni wpis w logach. Rozłącz sesję (Disconnect), a następnie zresetuj mikrokontroler, aby uruchomić nowy program.

Zaawansowana konfiguracja – programowanie przez USB bez ST-Link

Popularną praktyką jest wgranie bootloadera Arduino (STM32duino) na płytki STM32 (np. Blue Pill), co pozwala programować układ bezpośrednio przez USB.

Przygotowanie do wgrania bootloadera Arduino

Ustawienie trybu bootowania: przestaw zworkę BOOT0 na pozycję 1 (HIGH), a BOOT1 pozostaw w pozycji 0 (LOW); po zmianie wykonaj reset układu.

Pobranie niezbędnych plików: zainstaluj STM32CubeProgrammer oraz pobierz plik bootloadera z projektu STM32duino (np. generic_boot20_pc13.bin).

Wgrywanie bootloadera

Procedura przez ST-Link:

  1. Uruchom STM32CubeProgrammer i wybierz interfejs ST-Link.
  2. Kliknij Connect, aby potwierdzić wykrycie urządzenia.
  3. Przejdź do zakładki Erasing & Programming.
  4. Wskaż pobrany plik .bin.
  5. Ustaw adres startowy na 0x08000000.
  6. Kliknij Start Programming.

Instalacja sterowników USB i programowanie

Po wgraniu bootloadera Arduino wykonaj następujące kroki:

  1. Zainstaluj sterowniki USB dla STM32 (DFU/CDC) odpowiednie dla systemu operacyjnego.
  2. Podłącz mikrokontroler przez USB – system powinien rozpoznać nowy port COM.
  3. Uruchom Arduino IDE.
  4. Wybierz płytkę (np. Generic STM32F103C series) oraz właściwy port COM.
  5. Wgraj szkic przyciskiem Upload.

To rozwiązanie znacząco upraszcza pracę użytkownikom Arduino, zachowując elastyczność ekosystemu STM32.

Zaawansowany temat – bootloader w programie użytkownika

Możliwe jest wywołanie bootloadera bezpośrednio z aplikacji użytkownika, np. przez zapis odpowiedniej wartości do rejestru Backup, a następnie reset mikrokontrolera; po restarcie warunek zostanie sprawdzony i uruchomiony zostanie tryb bootloadera zamiast aplikacji.

Uwagi praktyczne i wskazówki

Ważne aspekty przy pracy z bootloaderem:

  • dokumentacja układu – przed uruchomieniem bootloadera zawsze sprawdź „Boot modes” w Reference Manualu konkretnej serii;
  • pin BOOT0 – jego stan kluczowo decyduje o źródle startu po resecie (Flash, System Memory, SRAM);
  • format pliku.bin to najprostszy i zalecany format dla STM32CubeProgrammer;
  • adres startowy0x08000000 to standardowy początek pamięci Flash w większości rodzin STM32;
  • erase przed programowaniem – czyszczenie pamięci przed wgraniem obrazu zwiększa niezawodność procesu.