Forum: Mikrocontroller und Digitale Elektronik STM32 bootloader


von Dustin M. (db1234)


Lesenswert?

Guten Tag,

ich möchte gerne einen STMF401RETx (LQFP64) via USART1 flashen.

Hierzu habe ich wie in der Doku "AN2606" von ST beschrieben an den Pins 
PA10 und PA9 ein FTDI-Kabel angeschlossen (FTDI-RX an uC-TX und 
umgekehrt). Das Kabel ist mit einem PC verbunden. Den uC wollte ich dann 
über den STM32CubeProgrammer flashen.


Desweiteren habe ich die uC-Pins nach Pattern 1 (Doku AN2606) für Boot0 
= 1 (BOOT0) und Boot1 = 0 (PB2) über 10k Widerstände gesetzt.

Leider bekomme ich eine Fehlermeldung wenn ich mit dem 
STM32CubeProgrammer eine Verbindung zum Microcontroller aufbauen will.

Kann mir wer dabei weiterhelfen, wie ich den uC in den Bootmodus setze 
und flashen kann?


Ich danke euch schon mal im Voraus ;)
______________________________________________________________________ 
__

Zu erwähnen ist das ich bereits einen STM042K6Tx (LQFP32) erfolgreich 
mit der Vorgehensweise flashen konnte. Hierzu habe ich Boot0 = 1 gesetzt 
und die USART Pins entsprechend verbunden.

Fehlermeldung:

Error: Activating device: KO. Please, verify the boot mode configuration 
and check the serial port configuration. REset your device then try 
again...

Die Dokumente:

AN2606 (S.120 -> USART1 Verbindun, S.22 Pattern 1)
https://www.st.com/resource/en/application_note/cd00167594-stm32-microcontroller-system-memory-boot-mode-stmicroelectronics.pdf

AN4488 (S.26 -> Table 6. Bootmodes)
https://www.st.com/resource/en/application_note/dm00115714-getting-started-with-stm32f4xxxx-mcu-hardware-development-stmicroelectronics.pdf

: Bearbeitet durch User
von pegel (Gast)


Lesenswert?

Dustin B. schrieb:
> REset your device then try again...

Das hast Du gemacht?
Am Besten Strom weg und wieder dran.

von pegel (Gast)


Lesenswert?

Im STM32CubeProgrammer hast Du auch seriell eingestellt?

von Dustin M. (db1234)


Lesenswert?

> Das hast Du gemacht?
> Am Besten Strom weg und wieder dran.

Das habe ich schon gemacht, hab den NRST (Reset-Pin) über einen Taster 
verbunden. Leider auch ohne erfolg.

von Dustin M. (db1234)


Lesenswert?

pegel schrieb:
> Im STM32CubeProgrammer hast Du auch seriell eingestellt?

Hab im STM32CubeProgrammer folgende Config:

Config-------: UART
PORT--------: (halt der angeschlossene)
Baudrate----: 115200
Partiy--------: Even
Data bits----: 8
Stop bits----: 1
Flow control-: off

wie gesagt mit dem kleinere uC hat es funktioniert.

von W.S. (Gast)


Lesenswert?

Dustin B. schrieb:
> Kann mir wer dabei weiterhelfen, wie ich den uC in den Bootmodus setze
> und flashen kann?

https://www.mikrocontroller.net/attachment/383626/Stm32Prog_R1.0.6.zip

W.S.

von Dustin M. (db1234)


Lesenswert?

W.S. schrieb:
> Dustin B. schrieb:
>> Kann mir wer dabei weiterhelfen, wie ich den uC in den Bootmodus setze
>> und flashen kann?
>
> https://www.mikrocontroller.net/attachment/383626/Stm32Prog_R1.0.6.zip
>
> W.S.

Danke für dieses ausführliche Dokument. :)

Aber es geht ja mit dem kleinerer uC. Hab den Reset-Pin mal 
angeschlossen, trotzdem gleiches Resultat.(Allerdings noch mit dem 
STM-Programmer)

von Stefan F. (Gast)


Lesenswert?

Probiere mal zum Vergleich den "STM32 Flash load demonstrator".
https://www.st.com/en/development-tools/flasher-stm32.html

Beitrag #6233070 wurde vom Autor gelöscht.
Beitrag #6233075 wurde von einem Moderator gelöscht.
von Dustin M. (db1234)


Lesenswert?

Stefan ⛄ F. schrieb:
> Probiere mal zum Vergleich den "STM32 Flash load demonstrator".
> https://www.st.com/en/development-tools/flasher-stm32.html

Habe ich auch schon probiert.
Mit dem STM042 geht es, mit dem STM32F401RE nicht.

Habe ich vielleicht noch etwas anderes übersehen?

Der uC befindet sich auf einem Steckboard mit 3.3V. Es sind jetzt nur 
noch die Pins VDD/VBAT auf 3.3V und VSS auf Ground, sowie die USART1 
Pins RX/TX angeschlossen.

Die USARTS1 Pin hab ich mit 100k Widerständen auf +VDD gelegt, wie es im 
Doc AN2606 S.33 beschrieben wird.

Von dem FTDI-Kabel sind RX und TX entsprechend andersrum angeschlossen 
und der Ground-Anschluss auf Ground.

von Stefan F. (Gast)


Lesenswert?

Mach mal LED's (mit Vorwiderstand) an Rx und Tx, um zu sehen, ob beide 
Leitungen aktiv sind.

von Dustin M. (db1234)


Lesenswert?

Stefan ⛄ F. schrieb:
> Mach mal LED's (mit Vorwiderstand) an Rx und Tx, um zu sehen, ob
> beide
> Leitungen aktiv sind.

Hab mit einem Oszilloskop gemessen sind an beiden 3.3V. Das BOOT0 auf 
VDD und BOOT1 auf GND sein muss ist wohl richtig?

: Bearbeitet durch User
von pegel (Gast)


Lesenswert?

Dustin B. schrieb:
> Hab mit einem Oszilloskop gemessen sind an beiden 3.3V.

Wie? Immer? Auch wenn eigentlich etwas vom FTDI-TX übertragen wird?

von Dustin M. (db1234)


Lesenswert?

pegel schrieb:
> Dustin B. schrieb:
>> Hab mit einem Oszilloskop gemessen sind an beiden 3.3V.
>
> Wie? Immer? Auch wenn eigentlich etwas vom FTDI-TX übertragen wird?

Wenn etwas über Tx übertragen wird, wird der Pegel entsprechend Low 
gezogen. Das funktioniert.

von Stefan F. (Gast)


Lesenswert?

Dustin B. schrieb:
> Wenn etwas über Tx übertragen wird, wird der Pegel entsprechend Low
> gezogen. Das funktioniert.

Und was ist mit der Rx Leitung? Tot?

von Bauform B. (bauformb)


Lesenswert?

Dustin B. schrieb:
> Es sind jetzt nur noch die Pins VDD/VBAT auf 3.3V
> und VSS auf Ground

Was ist mit VSSA und VDDA, die müssen auch immer angeschlossen sein?
Und die Spezialkondensatoren an VCAP1 und VCAP2 sind auch dran?
Alle Pins, die der Bootloader als Eingang benutzen kann, sollten nicht 
floaten sondern statisch 1 oder 0 sein. Auch ein Taktsignal könnte 
stören. Theoretisch könnten diese kritisch sein: PD6, PB6, PB7, PB10, 
PB3, PA8, PB4, PA7, PA5, PA4, PB15, PB13, PB12, PC12, PC10, PA15 und 
PA11, PA12.
Und wenn das alles nicht sein kann, einfach mal RX und TX vertauschen ;)

Dustin B. schrieb:
> Das BOOT0 auf
> VDD und BOOT1 auf GND sein muss ist wohl richtig?
So steht es geschrieben.

von pegel (Gast)


Lesenswert?

Ich habe es mit einem CH341 und einem STM32F103C8(nicht BluePill) auf 
der Kommandozeile probiert.
Auch an UART1, PA9, PA10 und Boot0=1.

./STM32_Programmer.sh -c port=/dev/ttyUSB0 -r 0x08000000 0x100 x.bin

Fnktioniert zwar, aber es zeigt eine Meldung:
Timeout error occured while waiting for acknowledgement.

So ganz i.O. ist das auch nicht.

Kannst ja mal einen Debug Level 3 probieren. Graphisch, oder:

./STM32_Programmer.sh -c port=/dev/ttyUSB0 -vb 3 -r 0x08000000 0x100 
x.bin

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.