STM32CubeIDE: bekomme blinky läuft nicht

#7816199
Lesenswert?

Liebe Forengemeinde,

so peinlich es mir auch ist - ich bekomme gerade ein einfaches LED-Blinken auf meinem STM32F429I-DISCO - Board nicht ans Laufen (Achtung: es ist NICHT das neuere DISC1 Board, sondern noch das alte DISC0 Board).

Hintergrund: ich war schon einmal ganz passabel "drin" im Thema STM32, habe dann aber viele Jahre nichts mehr in dieser Richtung gemacht => alles vergessen.

Nun möchte ich wieder etwas einsteigen und diesmal die Segnungen neuer Tools (hier: STM32CubeIDE unter MacOS) nutzen.

Also habe ich:

  • STM32CubeIDE installiert
  • Den ST-Link/v2 auf dem Board auf den neuesten Stand gebracht
  • Ein neues "STM32 Projekt" in der IDE angelegt und dabei das Board "STM32F429I-DISC1 ausgewählt (mein DISCO gab's leider nicht zur Auswahl).
  • In der main.c lediglich die while-Schleife angepasst:
<Code> /* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET); HAL_Delay(1000); HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET); HAL_Delay(1000); /* USER CODE END WHILE */
1
/* USER CODE BEGIN 3 */

} /* USER CODE END 3 */ </Code>

  • Abschließend natürlich kompiliert und auf das Board geflashed (das scheint zu funktionieren - jedenfalls blinkt die Flash-LED und das Original-Demoprogramm ist auch verschwunden)

Leider blinkt aber nichts. Jetzt stehe ich gerade etwas auf dem Schlauch ...

Ach ja: auf einem STM32F4-discovery-Board habe ich das Gleiche (natürlich mit leicht angepasstem Port und Pin) ebenfalls ausprobiert - funktionierte direkt auf Anhieb.

Habt Ihr vielleicht eine Idee, warum es beim STM32F429I-DISC0 Board nicht funktioniert/blinkt?

Sachdienliche Dateien habe ich angehängt - wenn Ihr mehr Infos benötigt - einfach Bescheid geben.

Viele Grüße

Igel1

Angehängte Dateien:
#7816207
Lesenswert?

Da fehlt die Initialisierung des gpio, den kann man nicht einfach so verwenden. Gehe in das CubeMX Tool bzw öffne das .ioc im Projekt und setze in der grafischen Ansicht den PIN auf Output, dem kannst du mit User Label auch einen passenden Namen geben. Beim Speichern wird dann der Code für die Initialisierung generiert.

#7816232
Lesenswert?

Andreas S. schrieb im Beitrag #7816199: <Code> </Code>

Diese beiden Schlüsselwörter schreibt man mit eckigen Klammern.

Andreas S. schrieb:

Habt Ihr vielleicht eine Idee, warum es beim STM32F429I-DISC0 Board nicht funktioniert/blinkt?

Du hättest nach dem Start von CubeMX auch gleich dein Eval- Board auswählen können, dann hätte dir CubeMX gleich alle Hardware, die auf dem Board vorhanden ist, initialisiert.

Dann hättest du nur noch aussuchen müssen welche LED wie benannt ist um mit <HAL_GPIO_WritePin(.....);> den richtigen Portpin ansprechen zu können.

#7816324
Lesenswert?

Immer wieder toll, wie hilfsbereit Ihr doch seid! Da gibt es ja noch Hoffnung für mich ...

Vorab:

Trotz Eurer Hilfe konnte ich das Problem noch nicht lösen - ich hoffe daher, Ihr haltet mir noch etwas länger das Händchen hier in diesem Thread.

Jetzt zu den Details:

  • mir ist ein saudummer Fehler unterlaufen: ich hatte schnell vor dem Post noch ein neues Projekt angelegt, um Euch saubere Dateien schicken zu können. Nur dabei hatte ich wohl vergessen, nach Auswahl des Boards auf "Initialize all peripherals with their default Mode" zu drücken.

  • völlig korrekt und folgerichtig kamen dann Eure Anmerkungen, dass ich den GPIO-Port & Pin ja erst einmal initialisieren müsse, was man wohl per CubeMX macht. Das hatte ich in meinen Vorversuchen (die auch alle nicht liefen) jedoch schon getan und trotzdem blinkte nichts.

  • jetzt habe ich das Projekt gerade nochmals neu aufgesetzt und dabei schön brav auf "Initialize all peripherals with their default Mode" gedrückt und dann meine main.c angepasst. Leider wieder kein Blinken. Habe die main.c und auch die *.ioc Datei hier nochmals angehängt (EDIT: bitte NICHT die Datei TestMySTM32F429-Disc0_v005.ioc nehmen, sondern die Datei TestMySTM32F429-Disc0_v005.ioc.orig - man kann leider keine Anhänge hier im Forum löschen - daher musste ich es so machen).

  • Dann habe ich meine *.ioc und main.c sogar durch Harry L.'s Dateien ersetzt (danke Harry!), das Projekt gecleaned, neu compiliert und geflashed - wieder kein Blinken.

Hmmm - habe nach wie vor keine Idee, woran es liegen könnte (meine einzige Idee: mein DISC0 Board läuft nicht unter der DISC1 CubeMX-Konfiguration)

Habt Ihr noch weitere Ideen?

Viele Grüße

Igel1

PS: danke auch an Markus H. für seinen Link "zum Auffrischen der Basics" - ich glaube, da muss ich nochmals durch ...

Angehängte Dateien:
#7816335
Lesenswert?

Dazu muss man schon die Schaltpläne vergleichen, bzw. warum gibt es die alte Config nicht mehr? ST hat da meist auch Application Notes wo die Änderungen gelistet sind. In der neuen Config sind auch Devices drin die nicht für das Blinky gebraucht werden, die kann man zur Sicherheit auch erstmal rausnehmen. Und dann ist es ja einfach den Debugger zu starten, da sieht man auch ob es bis in die main loop geht.

#7816361
Lesenswert?

Also bei mir läuft der Code auf Basis von

TestMySTM32F429-Disc0_v005.ioc

Im Anhang ein lauffähiges Hex File.

Die Modifikation damit eine LED blinkt:

1
  /* Infinite loop */
2
  /* USER CODE BEGIN WHILE */
3
  while (1)
4
  {
5
    /* USER CODE END WHILE */
6
    MX_USB_HOST_Process();  // das sollte in der Schleife drin sein
7

8
    /* USER CODE BEGIN 3 */
9
    HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET);
10
    HAL_Delay(500);
11
    HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET);
12
    HAL_Delay(500);
13
  }
Angehängte Dateien:
#7816395
Lesenswert?

Wastl schrieb:

Andreas S. schrieb:

Hier noch ein Foto von meinem Board mit der Bezeichnung:

Warum hast du noch nicht mein Blinky getestet?

Weil ich gerade mit meiner besseren Hälfte eine Heißluftfritteuse kaufen war :-)

... und weil ich schlicht über die Jahre vergessen habe, wie ich so ein HEX-File in den Prozessor reingeschoben bekomme ... (bin gerade selbst darüber geschockt).

Anyway - inzwischen läuft mein Blinky - Auflösung kommt im nächsten Post.

#7816403
Lesenswert?

Leute, Leute - Ihr seid die Besten!

J.S. (jojo) hat mich auf den Trichter gebracht: Ich hatte Euch vorenthalten, dass ich bereits vor meinem ersten Post den Debugger gestartet hatte und mich gewundert hatte, dass der nicht in der main-loop ankam.

J.S. hat mir dann die Augen geöffnet: der Debugger muss also in irgendwelchen Peripherie-Initialisierungsroutinen hängengeblieben sein.

Na - zum Glück hatte ich ja noch mein versehentlich völlig uninitialisiertes Projekt aus meinem ersten Post. Dort habe ich nun einfach einmal nur den GPIO-Pin PG13 im CubeMX eingeschaltet (eigentlich genau das, was Ihr mir auch geraten hattet) - und schon funktioniert's!

Mein Problem scheint also nicht die fehlende eine Initialisierung für den PG13 gewesen zu sein, sondern die Auswahl aller Initialisierungsroutinen, die ich per Klick auf "Initialize all peripherals with their default Mode" stets alle aktiviert hatte - und irgendwo in einer von denen (habe gerade keine Lust, das nochmals genauer zu untersuchen) scheint ein Bug begraben zu sein.

Na das ist ja mal ein schöner Start wieder zurück in die Welt der STM32 mit all ihren super neuen Cube-MX-clicki-bunti-hast-Du-nicht-gesehen Tools.

DICKES DANKESCHÖN in die Runde - ihr wart mal wieder in Hochform (... ich eher nicht ...) - was würde ich nur ohne Euch machen!

Viele Grüße

Igel1

#7816406
Lesenswert?

Am Anfang von main sind ja die calls für die _init() der verschiedenen Devices. Nach dem Post von Wastl müsste es das USB sein was da Ärger macht wenn es nicht behandelt wird. Also mal das Neue ioc probieren und USB_init auskommentieren (solange es nicht benutzt werden soll).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren