STM32: programmazione (STM32F1 STM32F4) tramite USB con bootloader HID – 3
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.
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.
Ecco i due modelli USB to TTL CH340G - USB to TTL FT232RL
Schema di connessione con FTDI
Per caricare il bootloader, è necessario collegare l’FTDI, come spiegato in questa immagine.
È possibile alimentare l’stm32 con 3,3 V o 5 V e collegare l’FTDI TX a PA10 e RX a PA9.
STM32F103C8T6 | FTDI |
---|---|
5v or 3.3v | VCC 5v or 3.3v |
GND | GND |
A9 | RX |
A10 | TX |
Schema di collegamento con ST-Link
STM32 | ST-Link v2 |
---|---|
GND | GND |
SCK | SWCLK |
DIO | SWDIO |
3V3 | 3V3 |
Modalità di avvio
È 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:
BOOT0 | BOOT1 | Modality |
---|---|---|
0 | X | Main flash memory |
1 | 0 | System Memory |
1 | 1 | Embedded SRAM |
Carica il bootloader HID con STM32CubeProgrammer
Per caricare il bootloader, dobbiamo mettere il dispositivo in “System Memory”.
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.
- Installare STM32CubeProgrammer rilasciato da STMicroelectronics. Puoi scaricarlo da qui ;
- Scarica il firmware precompilato da questo link , ti avevo spiegato come selezionare il firmware sopra.
- Avvia il programma;
- Seleziona il tipo di connessione UART;
- Seleziona la porta COM corretta;
- Fare clic su Connetti;
- Fare clic sull’icona Cancella e programmazione (freccia verde);
- Selezionare il corretto bootloader STM32duino (come descritto in precedenza);
- Inizia la programmazione, il tuo dispositivo è pronto.
Dopo il caricamento, è necessario impostare il jumper in modalità normale e ripristinarlo.
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.
Carica lo sketch Blink
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)"
E "Upload method": "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
- STM32F1 Blue Pill: piedinatura, specifiche e configurazione IDE Arduino (STM32duino e STMicroelectronics)
- STM32: programmazione (STM32F1) via USB con bootloader STM32duino
- STM32: programmazione (STM32F1 STM32F4) tramite USB con bootloader HID
- STM32F4 Black Pill: pinout, specifiche e configurazione IDE Arduino
- STM32: ethernet w5500 standard (HTTP) e SSL (HTTPS)
- STM32: ethernet enc28j60 standard (HTTP) e SSL (HTTPS)
- STM32: WiFiNINA con un ESP32 come WiFi Co-Processor
- Come utilizzare la scheda SD con l’stm32 e la libreria SdFat
- STM32: memoria flash SPI FAT FS
- STM32: RTC interno, sistema orario e backup batteria (VBAT)
- STM32 LoRa
- STM32 Risparmio energetico
- STM32F1 Blue-Pill gestione clock e frequenza
- STM32F4 Black-Pill gestione clock e frequenza
- Introduzione e framework Arduino vs STM
- Libreria LowPower, cablaggio e Idle (STM Sleep).
- Sleep, deep sleep, shutdown e consumo energetico
- Sveglia da allarme RTC e Seriale
- Sveglia da sorgente esterna
- Introduzione al dominio di backup e conservazione delle variabili durante il RESET
- Registro di backup RTC e conservazione della SRAM
- STM32 invia email con allegati e SSL (come Gmail): w5500, enc28j60, SD e SPI Flash
- Server FTP su STM32 con W5500, ENC28J60, scheda SD e memoria flash SPI
- Collegamento dell’EByte E70 ai dispositivi STM32 (black/blue pill) e un semplice sketch di esempio