No se puede alternar un LED con STM32 Blue Pill

Soy un principiante y estoy usando una placa STM32 Blue Pill por primera vez. Completé un tutorial básico sobre cómo activar el pin PC13 (LED incorporado), pero ahora que estoy tratando de hacer que un LED externo parpadee en una placa de prueba, tengo problemas.

Estoy usando el STM32CubeIDE y permití que el IDE generara automáticamente el código de configuración que necesito para usar el pin PA0 como salida GPIO:

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

}

Dentro de mi ciclo, simplemente estoy corriendo

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

A pesar de este código simple, no puedo hacer que el LED parpadee. Aquí hay una foto de mi circuito:

Para resumir, tengo los pines de tierra y 3.3v conectados a los rieles de alimentación de la placa de pruebas en la parte inferior (con un LED de alimentación rojo). Tengo un cable puente que conecta el pin A0 a la fila 25 y una resistencia de 330 Ω en serie con un LED de 5 mm con un voltaje directo de 3,0 V y una corriente directa de 20 mA. Luego conecto el cátodo del LED al riel de alimentación negativo en la placa de prueba (conectado a la tierra de la placa).

He intentado intercambiar cables de puente, pines de salida, LED, resistencia, pero nada ha funcionado. Conecté el cable de puente de pines al riel de alimentación positivo y el LED se iluminó (como se esperaba), así que no creo que haya ningún problema con mi circuito. También reprogramé la MCU para asegurarme de que mi programa se estaba cargando correctamente. ¿Quizás estoy malinterpretando la relación entre el pin y el suelo? Cualquier ayuda sería apreciada.

El tercer argumento de HAL_GPIO_Write_Pin() es un ENUM. Se supone que es GPIO_PIN_RESET o GPIO_PIN_SET. A C no le importa si reemplaza una enumeración con un entero constante. Pero supongo que no es la mejor forma de hacerlo. También hay una función HAL_GPIO_TogglePin(). para tu información
A menos que ese LED ROJO tuyo tenga una resistencia incorporada, pronto dejará que la magia salga humo. Lo tienes cableado directamente entre los rieles de suministro...

Respuestas (1)

Desea alternar el pin 0 del Puerto A, pero en realidad está alternando el pin 0 del Puerto C.

Dios mío, ahí van varias horas de mi vida que nunca recuperaré. Gracias.
@DonutGaz bienvenido al club. Desearía tener un dólar por cada hora que pasé persiguiendo algún "error" que en realidad fue solo un error menor de mi parte como este. JAJAJA.
Sí, después de un par de estos, empiezas a entender qué comprobar y en qué orden. Lo bueno es que empezaste a pensar que también podría ser un error de hardware. En caso de no tener colegas cerca para señalar errores, puedes revisar el código y explicarle a un compañero virtual qué hace qué hace tu código, lo que te obliga a leer todo y en el momento dices (en tu mente) " aquí estamos alternando el puerto A", pero en la pantalla en realidad es C, puede encontrarlos usted mismo. O bien, use el depurador y espere que el pin 0 de GPIOA cambie cuando se realiza un solo paso, pero no lo hace, mientras que GPIOC ha cambiado.