¿Es posible programar un STM32 con un Arduino?

Tengo uno de estos:
http://www.ebay.com/itm/111297094334?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649

Sé que generalmente se usa un dongle USB-TLL para programarlo, pero no tengo uno y realmente no quiero esperar 2 semanas hasta que llegue.

¿Es posible programarlo con un Arduino? Tengo un Arduino Mega y Uno por ahí. Gracias.

Me parece que está programado a través de JTAG, no a través de UART. A menos que venga con un gestor de arranque instalado, necesitará JTAG.
La última vez que hice un programador JTAG desde cero, incluido todo el software, me tomó alrededor de 40 horas de trabajo sólido. Entonces, a menos que ya esté extremadamente familiarizado con los algoritmos de programación JTAG para el STM32, o pueda usar el trabajo de otra persona, no ahorrará mucho tiempo siguiendo esta ruta.

Respuestas (4)

A través de JTAG, es prácticamente imposible. Lo mejor que puedes hacer es usar el gestor de arranque integrado que se envía instalado de fábrica en cada chip STM32. Este gestor de arranque utiliza el periférico USART1 del STM32 para interactuar con una computadora u otro dispositivo. Sin embargo, la herramienta más útil para interactuar con este gestor de arranque es un convertidor de USB a serie, utilizando, por ejemplo, un chip FT232 , que puede conectar a su computadora. A continuación, puede instalar la aplicación ST Flash Loader Demonstrator para cargar el código en su placa mediante el gestor de arranque.

Algunos puntos importantes para hacer:

  • para usar el cargador de arranque, debe bajar BOOT1 (conectar a GND) y BOOT0 alto (conectar a VDD) antes de encender la placa. Luego, cuando ejecute el código que acaba de cargar, tire de BOOT0 hacia atrás. Consulte la sección 3.4 del manual de referencia STM32F10x .
  • un convertidor USB a serial comercial incluiría un traductor de nivel de voltaje, ya que los niveles de voltaje RS-232 son mucho más altos que los 3.3 V usados ​​en el STM32 (generalmente ± 12V). Necesitaría piratear un convertidor de este tipo para obtener señales TX y RX directamente desde el FT232, de lo contrario, dejará escapar el humo mágico del STM32. Si no tiene uno, puede encontrarlo en su tienda local de computadoras a la venta. Otra opción sería buscar algún código Arduino que emule un convertidor de USB a serie (sería demasiado trabajo escribir uno usted mismo). Tenga en cuenta que incluso si su convertidor usa señalización de 5.0 V, está bien usarlo con el STM32 ya que los pines USART1 necesarios para el cargador de arranque son tolerantes a 5V.
  • finalmente, debe tener en cuenta que esto no sustituye a un programador JTAG real. Usando el cargador de arranque, solo puede cargar y ejecutar el programa. Es imposible depurarlo (es decir, insertar puntos de interrupción, leer y modificar valores de registro y memoria, recorrer el código, etc.) Usar el cargador de arranque está bien si solo desea ver algunos LED parpadear en su placa nueva y brillante, pero para serio trabajo, un depurador real te hace mucho más productivo. Pida un JTAG ahora , si aún no lo ha hecho. El ST-Link/V2 es bueno y no demasiado caro ( $29,75 de Digi-Key al momento de escribir este artículo).
Cabe señalar que FTDI vende cables UART de nivel "TTL" que contienen el chip FT232. Hay varias opciones. 1) Niveles de señal de 3,3 V (TTL-232RG-VSW3V3-WE). 2) Niveles de señal de 5,0 V (TTL-232RG-VSW5V-WE). 3) Niveles de señal ajustables (TTL-232RG-VIP-WE), siendo el voltaje determinado por una referencia externa. Uno de estos cables proporcionaría un puerto serie del voltaje correcto sin modificaciones adicionales. Si está dispuesto a pagar, puede tenerlos tan pronto como sea posible de Digikey, de lo contrario, el envío demorará 5 días.
@user4574 Estoy seguro de que es cierto, pero nuevamente, no puedo enfatizar lo suficiente la importancia de tener un programador JTAG adecuado para desarrollar firmware (usar el cargador de arranque solo tiene sentido si está programando, digamos, un firmware desarrollado previamente que descargó de Internet) . Intentar depurar código sin un programador JTAG es una desventaja similar a competir en una carrera de Fórmula 1 con una bicicleta.
No estoy en desacuerdo contigo sobre los abundantes beneficios de un programador JTAG real. Usted mencionó modificar "un convertidor comercial de USB a serie". Mi intención era solo mencionar que hay cables que podrían usarse sin modificaciones (si uno fuera por ese camino).

Sí, utilizando un boceto de Arduino: consulte "Carga del cargador de arranque de los pobres" en: https://git.jeelabs.org/jcw/embello/src/branch/master/projects/ask/stm32f1init/stm32f1init.ino

Ver más en https://jeelabs.org/book/1546c/index.html

¿Te importaría añadir algo más de información? Por ejemplo, ¿cómo llegaste a esto? Traté de encontrar alguna documentación o README o en realidad algo sobre ese código, pero no pude encontrar nada.
También puedes hacerlo con RPi

Agregando a la respuesta de swineone, prefiero usar la herramienta de línea de comandos dfu-util ( más información ) con un script por lotes. Simplemente presiono el botón de arranque mientras enchufo la placa, o mejor aún, tengo un segundo botón de reinicio para apagar y encender rápidamente la placa.

Luego, hago doble clic en mi secuencia de comandos por lotes y automáticamente parpadea el tablero y lo devuelve a la operación normal.

set bin=C:\STM32CubeIDE_Workspace\STM32_Project\Debug\STM32_Project.bin
set du=C:\STM32CubeIDE_Workspace\dfu-util-0.9-win64\dfu-util.exe
%du% -a 0 -s 0x08000000:leave -D %bin%
pause

Si desea utilizar un Arduino (u otra placa) para programar un stm32, la clave parece ser el CP2102 o el chip FTDI.

Según el comentario de Fabio, traté de programar mi clon chino falso STM32F103C8 con un Arduino nano (a través de Arduino Ide 1.8.5 y la biblioteca de placas de Roger Clark) con la compatibilidad con las placas base Arduino de stm32duino . Sin embargo, solo funcionó dos veces por pura suerte.

El Arduino Decemilia en " Carga del cargador de arranque del pobre hombre " tiene un chip FTDI como se muestra a continuación. Si tiene un módulo con un chip FTDI o un chip CP2102, lo más probable es que pueda programar un STM32.

ingrese la descripción de la imagen aquí

¡Lo probé con un ESP32 NodeMCU: versión de 38 pines que tenía por ahí y funcionó perfectamente! (con Arduino IDE así como en PlatformIO).

Este es el enlace del foro para usar un ESP32 como FTDI .

Mi configuración:

Between ESP32 and STM32:
3.3V  (ESP32)  -->  3.3V  (STM32)
GND   (ESP32)  -->  GND   (STM32)
TX    (ESP32)  -->  A9    (STM32)
RX    (ESP32)  -->  A10   (STM32)

Internal to the ESP32:
EN (ESP32) --> GND (ESP32)

configuración opcional con Platform IO (archivo plataforma.ini):

[env:bluepill_f103c8]
platform = ststm32
board = bluepill_f103c8
framework = arduino
upload_protocol = serial
upload_port = COM3
monitor_speed = 115200

ingrese la descripción de la imagen aquí

Resulta que el ESP32 NodeMCU también tiene un chip CP2102

ingrese la descripción de la imagen aquí

-Rohit