Forum: Mikrocontroller und Digitale Elektronik Kurze Frage: STM32F4discovery bootet nicht!


von Sean G. (atmega318)


Lesenswert?

Folgendes Problem: Ich habe ein Programm geschrieben (mit CrossWorks) 
und kann das sowohl debuggen als auch mit "Build and run" laufen lassen. 
Ich möchte nun das Discovery von einer USB Powerbank versorgen, aber ich 
habe gemerkt, dass der STM32F407 gar nicht erst losläuft, wenn ich das 
Board zum Beispiel an USB vom Computer anschliesse. D.H. 
Anschliessen->build and run->läuft perfekt->ab und anstecken->läuft 
nicht los!

Wenn er nicht läuft, und ich dann den Debugger aktiviere, sehe ich dass 
er da hängt:
1
<reset_wait>
2
    E7FE        b 0x0800037E <reset_wait>      <- hier
3
    0000        movs r0, r0
4
    2002        movs r0, #2
5
    ED08E000    stc p0, c14, [r8, #-0]
6
    0000        movs r0, r0
7
    0800        lsrs r0, r0, #0
Weiss jemand Rat?
Danke im Voraus, Sean

von Detlef K. (adenin)


Lesenswert?

Die Adresse des Sprungzieles muss 0x800037F lauten. ;)

von Sean G. (atmega318)


Lesenswert?

Detlef Kunz schrieb:
> Die Adresse des Sprungzieles muss 0x800037F lauten. ;)

Wie meinst du das? Bzw. was muss ich tun? Sollte ja eigentlich von 
selber gehen oder?

von Detlef K. (adenin)


Lesenswert?

Naja, die Codierung für Sprünge im Thumb-Befehlssatz ist so, das das LSB 
immer gesetzt ist. Also Sprungziel + 1.
Hmm, allerdings könnte es sein, das das dein Debugger rückübersetzt,
und du uns hier (wie allgemein üblich :( )nur das Stück zeigst, wo er in 
eine Endlosschleife gesprungen ist und dort hängt.
Zeig etwas mehr Code. :)

von Sean G. (atmega318)


Lesenswert?

Was soll ich zeigen? Das Problem ist ja, dass er sofort in eine 
Endlosschleife geht.
1
<FPU_IRQHandler>
2
    E7FE        b 0x08000368 <FPU_IRQHandler>
3
<reset_handler>
4
    4805        ldr r0, 0x08000380 <reset_wait+0x2>
5
    4685        mov sp, r0
6
    F000FB3F    bl 0x080009F0 <SystemInit>
7
    4804        ldr r0, 0x08000384 <reset_wait+0x6>
8
    4904        ldr r1, 0x08000388 <reset_wait+0xA>
9
    6001        str r1, [r0]
10
    F7FFBF06    b.w 0x08000188 <_start>
11
    4770        bx lr
12
<reset_wait>
13
    E7FE        b 0x0800037E <reset_wait>
14
    0000        movs r0, r0
15
    2002        movs r0, #2
16
    ED08E000    stc p0, c14, [r8, #-0]
17
    0000        movs r0, r0
18
    0800        lsrs r0, r0, #0
Von da hab ich das, das erste ist ja noch ein IRQ Handler, also müsste 
der startup-code ja nur das sein oder?

EDIT: Und sorry, dass ich nicht alles zeige, aber ich weiss echt nicht 
was man dafür braucht (das ganze CrossWorks Projekt macht ja wohl auch 
keinen Sinn...)

von Detlef K. (adenin)


Lesenswert?

Sieht so aus als ob die Hauptschleife deine Programmes verlassen wurde.
Könnte auch sein, das einer der Execeptions nach reset_wait springt.
Ohne den Code hat es keinen Sinn hier zu rätseln.

von Stefan (Gast)


Lesenswert?

Passiert wohl jedem am Anfang ;)
Das ist kein Bug sondern ein Feature von Crossworks.

https://rowley.zendesk.com/entries/50337-Application-not-starting-up-from-reset

von Sean G. (atmega318)


Lesenswert?

Danke an euch, ich habe jetzt das STARTUP_FROM_RESET beim Release 
hinzugefügt, und alles tut wie es soll.

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.