Eine LED kann mit STM32 Blue Pill nicht umgeschaltet werden

Ich bin Anfänger und benutze zum ersten Mal ein STM32 Blue Pill Board. Ich habe ein grundlegendes Tutorial zum Aktivieren des PC13-Pins (On-Board-LED) abgeschlossen, aber jetzt, wo ich versuche, eine externe LED auf einem Steckbrett zum Blinken zu bringen, habe ich Probleme.

Ich verwende die STM32CubeIDE und habe der IDE erlaubt, den Konfigurationscode automatisch zu generieren, den ich benötige, um Pin PA0 als GPIO-Ausgang zu verwenden:

static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);

  /*Configure GPIO pin : PC13 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /*Configure GPIO pin : PA0 */
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}

Innerhalb meiner Schleife laufe ich einfach

while (1)
  {
      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, 1);
      HAL_Delay(500);
      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, 0);
      HAL_Delay(500);
  }

Trotz dieses einfachen Codes bekomme ich die LED nicht zum Blinken. Hier ein Bild meiner Schaltung:

Zusammenfassend habe ich die 3,3-V- und Erdungsstifte mit den Stromschienen des Steckbretts unten verbunden (mit einer roten Power-LED). Ich habe ein Überbrückungskabel, das den A0-Pin mit Reihe 25 verbindet, und einen 330-Ω-Widerstand in Reihe mit einer 5-mm-LED mit einer Durchlassspannung von 3,0 V und einem Durchlassstrom von 20 mA. Ich verbinde dann die Kathode der LED mit der negativen Stromschiene auf dem Steckbrett (mit Platinenmasse verbunden).

Ich habe versucht, Überbrückungskabel, Ausgangsstifte, LEDs und Widerstände auszutauschen, aber nichts hat funktioniert. Ich habe das Pin-Überbrückungskabel an die positive Stromschiene angeschlossen und die LED leuchtete (wie erwartet), also glaube ich nicht, dass etwas mit meiner Schaltung nicht stimmt. Ich habe auch die MCU neu programmiert, um sicherzustellen, dass mein Programm korrekt hochgeladen wurde. Vielleicht verstehe ich die Beziehung zwischen Stift und Masse falsch? Jede Hilfe wäre willkommen.

Das dritte Argument von HAL_GPIO_Write_Pin() ist ein ENUM. Es sollte entweder GPIO_PIN_RESET oder GPIO_PIN_SET sein. C macht es nichts aus, wenn Sie eine Aufzählung durch eine konstante Ganzzahl ersetzen. Aber ich nehme an, es ist nicht die beste Form, dies zu tun. Es gibt auch eine HAL_GPIO_TogglePin()-Funktion. FYI.
Wenn Ihre ROTE LED keinen eingebauten Widerstand hat, wird sie bald die Magie rauchen lassen. Sie haben es direkt zwischen den Versorgungsschienen verdrahtet...

Antworten (1)

Sie möchten Pin 0 von Port A umschalten, aber eigentlich schalten Sie Pin 0 von Port C um.

Oh je, es gibt mehrere Stunden meines Lebens, die ich nie zurückbekomme. Danke schön.
@DonutGaz willkommen im Club. Ich wünschte, ich hätte einen Dollar für jede Stunde, die ich damit verbracht habe, einen "Bug" zu jagen, der eigentlich nur ein kleiner Fehler meinerseits war, wie dieser. LOL.
Ja, nach ein paar davon weißt du, was du überprüfen musst und in welcher Reihenfolge. Gut, dass Sie angefangen haben zu denken, dass es auch ein Hardwarefehler sein könnte. Falls Sie keine Kollegen in der Nähe haben, um auf Fehler hinzuweisen, können Sie den Code durchgehen und einem virtuellen Teamkollegen erklären, was er tut, was Ihren Code bewirkt, was Sie dazu zwingt, alles zu lesen, und in dem Moment, in dem Sie (in Gedanken) sagen: „ Hier schalten wir Port A um, aber auf dem Bildschirm ist es eigentlich C, Sie können diese selbst finden. Oder verwenden Sie den Debugger und erwarten Sie, dass GPIOA-Pin 0 beim Einzelschritt umschaltet, dies jedoch nicht der Fall ist, während sich GPIOC geändert hat.