Hallo zusammen. Ich habe folgende Zielstellung: Der STM32F103RC soll per Software in den Bootloader versetzt werden. Ich programmiere die Firmware in C (und nötigenfalls auch etwas Assembler). Nach durchsuchen diverser Foren, habe ich 2 Möglichkeiten gefunden dies zu bewerkstelligen und habe im Moment folgendes implementiert: Funktion die Aufgerufen wird: void swReset(void) { __DSB(); *((unsigned long *)(0x2000FFF0)) = 0xDEADBEEF; NVIC_SystemReset(); } Dabei ist NVIC_SystemReset() folgende SW-Reset Funktion: void NVIC_SystemReset(void) { /* Ensure all outstanding memory accesses included buffered write are completed before reset */ __DSB(); /* Keep priority group unchanged */ SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); /* Ensure completion of memory access */ __DSB(); /* wait until reset */ while(1); } Diese Funktion führt zum Aufruf vom Restart Handler, welcher dann an die nötige Zieladresse springt: { Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main LDR R0, = 0x2000FFF0 LDR R1, = 0xDEADBEEF LDR R2, [R0, #0] STR R0, [R0, #0] ; Invalidate CMP R2, R1 BEQ Reboot_Loader LDR R0, =__main BX R0 ENDP ; Reboot loader Reboot_Loader PROC EXPORT Reboot_Loader LDR R0, =0x1FFFF000 LDR SP,[R0, #0] LDR R0,[R0, #4] BX R0 ENDP } Wie erwähnt, funktioniert dies auch eigentlich. Boot1 ist über Widerstand an GND. Boot0 hängt über einen Flipflop und etwas Zusatz an 2 Buttons, sodass Boot0 -> GND normal und nur wenn beide Buttons beim Einschalten der Stromversorgung betätigt sind wird Boot0 -> High und das Gerät geht "per Hardware" in den STM32 Bootloader. Ich leide jedoch an einem eigenartigen Effekt, den ich nicht verstehe. Wenn ich die Leiterplatte, auf der der STM verbaut ist, in ein Gehäuse Einbaue, kann ich die SW Methode nicht mehr verwenden, die HW Methode schon und auch sonst gibt es im Betrieb der Firmware keinerlei Probleme im Gehäuse. Auf das Senden vom Init (0x7F) Kommando folgt im Gehäuse keine Antwort mehr vom STM32. Die angeschlossenen Kabel sind die Selben, ich habe auch die Erdung des Gehäuses geprüft. Keine Leiterbahn und kein Pin haben Kontakt zum Gehäuse, es treten auch sonst keine Effekte auf, wenn die LP im Gehäuse verbaut ist, auch EMV Prüfung hat sie im Gehäuse gemeistert. Ich fürchte, dass Ihr mir jetzt auch nicht aus dem Stehgreif sagen könnt was das Problem ist, aber vielleicht hatte von euch schon einmal jemand ein Problem im Zuge von Restarts bei einem STM32, oder noch einen Vorschlag was ich prüfen sollte.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.