Forum: Mikrocontroller und Digitale Elektronik STM32L431 Boot Modi Verständnissproblem


von technikus (Gast)


Lesenswert?

Hallo Forum,

ich versuche das setzen des Boot Modus beim STM32L431 zu verstehen.
Vom STM32F103 sind mir beide Boot Pins (1 und 2) bekannt.
Beim L431 gibt es nur einen.

Ich habe folgende App Note versucht zu verstehen

https://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf

Ziel ist es, den Bootloader über USART2 zu bedienen.

Hat da jemand Erfahrungen sammeln können und kann mir das Verhalten 
näher bringen ?


Danke und Gruß
Stephan

von guest (Gast)


Lesenswert?

Schau lieber in das Referencemanual unter "2.6 Boot configuration", dann 
verstehst Du es eventuell auch.
In der App-Note steht im Prinzip, daß es drei Möglichkeiten gibt den 
internen Bootloader zu aktivieren:
Boot0(pin) = 1, nBoot1(bit) = 1 and nBoot0_SW(bit) = 1
nBoot0(bit) = 0, nBoot1(bit) = 1 and nBoot0_SW(bit) = 0
Boot0(pin) = 0, nBoot0_SW(bit) = 1 and main flash empty
Und was Du dann tun mußt, damit er über UART2 arbeitet (0x7F darüber 
senden).

Es hängt also von nSWBOOT0 (FLASH_OPTR[26]) ab, ob der Pin überhaupt 
eine Rolle spielt oder statt dessen nBOOT0 (FLASH_OPTR[27]) benutzt 
wird. nBOOT1 (FLASH_OPTR[23]) gibt dann im Prinzip an, ob er im 
Bootloader (System memory) oder im SRAM landet.

von Technikus (Gast)


Lesenswert?

Soweit verstanden, danke.
Ich habe nur eine Denkblokade wann ich die Registerwerte schreibe.
Z.B. durch einen Jumper und löse danit einen Interrupt aus, schreibe die 
Registerwerte und führe dann per Software einen Reset aus?

Wenn ja, wie führe ich einen Reset aus, so dass die Registerwerte ihren 
Wert erhalten.

von Olaf (Gast)


Lesenswert?

> Boot0(pin) = 0, nBoot0_SW(bit) = 1 and main flash empty

DAs ist im ueberigen ziemlich doof. Es bedeutet naemlich das ein neu 
gebautes Board auf dem man noch keine Firmware hat voll laeuft und 
entsprechend viel Strom zieht. Damit sollte dann die Hardware klar 
kommen....

Olaf

von technikus (Gast)


Lesenswert?

Ich fasse mal zusammen was ich mir aus den Datenblättern zusammengelesen 
habe:

Im FLASH_OPTR (Flash Option Register) müssen folgende Bits geschrieben 
werden

- nBOOT1 (FLASH_OPTR[23]) = 1

- nBOOT0 (FLASH_OPTR[27]) = 0

- nSWBOOT0 (FLASH_OPTR[26]) = 0

Dann landet der Controller nach einem Reset im System Memory, d.h. 
Bootloader


Das Ganze scheint im Flash zu liegen. Jetzt muss ich mir überlegen wie 
ich durch setzen eines Jumpers die Bits setzen und auch wieder 
zurücksetze.

Gibt es da einen praktikablen Weg? Wenn der Controller vom System Memory 
bootet und über den boot loader geflasht habe, möchte ich ihn ja 
irgendwie wieder davon überzeugen das Anwenderprogramm zu booten.

Oder kann man das FLASH_OPTR Register temporär beschreiben und danach 
eine Art Softwarereset auslösen bei dem der Status bestehen bleibt bzw. 
bei einem "richtigen" Reset der alte Status wiederhergestellt ist???

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.