Intentando flashear STM32f030f4 (ARM, Cortex M0): ¿cuál es el cableado adecuado?

Tengo chips STM32F030F4 de la tienda, hice un pequeño adaptador de placa de prueba para él e intenté conectarme a su cargador de arranque incorporado a través de USART1.

He fallado y estoy un poco desconcertado con el cableado. Mi esquema actual es el siguiente:

  • pin 16 (VDD) a +3.3
  • pin 15 (GND) a GND
  • patilla 1 (BOOT0) a +3.3
  • pin 4 (RESET) a GND, temporalmente
  • pin 8 (USART1_TX) a RX del cable FTDI
  • pin 9 (USART1_RX) a TX del cable FTDI

El cable lo uso constantemente con chips NXP, así que creo que lo está usando. También proporciona +3,3 voltios y tiene LEDS para indicar la actividad de TX/RX.

Probé esta herramienta http://sourceforge.net/projects/bootstm32/ después de conectar el cable y aplicar temporalmente RESET a GND.

Mágicamente, no se pudo conectar, aunque veo parpadear el LED de actividad TX...

He vuelto a comprobar la hoja de datos y estoy algo desconcertado. También hay pines 17 y 18 para USART1 TX y RX. Yo también los he probado pero sin éxito.

Otra preocupación es que creo que este chip no tiene el pin BOOT1 (muchos manuales escriben sobre cómo reducirlo). ¿Entonces supongo que no es necesario?

También pensé que podía probar con un multímetro si uno de los pines está en un estado ALTO fuerte, que debería ser TX, pero ninguno lo está. ¿Aunque probablemente TX se convierta en salida solo después de que se complete la detección automática de velocidad en baudios?

¿Qué más puede estar mal? Creo que no necesito cuarzo para el esquema más simple, ¿sí? ¡Gracias de antemano por tus consejos!

UPD Resuelto! Parecía que VDDA también debería estar conectado; de lo contrario, el chip está en estado de reinicio. Consulte mi propia respuesta a continuación para obtener más detalles.

Respuestas (3)

Por fin he encontrado lo que faltaba.

¡VDDA debe estar conectado! por ejemplo, a VDD. Creo que si el dispositivo también tiene VSSA, también debería estar conectado.

De lo contrario, el chip está en modo de reinicio "gracias" a la funcionalidad que monitorea tanto VDD como VDDA y simplemente no permite que el chip se inicie.

Así que la conexión mínima es así:

  • 3,3 voltios a VDD, VDDA, BOOT0
  • GND a VSS (y VSSA si está presente)

(En este punto, puede verificar que PA9 produce un alto nivel fuerte; parece que se convierte de inmediato en salida TX)

  • PA9 (TX) al RX del cable (en mi caso, no se necesita pull-up ya que es una salida completamente funcional)
  • PA10 (RX) al TX del cable.

Por cierto, uso el cable con niveles de 5V y está bien ya que los pines son tolerantes a 5V.

¡Muchas gracias! Cometí el mismo error (era demasiado perezoso para conectar VDDA) y pasé dos días para encontrar el problema.
Me encontré exactamente con el mismo problema también. No hay mención de VDDA en ninguna parte (excepto en su publicación), pero una vez que lo conecté a la alimentación, todo comenzó a funcionar mágicamente. ¡Muchas gracias!

A partir del manual de referencia del STM32F030x4 , página 45, sección Embedded Boot Loader:

El cargador de arranque incorporado se encuentra en la memoria del sistema, programado por ST durante la producción. Se utiliza para reprogramar la memoria Flash utilizando una de las siguientes interfaces seriales:
• USART en los pines PA14/PA15 o PA9/PA10
• I2C en los pines PB6/PB7 (solo dispositivos STM32F070xx y STM32F030xC)
• Interfaz USB DFU (solo dispositivos STM32F070xx)
Para obtener más detalles, consulte AN2606 .

Si sigue leyendo el otro documento recomendado ( AN2606 ), descubrirá que debe optar por PA9/PA10 porque el gestor de arranque está configurado en esos pines. (O PA14/PA15, pero su chip debe ser un paquete TSSOP20 de 20 pines si Boot0 es pin1, por lo que no hay ningún PA15). Además, tiene razón, no se necesita un cristal externo, la MCU está sincronizada desde HSI.

ingrese la descripción de la imagen aquí

Para los requisitos de conexión de hardware, se necesitan resistencias pull-up en las líneas TX y RX si no se agregan en el lado del host.

ingrese la descripción de la imagen aquí

También encontrará información sobre el pin Boot0 y el bit nBoot1 (en este MCU, Boot1 no es un pin sino un bit en el byte de opción de usuario).

El gestor de arranque STM32F03xx4/6 se activa aplicando el patrón 2

y patrón2 es:

Patrón2 Boot0 (pin) = 1 y nBoot1 (bit) = 1


Lo mejor sería si pudiera verificar las líneas UART con un osciloscopio o un analizador lógico, solo para asegurarse. Y verifique este software también y lea todos los documentos relacionados de ST.

Gracias por el enlace a la "guía de referencia", ¡soy una niña muy tonta por perderme este documento por completo! Leí sobre "bytes de opción" y parece que nBOOT1 = 0 de forma predeterminada. Así que necesitaré una forma de sobrescribirlo para continuar :( En cuanto a "este software", parece que no se supone que se ejecute en Linux, de lo contrario, ¡seguramente lo intentaré!
¡Ay no, me equivoco! nBOOT1 debería ser 1 por defecto de fábrica, si entiendo correctamente la guía de referencia... Así que ese no debería ser el problema.

No sé acerca de la serie stm32f0, pero stm32f1 tiene BOOT0 configurado en 3.3V, BOOT1 ni siquiera sabe cuál es su propósito, por lo que siempre está en la misma posición. BOOT0 tiene que estar alto cuando enciende el dispositivo, luego pasa al modo de cargador de arranque, no necesita reiniciar nuevamente, al menos asegúrese de que cuando reinicie tenga BOOT0 alto, de lo contrario, comenzará con el programa. Cuando está en modo cargador de arranque, el XTAL no tiene importancia, quizás use el LSI interno.
La pregunta es: ¿por qué no utiliza la GUI oficial del cargador de arranque ST para la transferencia? ¿No crees que algún cargador de arranque personalizado de sourceforge no está 100% bien?

Gracias por su respuesta. No uso la GUI oficial del cargador de arranque ST principalmente porque no tengo Windows a mano...