Forum: Mikrocontroller und Digitale Elektronik STM32CubeIDE: bekomme blinky läuft nicht


von Andreas S. (igel1)


Angehängte Dateien:

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 */

    /* 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

von Wastl (hartundweichware)


Lesenswert?

Andreas S. schrieb:
> Habt Ihr vielleicht eine Idee, warum es beim STM32F429I-DISC0 Board
> nicht funktioniert/blinkt?

Dein IOC File beinhaltet keine Initialisierungen für deine LED.
Daher wird der generierte Code auch keine Initialisierungen
vornehmen.

: Bearbeitet durch User
von J. S. (jojos)


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.

von Wastl (hartundweichware)


Lesenswert?

J. S. schrieb:
> dem kannst du mit User Label auch
> einen passenden Namen geben.

... und diesen Namen sollte man dann auch verwenden um

HAL_GPIO_WritePin(.....);

aufzurufen.

von Wastl (hartundweichware)


Lesenswert?

Andreas S. schrieb:
<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.

von Markus H. (dasrotemopped)


Lesenswert?


von Harry L. (mysth)


Angehängte Dateien:

Lesenswert?

Ich hab dir mal ein Beispiel für eine .ioc-Datei mit den 
Standard-Einstellungen für dein Board generiert, und dein Blinky 
entsprechend angepasst.

von Markus H. (dasrotemopped)


Lesenswert?

>HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET);
>HAL_Delay(1000);
>HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
>HAL_Delay(1000);

oder:

HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
HAL_Delay(1000);

von Harry L. (mysth)


Lesenswert?

Markus H. schrieb:
> oder:
>
> HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
> HAL_Delay(1000);

Hilft dem TO aber kein Stück weiter, und deshalb hab ich mich ganz 
bewust auf seinen Code bezogen.

von Andreas S. (igel1)


Angehängte Dateien:

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 ...

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Andreas S. schrieb:
> (meine
> einzige Idee: mein DISC0 Board läuft nicht unter der DISC1
> CubeMX-Konfiguration)

Diese Idee ist ganz sicher falsch.

von Wastl (hartundweichware)


Angehängte Dateien:

Lesenswert?

Andreas S. schrieb:
> Habt Ihr noch weitere Ideen?

Ist es ganz sicher dieses Board im Anhang? Oder doch
ein Nucleo F429?

von J. S. (jojos)


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.

von Wastl (hartundweichware)


Lesenswert?

J. S. schrieb:
> bzw. warum gibt es die alte Config nicht mehr?

Wer sagt das?

von Wastl (hartundweichware)


Angehängte Dateien:

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
  }

von J. S. (jojos)


Lesenswert?

Wastl schrieb:
> Wer sagt das?

Der TO, siehe erster Beitrag.
Eventuell ist es einen älteren F4Cube Package drin, aber an an den LED 
Pins scheint sich nichts geändert zu haben. Nur das die STLink Hardware 
auf einen neueren Stand gebracht wurde.

von Wastl (hartundweichware)


Lesenswert?

J. S. schrieb:
> Eventuell ist es einen älteren F4Cube Package drin,

Das lässt CubeMX gar nicht zu, es wird immer das neueste,
aktuelle Package automatisch heruntergeladen (solange
man am Internet hängt).

von Wastl (hartundweichware)


Lesenswert?

J. S. schrieb:
> Der TO, siehe erster Beitrag.

Ok, da war ich etwas voreilig. Das Disc0 Board wird nicht mehr
gelistet wenn man die Board Selection aufruft. Also mein Versuch
den Code laufen zu lassen bezieht sich auf das STM32F429-Disc1
Board. Aber mit dem Original TestMySTM32F429-Disc0_v005.ioc des
TO generiert.

von J. S. (jojos)


Angehängte Dateien:

Lesenswert?

also ich kann auch die älteste Version 1.0.0 installieren, aber auch die 
enthält auch kein F429-Disco.
Aber da die Unterschiede bei IO doch nicht Signifikant sind ist es auch 
egal, dafür muss man sich nicht die alten Versionen antun.

: Bearbeitet durch User
von Andreas S. (igel1)


Angehängte Dateien:

Lesenswert?

Hier noch ein Foto von meinem Board mit der Bezeichnung:

stm32f429I-DISCO

Auf der Rückseite gibt es noch einen Aufkleber:
MB1075B-01
213370547

Prozessor:
32F429ZIT6U

von Wastl (hartundweichware)


Lesenswert?

Andreas S. schrieb:
> Hier noch ein Foto von meinem Board mit der Bezeichnung:

Warum hast du noch nicht mein Blinky getestet?

von Andreas S. (igel1)


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.

von J. S. (jojos)


Lesenswert?

Andreas S. schrieb:
> ... und weil ich schlicht über die Jahre vergessen habe, wie ich so ein
> HEX-File in den Prozessor reingeschoben bekomme ...

STM32CubeProgrammer installieren, hex oder bin per Drag & Drop auf das 
Fenster ziehen und einen Button drücken.

von Andreas S. (igel1)


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

von J. S. (jojos)


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).

von Wastl (hartundweichware)


Lesenswert?

Andreas S. schrieb:
> und
> irgendwo in einer von denen (habe gerade keine Lust, das nochmals
> genauer zu untersuchen) scheint ein Bug begraben zu sein.

Ja schon klar!

Wieder mal ein Fall von "Hersteller hat fehlerhaften Code
geliefert und Anfänger findet endlich nach 10 Jahren den
Fehler und rettet die Welt".

Am Öl kann's nicht gelegen haben, es war ja keins drin.

: Bearbeitet durch User
von Andreas S. (igel1)


Lesenswert?

Das war aber gar nicht nett, Wastl.
Und ich hab nachgeguckt: Öl war doch drin.

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.