STM32: programmazione (STM32F1) via USB con bootloader STM32duino – 2

Spread the love

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.

STM32F1 programming via USB with STM32duino boot-loader
STM32F1 programming via USB with STM32duino boot-loader

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.

CH340G Module It is my forced choice

Qui 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,3V o 5V nel rispettivo pin e collegare 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: 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:

BOOT0BOOT1Modality
0XMemoria flash principale
10Memoria di sistema
11SRAM incorporata

Caricare il bootloader STM32duino con STM32 Flash loader

Per caricare il bootloader, dobbiamo mettere il dispositivo in “Memoria di sistema”.

STM32 blue pill in programming mode
STM32 blue pill in programming mode
  1. Utilizzeremo l’STM32 Flash loader demonstrator (UM0462) che ora è stato sostituito dall’STM32CubeProgrammer, ma è molto semplice e veloce. Puoi scaricarlo da qui .
  1. 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.
  2. Avvia Flash Loader Demonstrator e seleziona la porta COM corretta.
STM32 Flash loader demonstrator: select COM port
STM32 Flash loader demonstrator: select COM port
  1. Nel passaggio successivo, puoi verificare le dimensioni del flash del tuo dispositivo
STM32 Flash loader demonstrator: check the flash size
STM32 Flash loader demonstrator: check the flash size
  1. Successivamente, devi selezionare il dispositivo corretto (molto importante).
STM32 Flash loader demonstrator: select the correct device
STM32 Flash loader demonstrator: select the correct device
  1. È ora di scegliere il file del bootloader già scaricato.
STM32 Flash loader demonstrator: select the correct boot-loader
STM32 Flash loader demonstrator: select the correct boot-loader
  1. E infine, il caricamento.
STM32 Flash loader demonstrator: successful uploaded
STM32 Flash loader demonstrator: successful uploaded

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ù.

  1. Installare l’STM32CubeProgrammer rilasciato da STMicroelectronics. Puoi scaricarlo da qui;
  2. 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.
  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 bootloader STM32duino corretto (come descritto in precedenza);
  3. Inizia la programmazione
STM32CubeProgrammer Erasing and programming and add STM32duino bootloader
STM32CubeProgrammer Erasing and programming and add STM32duino bootloader

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.

STM32 Maple device Serial port from USB
STM32 Maple device Serial port from USB

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.

Arduino IDE select stm32 upload method: STM32duino bootloader
Arduino IDE select stm32 upload method: STM32duino bootloader

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

  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 *