Posiblemente haya muchas formas de programar la placa, utilizando diferentes herramientas. Uno de ellos, que parece bastante fácil es usar el ST-Link V2 (búscalo en Google) y OpenOCD.
-
Deja ambos jumpers de arranque en "0". Conecta los pines SWDIO, SWCLK, GND a los pines apropiados del ST Link. Aplica energía a la placa prestando atención a si es de 5V o 3.3V. El ST-Link convenientemente tiene una salida de 3.3V que se puede usar. Dado que la placa recibe 5V del conector USB, no conectes otros pines de alimentación al mismo tiempo con el puerto USB. Puede ser útil tener un cable con 4 terminales en el lado del ST-Link y dividir 3+1 terminales en el lado de la placa. La placa debería encender un LED y podría comenzar a parpadear con el otro, si está programado.
-
Tener instalado OpenOCD, las versiones más recientes pueden tener menos errores (por ejemplo, al menos 0.9.x o mejor 0.10.x). Versiones más antiguas, como las incluidas en distribuciones de Linux, pueden tener problemas con la configuración de reinicio y requerir ajustes en archivos de configuración.
-
[opcional] Si usas Linux y no te sientes cómodo ejecutando OpenOCD como root, crea un archivo en /etc/udev/rules.d
con el siguiente contenido:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="0664", GROUP="stlink"
Esto permitirá que los miembros del grupo stlink
accedan al dispositivo ST-Link. Crea este grupo y añádete a él. Puedes utilizar cualquier grupo que sea conveniente.
-
Suponiendo un host de Linux y una instalación predeterminada de OpenOCD a nivel del sistema, verifica si la conectividad está bien, el MCU está vivo, y OpenOCD puede comunicarse con él:
openocd -f interface/stlink-v2.cfg -f target/stm32f1x_stlink.cfg
Dependiendo de la versión de OpenOCD, lo siguiente también puede funcionar:
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg
Si las cosas van bien, OpenOCD imprimirá información sobre el MCU (voltaje, número de breakpoints de hardware, etc.) y seguirá ejecutándose.
-
Puede ser posible ejecutar OpenOCD como un demonio y usar telnet para usarlo, pero creo que es más conveniente iniciarlo cada vez. Suponiendo que tienes un binario compilado correctamente, digamos, blinky.bin
, puedes programarlo en el MCU con el siguiente script:
OPENOCD="openocd -f interface/stlink-v2.cfg -f target/stm32f1x_stlink.cfg"
$OPENOCD -c "init" -c "reset halt" -c "stm32f1x mass_erase 0" -c "flash write_bank 0 blinky.bin 0" -c "reset run" -c "shutdown"
Nota que hay un nombre de archivo dentro de este script que necesitarás ajustar. Probablemente sea una buena idea comenzar con algo realmente simple.
Lo anterior principalmente asume Linux como un host, pero los pasos deberían ser conceptualmente similares en Windows, después de instalar controladores y hacer ajustes en cómo se instalan las cosas, como rutas y demás.