Mögliche Ursachen für das Hängenbleiben nach dem STM32 IAP-Firmware-Upgrade-Sprung

Die Verwendung des IAP-Firmware-Upgrades ist im Wesentlichen ein Sprung der Codeadresse, also ein Sprung vom Bootload-Code zum APP-Code.

Einzelheiten zum Prinzip des IAP-Upgrades finden Sie selbst. In diesem Beitrag wird hauptsächlich erklärt, dass zwei während des Entwicklungsprozesses aufgetretene Probleme dazu führten, dass das Firmware-Upgrade nach dem Springen zurückgesetzt wurde.

Frage 1: Nachdem der Bootload-Sprung erfolgreich war, bleibt die Initialisierung der seriellen Schnittstelle hängen, was dazu führt, dass der Watchdog zurückgesetzt wird.

Analyse: Die Initialisierung der Peripheriegeräte im Bootload muss im APP-Code gelöscht werden, andernfalls kann die Initialisierung in der APP nicht erfolgreich sein und die meisten von STM32CubeMX generierten Funktionen auf niedrigerer Ebene des HAL haben die Form while, Wenn die Initialisierung nicht erfolgreich ist, bleibt sie hängen. Wenn Sie sie zu diesem Zeitpunkt festlegen, wird der Watchdog zurückgesetzt, wenn er deaktiviert ist.

Verarbeitungsmethode: HAL_DeInit() in der ersten Zeile der Hauptfunktion hinzufügen; periphere Initialisierung löschen.

Frage 2: Sobald der Bootload die Sprungfunktion ausführt, wird der Code im App-Bereich nicht ausgeführt.

Analyse: Die Situation, auf die ich gestoßen bin, war, dass die App aufgrund der Nichtübereinstimmung der Taktquelle zwischen dem Bootload und den APP-Codes nicht ausgeführt wurde. Der Bootload verwendet eine interne Uhr und die APP verwendet eine externe 8M-Uhr. Dies führt dazu, dass beim Springen zum APP-Code dieser beim Ausführen hängen bleibt, bis die Uhr konfiguriert ist. Wenn die Uhr nicht erfolgreich konfiguriert ist, kann der E/A-Port nicht initialisiert werden und es gibt keine Möglichkeit, ein Signal zu senden, um einen zu erstellen Eingabeaufforderung. Es scheint, dass der Code im App-Bereich nicht ausgeführt wird, aber tatsächlich wird er trotzdem ausgeführt. von. Die Initialisierung der Uhr ist fehlgeschlagen und bleibt hängen. Der Watchdog ist eingestellt und wird zu diesem Zeitpunkt zurückgesetzt.

Verarbeitungsmethode: Es gibt zwei Möglichkeiten, wählen Sie einfach eine aus.

1. Konfigurieren Sie die Taktquelle von Bootload und APP so, dass sie identisch ist.

2. Fügen Sie HAL_RCC_DeInit() am Anfang von main() im APP-Bereich hinzu, löschen Sie die Einstellungen erneut und konfigurieren Sie die Uhrparameter.

Supongo que te gusta

Origin blog.csdn.net/weixin_39457767/article/details/130888149
Recomendado
Clasificación