STM32: programmazione (STM32F1) via USB con bootloader STM32duino – 2
Continuiamo ad esplorare la famiglia STM32 di microcontrollori a 32 bit basati sul processore Arm® Cortex®-M.
L’STM32duino-bootloader è stato creato per le schede STM32F103 da utilizzare con il repository Arduino_Core_STM32 e l’IDE Arduino; molto utile per programmare il microcontrollore direttamente tramite USB.
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 il descrittore URL STM32duino (prima parte dell’articolo precedente).
Qui la mia selezione di STM32 e ST-Link STM32F103C8T6 STM32F401 STM32F411 ST-Link v2 ST-Link v2 official
Come già descritto, è necessario un programmatore FTDI o ST-Link. 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.
Qui 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,3V o 5V nel rispettivo pin e collegare 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: richiama il bootloader su chip, che è presente nel chip direttamente dalla fabbrica prima che tu abbia programmato qualcosa nella flash su chip. Ciò consente di caricare il codice (programma) nel dispositivo da un’interfaccia esterna come UART o USB.
- Memoria flash principale: è qui che normalmente va il tuo codice. In un’operazione tipica, il codice risiederà in un 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 | Memoria flash principale |
1 | 0 | Memoria di sistema |
1 | 1 | SRAM incorporata |
Caricare il bootloader STM32duino con STM32 Flash loader
Per caricare il bootloader, dobbiamo mettere il dispositivo in “Memoria di sistema”.
- Utilizzeremo l’STM32 Flash loader demonstrator (UM0462) che ora è stato sostituito dall’STM32CubeProgrammer, ma è molto semplice e veloce. Puoi scaricarlo da qui .
- Hai bisogno del bootloader; lo scarichiamo da questo repository , nel mio caso mi serve lo
STM32duino-bootloader/binaries/generic_boot20_pc13.bin
Devi selezionare il firmware generic_boot20 e il pin LED corretto, per me il pin PC13 o PA13. - Avvia Flash Loader Demonstrator e seleziona la porta COM corretta.
- Nel passaggio successivo, puoi verificare le dimensioni del flash del tuo dispositivo
- Successivamente, devi selezionare il dispositivo corretto (molto importante).
- È ora di scegliere il file del bootloader già scaricato.
- E infine, il caricamento.
Ora ripristina il ponticello in posizione normale e riavvia. In questo momento, se colleghi il dispositivo tramite USB, non viene riconosciuto; devi installare i driver
Carica il bootloader STM32duino con l’STM32CubeProgrammer
È possibile eseguire il flashing del precedente bootloader STM32duino con STM32CubeProgrammer.
Per ST-Link, devi selezionare ST-LINK invece di UART, niente di più.
- Installare l’STM32CubeProgrammer rilasciato da STMicroelectronics. Puoi scaricarlo da qui;
- Allora hai bisogno del bootloader; lo scarichiamo da questo repository , nel mio caso come già detto mi serve l’STM32duino-bootloader/binaries/generic_boot20_pc13.bin
Devi selezionare il firmware generic_boot20 e il pin LED corretto , per me il pin PC13 o PA13. - 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 bootloader STM32duino corretto (come descritto in precedenza);
- Inizia la programmazione
Installazione del driver
Per far riconoscere il dispositivo da Windows, è necessario installare il relativo driver.
Da: Arduino_STM32 / driver / win / devi scaricare questi file:
ed esegui i primi 2. Dopodiché, se tutto è a posto, ottieni il dispositivo nella tua porta COM.
Si ottengono questi messaggi se si apre il monitor seriale sulla nuova porta COM.
Congratulations, you have installed the STM32duino bootloader
See https://github.com/rogerclarkmelbourne/STM32duino-bootloader
For more information about Arduino on STM32
See https://www.stm32duino.com
Carica lo sketch
Ecco un semplice sketch di Blink per i dispositivi con pin LED di PA13.
/*
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);
}
Dobbiamo selezionare il bootloader SMT32duino.
Ecco l’output del caricamento dello sketch.
C:\Users\renzo\AppData\Local\Arduino15\packages\stm32duino\tools\stm32tools\2021.5.31/win/maple_upload.bat COM27 2 1EAF:0003 C:\Users\renzo\AppData\Local\Temp\arduino_build_965206/Blink.ino.bin C:\Program Files (x86)\Arduino
maple_loader v0.1
Resetting to bootloader via DTR pulse
Reset via USB Serial Failed! Did you select the right serial port?
Searching for DFU device [1EAF:0003]...
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming...
Found it!
Opening USB Device 0x1eaf:0x0003...
Found Runtime: [0x1eaf:0x0003] devnum=1, cfg=0, intf=0, alt=2, name="STM32duino bootloader v1.0 Upload to Flash 0x8002000"
Setting Configuration 1...
Claiming USB DFU Interface...
Setting Alternate Setting ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
Transfer Size = 0x0400
bytes_per_hash=287
Starting download: [##################################################] finished!
state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present
error resetting after download: usb_reset: could not reset device, win error: � stato specificato un dispositivo inesistente.
Done!
Resetting USB to switch back to runtime mode
È necessario collegare il monitor seriale per avviare lo sketch.
Ecco l’output seriale.
Serial OK!
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