Besseres Verfahren zum „Wiederherstellen“ eines STM32F103C8T6?

Ich habe einen STM32F103C8T6 (auch bekannt als blaue Pille) und habe damit gearbeitet.

Manchmal - aus einem mir unverständlichen Grund - geht nach dem Debuggen (mit Eclipse) die Verbindung verloren und ich kann keine neue Debug-Sitzung starten.

Das einzige, was zu tun ist, ist die folgende zeitaufwändige Prozedur:

  • Schließen Sie Eclipse
  • Starten Sie das ST-Link-Dienstprogramm
  • Wählen Sie im Menü ST-LINK/Firmware-Update die Schaltfläche Device Connect (um zu sehen, ob der ST-Link-Stick eine Verbindung herstellen kann).
  • Wenn ein Fehler auftritt, stecken Sie es erneut ein (Windows zeigt ein unbekanntes USB-Gerät) und wiederholen Sie den vorherigen Schritt
  • Wenn kein Fehler auftritt, wird die Version angezeigt: V2.J27.S6 STM32+STM8 Debugger
  • Dann muss ich beim STM32 die Reset-Taste gedrückt halten
  • Wählen Sie die Menüoption Target/Chip löschen
  • Taster loslassen (rechtzeitig, sonst Wiederholung des vorherigen Schrittes)
  • Dann wird der Chip gelöscht.
  • Dann starte Eclipse neu und ich kann weitermachen

Das ist schon eine sehr langwierige Operation... gibt es eine bessere Lösung? Oder aus welchem ​​Grund führt die Debugging-Sitzung dazu, dass der STM32 die Fähigkeit verliert, eine neue Debugging-Sitzung zu starten?

Und selbst dann erhalte ich in einigen Fällen beim Debuggen den folgenden Fehler:

23:23:02 : Can not connect to target!
                  If you're trying to connect to an STM32W1xx device, please select Normal or HotPlug mode from Target->Settings menu.
                  If you're trying to connect to a low frequency application , please select a lower SWD Frequency mode from Target->Settings menu.
23:23:03 : No target connected

Das Fragment der Eclipse-Projektkonfigurationsdatei:

# use software system reset
reset_config none
set CONNECT_UNDER_RESET 0

Antworten (1)

Ich habe das Problem einer der Fragen gefunden und es als Referenz für andere hinzugefügt, da es sich um einen nicht trivialen Standard handelt:

Wenn ich den STM32CubeMX verwende, den ich verwende, ist bei jeder Projekterstellung standardmäßig das folgende Element ausgewählt:

  • SYS, Debug: Kein Debug

Dies bewirkt, dass in HAL_MspInit folgender Code generiert wird:

__HAL_AFIO_REMAP_REMAP_SWJ_DISABLE();

Sobald der Debugger diesen Befehl (der einer der ersten Befehle in HAL_Init ist, der in main() aufgerufen wird) übergibt, verliert der Debugger die Verbindung und sogar eine neue Debug-Session kann nicht gestartet werden.

Es kann leicht mit der Einstellung auf behoben werden

  • SYS, Debug: Serielle Leitung

(auch SWD: Serial Wire Debug genannt und von ST Link 2 unterstützt).

Dies bewirkt, dass in HAL_MspInit folgender Code generiert wird:

__HAL_AFIO_REMAP_SWJ_NOJTAG();

Und das Debuggen funktioniert wie gewohnt.