Suponiendo que estás en el punto donde:
- está utilizando una imagen de firmware precompilada que ha funcionado para otros con este diseño de PCB exacto y el número de pieza de MCU exacto en el pasado, por lo que se descartan todos los problemas de la cadena de herramientas / enlazador / etc
- el cargador de arranque USB se enumera en su máquina host (computadora de desarrollo)
- ha confirmado la suma de comprobación de su imagen de firmware contra una buena copia conocida
- se rellena todo el PCB (alias, todas las partes están soldadas)
- el circuito básico de energía está funcionando hasta cierto punto (también conocido como, todos los rieles de voltaje y reguladores están dentro de los rangos aceptables)
- La MCU se enciende, el regulador de voltaje lógico interno se está ejecutando
- todos los interruptores, botones, mandos, fusibles, enchufes, enchufes, bandejas, etc. están en posición vertical y vertical para el despegue
- ha inspeccionado visualmente todas las soldaduras de sus manos con un microscopio para detectar cortocircuitos y juntas malas
... entonces, los problemas comunes que surgen con los STM32 en esta etapa podrían ser:
Los pines de reinicio y arranque (BOOT0 / BOOT1) no se están jalando correctamente en el momento adecuado. Intente sondear estas líneas para asegurarse de que estén configuradas correctamente, y no simplemente flotando. Tenga en cuenta que el reinicio debe tirarse hacia abajo con un drenaje abierto, no empujar y jalar algunos (¿todos?) Chips STM32F4 (este es un punto de diseño de hardware). Si existe algún tipo de lógica que maneje estos pines, capture una traza del osciloscopio y verifique con la hoja de datos para asegurarse de que estén en los niveles correctos en los momentos correctos.
assert()
failure muy temprano en el código de inicio . Por ejemplo, durante el reloj y las rutinas de inicialización de NVIC o la configuración del tiempo de ejecución, se evita que main()
sea invocado. Intente una configuración más sencilla, por ejemplo, utilizando los relojes internos de baja velocidad.
Fuente de alimentación defectuosa , por ejemplo, un apagón cuando algún chip externo está habilitado. Alcance los rieles de alimentación eléctrica con un osciloscopio correctamente conectado a tierra durante los primeros dos docenas de microsegundos para asegurarse de que todos los voltajes sean razonablemente estables cuando el chip está tratando de encenderse. Si se trata de un dispositivo alimentado por USB, intente utilizar una fuente de alimentación de banco o batería.
Configuración de NVIC (interrupción) o RCC (reloj) defectuosa o fuera de especificación en el firmware. Verifique todas las letras pequeñas en la hoja de datos sobre los límites de frecuencia PLL intermedios y otros. La configuración fuera de especificación puede funcionar con algunos chips del mismo modelo pero no con otros debido a las tolerancias de fabricación.
El LED de montaje en superficie parpadeante se rellena hacia atrás. También ocurre a veces con osciladores. En este caso particular, parece que tienes otros signos de falla, pero intenta alternar tantos GPIO como sea posible en tu código y prueba para verificar.
Los bits de flash internos de "configuración de usuario" de alguna manera se han configurado incorrectamente , revise la nota de aplicación especial sobre esto.
De alguna manera, ha llenado el microcontrolador equivocado, verifique las marcas del paquete en caso de que haya algún problema en la cadena logística en alguna parte.
Hay erratas para este silicio o lote, consultar el sitio web de ST.
Habiendo dicho todo esto, si está haciendo una presentación de placa en hardware soldado a mano sin un depurador, básicamente apuñala en la oscuridad con una linterna de un bit en una biblioteca infinita con miles de bytes de configuración Registros y cientos de páginas de documentación de referencia. Espero que te estés divirtiendo!