Fondo
Estoy trabajando en un proyecto escolar donde he diseñado un prototipo de PCB cuyo núcleo es un microcontrolador STM32F042K6T6. Estoy usando el ST-Link de una tarjeta Nucleo STM32F401RE para programarlo.
Problema
Al programar el dispositivo con un código simple para encender un LED, el LED no se encenderá . Durante la solución de problemas, accidentalmente me di cuenta de que el LED se encendería después de un nuevo "encendido" (sin cambiar el código ni reprogramar la MCU), simplemente tirando de la fuente de alimentación y luego reconectándola.
Esto me llevó a creer que algo estaba mal con el reinicio del dispositivo después de la programación. Para probar esto, comencé desde un LED brillante después del encendido, y luego presioné el botón de reinicio para reiniciar el hardware. Como se sospechaba, el LED se apagaría y luego no volvería a encenderse. Luego, cuando desconecto la alimentación y la vuelvo a conectar, se enciende.
Otras observaciones que considero que podrían ser preguntadas.
- Los niveles de voltaje del dispositivo parecen buenos, el desacoplamiento se coloca de acuerdo con la hoja de datos.
- El restablecimiento se implementa con un levantamiento externo con una resistencia de 10k a 3.3V y luego un botón para poner en cortocircuito a tierra en el restablecimiento y una tapa paralela de 100 nF hasta el suelo. (Esto está conectado al pin NRST en la MCU, así como al pin NRST en el conector de programación).
- El LED es un LED SMD simple con una resistencia de la serie de 180 ohmios colocada en GPIO PB5. (De hecho, tiene 3 LED de estado diferentes en la pizarra y puede iniciarlos todos en código
He sondeado la señal "analógica" del pin de reinicio, y para mí la señal parece estar bien, bajando cuando hago clic / sostengo el botón de reinicio. Y cuando el LED se apaga al hacer clic en el botón de reinicio, creo que comienza a reiniciar el programa. Sin embargo, no parece reinicializar completamente y comenzar a ejecutar código desde el inicio de 'main ()'? Cuando el código realmente funciona para encender el LED después de un reinicio de encendido. Por lo tanto, parece que las instrucciones correctas se han cargado en la memoria del programa, pero los reinicios (tanto durante la programación como al hacer clic en el botón de reinicio) no logran reinicializar el archivo.
Cualquier ayuda sería muy apreciada.