STM32: programmazione (STM32F1 STM32F4) tramite USB con bootloader HID – 3

Spread the love

Continuiamo ad esplorare la famiglia di microcontrollori STM32 a 32 bit basata sul processore Arm®  Cortex®-M.

Impareremo come aggiungere il bootloader HID al nostro dispositivo STM32. Questo bootloader non necessita di driver (non sono necessari driver USB, anche su Windows) per  i dispositivi STM32F10x e STM32F4xx.

STM32F1 STM32F4 programming via USB with HID boot-loader
STM32F1 STM32F4 programming via USB with HID boot-loader

Questo risulta essere un piccolo bootloader di 2 KB sui dispositivi STM32F10x. Sui dispositivi STM32F4xx, non ha senso rendere il bootloader molto più piccolo di 16 KB perché la prima pagina flash è già di 16 KB.

Prima di tutto, leggi il precedente articolo “STM32F1 Blue Pill: piedinatura, specifiche e configurazione IDE Arduino (STM32duino e STMicroelectronics)” dove puoi scoprire come configurare il tuo Arduino IDE, e fai attenzione: questo bootloader vuole l’URL descrittore Arduino_STM di STMicroelectronics (seconda parte dell’articolo precedente).

Qui i più comuni STM32 STM32F103C8T6 STM32F401 STM32F411 ST-Link v2 ST-Link v2 official

Come già descritto, è necessario un programmatore FTDI. Di solito uso un modello base, ma in questo caso è più semplice utilizzare un modulo con uscita di alimentazione integrata.

Il più costoso modulo FT232RL o FT232 può alimentare il microcontrollore, ma un CH340G o CH340 funziona bene.

CH340G Module It is my forced choice

Ecco i due modelli USB to TTL CH340G - USB to TTL FT232RL


FT232RL Module

Schema di connessione con FTDI

Per caricare il bootloader, è necessario collegare l’FTDI, come spiegato in questa immagine.

stm32 ft232 USBtoTTL converter wiring
stm32 ft232 USBtoTTL converter wiring

È possibile alimentare l’stm32 con 3,3 V o 5 V e collegare l’FTDI TX a PA10 e RX a PA9.

STM32F103C8T6FTDI
5v or 3.3vVCC 5v or 3.3v
GNDGND
A9RX
A10TX

Schema di collegamento con ST-Link

STM32 and ST-Link wiring
STM32 and ST-Link wiring
STM32ST-Link v2
GNDGND
SCKSWCLK
DIOSWDIO
3V33V3

Modalità di avvio

STM32 blue pill in run normal mode
STM32 blue pill in run normal mode

È possibile selezionare tre tipi di modalità di avvio:

  • Boot da System Memory: che richiama il bootloader su chip, il quale è presente nel chip direttamente dalla fabbrica prima che tu abbia programmato qualcosa nel chip della flash. Ciò consente di caricare il codice (programma) nel dispositivo da un’interfaccia esterna come UART o USB.
  • Memoria flash principale: è dove normalmente va il tuo codice. Durante il normale funzionamento, il codice risiederà in flash e, su Power-On Reset (POR), la CPU recupererà il vettore di ripristino e il puntatore dello stack iniziale (SP) dalla flash. Puoi caricare flash tramite JTAG, il bootloader su chip (sopra), ecc.
  • Carica il codice nella RAM (JTAG, runtime) e quindi avvia/esegui da lì. Questo non è usato spesso, di solito stai facendo qualcosa di complicato come un bootloader temporaneo o simili.

Ecco la tabella con la configurazione dei jumper:

BOOT0BOOT1Modality
0XMain flash memory
10System Memory
11Embedded SRAM

Carica il bootloader HID con STM32CubeProgrammer

Per caricare il bootloader, dobbiamo mettere il dispositivo in “System Memory”.

STM32 blue pill in programming mode
STM32 blue pill in programming mode

Abbiamo bisogno del nuovo STM32CubeProgrammer già installato (necessario da Arduino IDE), e proveremo alcuni bootloader.

Puoi trovare quel firmware in questo repository GitHub

https://github.com/Serasidis/STM32_HID_Bootloader

Ma devi scaricare quello precompilato da questo link . Nella confezione trovi il firmware per F103 e F104, mentre per F103 devi selezionare alta densità per  i Dispositivi  ad Alta Densità come STM32F103RCT6 o bassa-media densità per gli altri.

È necessario selezionare il firmware a bassa/media densità hid_generic_pc13.bin, il pc13. È il pin LED nel mio caso, PA13.

Collegare l’FDTI come mostrato.

Impostare il ponticello in modalità di avvio “System Memory” e ripristinare.

STM32 blue pill in programming mode
STM32 blue pill in programming mode
  1. Installare STM32CubeProgrammer rilasciato da STMicroelectronics. Puoi scaricarlo da qui ;
  2. Scarica il firmware precompilato da questo link , ti ​​avevo spiegato come selezionare il firmware sopra.
  3. Avvia il programma;
  4. Seleziona il tipo di connessione UART;
  5. Seleziona la porta COM corretta;
  6. Fare clic su Connetti;
STM32CubeProgrammer seleziona la connessione UART e connettiti
STM32CubeProgrammer seleziona la connessione UART e connettiti
  1. Fare clic sull’icona Cancella e programmazione (freccia verde);
  2. Selezionare il corretto bootloader STM32duino (come descritto in precedenza);
  3. Inizia la programmazione, il tuo dispositivo è pronto.
STM32CubeProgrammer Erasing and programmin and add STM32 HID bootloader
STM32CubeProgrammer Erasing and programming and add STM32 HID bootloader

Dopo il caricamento, è necessario impostare il jumper in modalità normale e ripristinarlo.

STM32 blue pill in run normal mode
STM32 blue pill in run normal mode

Se tutto andava bene, il led del PC13 inizia a lampeggiare molto velocemente, ma non puoi vedere nessun nuovo dispositivo nelle tue porte COM (solo dispositivo sconosciuto in USB). Ma non preoccuparti.

Ora caricheremo lo sketch per la prima volta, potresti avere qualche problema la prima volta e cercherò di spiegare come risolverli.

Selezionare "USB support (if It's available): "CDC (generic 'Serial' supersede U(S)ART)"

STM32 Arduino IDE select: CDC generic 'Serial' supersede U(S)ART
STM32 Arduino IDE select: CDC generic ‘Serial’ supersede U(S)ART

E "Upload method": "HID bootloader 2.2"

STM32 Arduino IDE select: Upload HID Bootloader 2.2
STM32 Arduino IDE select: Upload HID Bootloader 2.2

Ecco lo sketch blink; guarda la gestione Seriale; lo sketch inizia a funzionare dopo che Serial è stato collegato.

/*
  Blink for STM32F1xx 

  Turns an LED on for one second, then off for one second, repeatedly.

  http://www.mischianti.org
*/

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);

  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.print(F("Serial OK!"));

  pinMode(PC13, OUTPUT);
}

void loop() {
  digitalWrite(PC13, HIGH);
  delay(1000);
  digitalWrite(PC13, LOW);
  delay(1000);
}

È necessario collegare il monitor seriale per avviare lo sketch.

Prova a caricare se ricevi un messaggio di errore come questo.

C:\Users\renzo\AppData\Local\Arduino15\packages\STMicroelectronics\tools\STM32Tools\2.1.1/win/hid-flash.exe C:\Users\renzo\AppData\Local\Temp\arduino_build_278975/Blink.ino.bin COM28 

+-----------------------------------------------------------------------+
|         HID-Flash v2.2.1 - STM32 HID Bootloader Flash Tool            |
|     (c)      2018 - Bruno Freitas       http://www.brunofreitas.com   |
|     (c) 2018-2019 - Vassilis Serasidis  https://www.serasidis.gr      |
|   Customized for STM32duino ecosystem   https://www.stm32duino.com    |
+-----------------------------------------------------------------------+

> Trying to open the [COM28]...
> Unable to open the [COM28]
> Searching for [1209:BEBA] device...
##########
Error - [1209:BEBA] device is not found :(> Searching for [COM28] ...
> Finish
the selected serial port > Finish
 does not exist or your board is not connected

Disconnetti, riconnetti e riprova, se il caricamento si blocca in questo modo

C:\Users\renzo\AppData\Local\Arduino15\packages\STMicroelectronics\tools\STM32Tools\2.1.1/win/hid-flash.exe C:\Users\renzo\AppData\Local\Temp\arduino_build_278975/Blink.ino.bin COM28 

+-----------------------------------------------------------------------+
|         HID-Flash v2.2.1 - STM32 HID Bootloader Flash Tool            |
|     (c)      2018 - Bruno Freitas       http://www.brunofreitas.com   |
|     (c) 2018-2019 - Vassilis Serasidis  https://www.serasidis.gr      |
|   Customized for STM32duino ecosystem   https://www.stm32duino.com    |
+-----------------------------------------------------------------------+

> Trying to open the [COM28]...
> Unable to open the [COM28]
> Searching for [1209:BEBA] device...
#
> [1209:BEBA] device is found !
> Sending <reset pages> command...
> Flashing firmware...
. 1024 Bytes

Reimposta e riprova, e ora otterrai il processo di caricamento.

An error occurred while uploading the sketch
C:\Users\renzo\AppData\Local\Arduino15\packages\STMicroelectronics\tools\STM32Tools\2.1.1/win/hid-flash.exe C:\Users\renzo\AppData\Local\Temp\arduino_build_278975/Blink.ino.bin COM28 

+-----------------------------------------------------------------------+
|         HID-Flash v2.2.1 - STM32 HID Bootloader Flash Tool            |
|     (c)      2018 - Bruno Freitas       http://www.brunofreitas.com   |
|     (c) 2018-2019 - Vassilis Serasidis  https://www.serasidis.gr      |
|   Customized for STM32duino ecosystem   https://www.stm32duino.com    |
+-----------------------------------------------------------------------+

> Trying to open the [COM28]...
> Unable to open the [COM28]
> Searching for [1209:BEBA] device...
#
> [1209:BEBA] device is found !
> Sending <reset pages> command...
> Flashing firmware...
. 1024 Bytes
. 2048 Bytes
. 3072 Bytes
. 4096 Bytes
. 5120 Bytes
. 6144 Bytes
. 7168 Bytes
. 8192 Bytes
. 9216 Bytes
. 10240 Bytes
. 11264 Bytes
. 12288 Bytes
. 13312 Bytes
. 14336 Bytes
. 15360 Bytes
. 16384 Bytes
. 17408 Bytes
. 18432 Bytes
. 19456 Bytes
. 20480 Bytes
. 21504 Bytes
. 22528 Bytes
. 23552 Bytes
. 24576 Bytes

> Done!
> Sending <reboot mcu> command...
> Error while sending <reboot mcu> command.
> Searching for [COM28] ...
> [COM28] is found !
> Finish

E infine, hai la porta COM denominata “STM Serial”. È necessario collegare il monitor seriale. Dopodiché, il led inizia a lampeggiare e hai questo output Seriale.

Serial OK!

Risoluzione dei problemi

Se il tuo dispositivo non va in modalità bootloader, puoi ottenere la porta COM spostando il jumper BOOT 1 nella posizione HIGH (1) e ripristinare.

Grazie

  1. STM32F1 Blue Pill: piedinatura, specifiche e configurazione IDE Arduino (STM32duino e STMicroelectronics)
  2. STM32: programmazione (STM32F1) via USB con bootloader STM32duino
  3. STM32: programmazione (STM32F1 STM32F4) tramite USB con bootloader HID
  4. STM32F4 Black Pill: pinout, specifiche e configurazione IDE Arduino
  5. STM32: ethernet w5500 standard (HTTP) e SSL (HTTPS)
  6. STM32: ethernet enc28j60 standard (HTTP) e SSL (HTTPS)
  7. STM32: WiFiNINA con un ESP32 come WiFi Co-Processor
    1. STM32F1 Blue-pill: shield WiFi (WiFiNINA)
    2. STM32F4 Black-pill: shield WiFi (WiFiNINA)
  8. Come utilizzare la scheda SD con l’stm32 e la libreria SdFat
  9. STM32: memoria flash SPI FAT FS
  10. STM32: RTC interno, sistema orario e backup batteria (VBAT)
  11. STM32 LoRa
  1. STM32 Risparmio energetico
    1. STM32F1 Blue-Pill gestione clock e frequenza
    2. STM32F4 Black-Pill gestione clock e frequenza
    3. Introduzione e framework Arduino vs STM
    4. Libreria LowPower, cablaggio e Idle (STM Sleep).
    5. Sleep, deep sleep, shutdown e consumo energetico
    6. Sveglia da allarme RTC e Seriale
    7. Sveglia da sorgente esterna
    8. Introduzione al dominio di backup e conservazione delle variabili durante il RESET
    9. Registro di backup RTC e conservazione della SRAM
  1. STM32 invia email con allegati e SSL (come Gmail): w5500, enc28j60, SD e SPI Flash
  2. Server FTP su STM32 con W5500, ENC28J60, scheda SD e memoria flash SPI
  3. Collegamento dell’EByte E70 ai dispositivi STM32 (black/blue pill) e un semplice sketch di esempio

Spread the love

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *