El LED se ilumina tenuemente cuando el uC está en reinicio
Diseñé una PCB que tiene un STM32G431CBT6. También hay dos LED, uno rojo y uno verde, conectados como se muestra:

Cuando lo encendí por primera vez (por lo que aún no hay programa en el uC), el LED rojo se iluminaba débilmente. Después de cargar un programa de luz intermitente LED en la uC, funciona bien (con brillo total), sin embargo, si presiono el botón de reinicio, el LED rojo se enciende de nuevo tenuemente y el voltaje en R1 es de 120 mV. Entonces, 120uA fluye por alguna razón. El otro LED no hace esto y el voltaje en R2 es 0.
Mirando la hoja de datos, solo encontré esta nota sobre PB4 (página 60):
"Después del reinicio, estos pines se configuran como funciones alternativas de depuración JTAG / SW, y se activan el pull-up interno en los pines PA15, PA13, PB4 y el pull-down interno en el PA14".
Pero incluso si hay un pull-up en PB4, el LED no debería estar encendido, entonces, ¿qué causa este comportamiento?
Editar:
Después de dejar el proyecto a un lado por un tiempo, ahora no lo hace, pero no sé qué ha cambiado. Solo estaba jugando con la configuración de arranque en los bytes de opciones (con la utilidad ST-Link), aunque no creo que eso tenga nada que ver con el menú desplegable de UCPD.
Por cierto, encontré la configuración predeterminada para deshabilitar el menú desplegable:
(y sí, se llama "pull-up" en la configuración, pero parece ser un error)

Cuando está marcado (predeterminado), pone el
HAL_PWREx_DisableUCPDDeadBattery();
llamada de función en la función HAL_MspInit.
Cuando no se marcaba, el LED se iluminaba tenuemente incluso después del reinicio, por lo que verificó la respuesta aceptada a la pregunta original. Hasta que comenzó a no volver a hacer la luz tenue.
Resumen:
- Originalmente, el LED se iluminaba tenuemente solo en el reinicio.
- Esto se debió al menú desplegable de UCPD, que fue desactivado por la casilla de verificación "Ahorrar energía de UCPD no activo - Desactivación de batería muerta" marcada por defecto. Pude verificar esto desmarcándolo y sin configurar el pin GPIO para el LED, lo que resultó en una iluminación tenue incluso después del reinicio.
- Algo sucedió y ahora nunca lo hace, independientemente de la casilla de verificación o el reinicio. ¿Quizás el desplegable se ha roto por alguna razón? Solo sé que el pin GPIO en sí es funcional, puede conducir el LED correctamente cuando se programa.
Respuestas
En el manual de referencia se lee que esta serie de MCU en particular usa PB4 para uno de los pines CC del conector USB-C. Esto significa que el pin tiene soporte para una función desplegable interna de 5.1k activada de manera predeterminada en el momento del reinicio, ya que de lo contrario, es posible que no sea posible usar el cargador de arranque para descargar firmware a través del conector USB-C. Por tanto, si es necesario utilizar JTAG, el menú desplegable se puede desactivar. Por lo que también afectará al LED.
Lo que causa el comportamiento es algún error en alguna parte. O no está realmente conectado a los pines que cree (incluso el ingeniero más veterano puede hacer esto), o el manual está equivocado. Tienes razón. La única forma en que se pueden iluminar con poca luz es si hay un menú desplegable.
A veces, la respuesta está enterrada profundamente en el manual.
Si te molesta, ponle un fuerte pull-up.
Si se activa mediante un menú desplegable predeterminado a GND (y esto debe anotarse en la hoja de datos del microprocesador si este pin tiene en la inicialización un menú desplegable), entonces sí, es probable que drene algo de corriente a través del LED. Normalmente, el código inicializaría los pines de doble función a su estado correcto y / o eliminaría los pull-downs / pull-ups que no sean necesarios. Pero en tu caso dices que no hay código. Bueno, con un código de inicialización escrito correctamente, el LED se inicializará al estado de inicio correcto (probablemente APAGADO por defecto). Si está perdiendo el sueño, es mejor agregar un fuerte pull-up o asegurarse de que el código se esté ejecutando tan pronto como encienda la placa y ejecute el código.