programar-stm32-con-ide-de-arduino-y-st-link-v2

Programar STM32 con IDE de Arduino y ST-Link v2

En las entradas de la serie dedicada al STM32 hemos visto que había tres formas de programar el STM32 con el entorno de Arduino. En esta entrada veremos la segunda de ellas, programar el STM32 con un ST-Link v2.

Igual que en la entrada anterior donde vimos cómo programar el STM32 con un conversor USB-TTL emplearemos la placa de desarrollo BluePill, una de las más populares entre los Maker por su bajo coste y formato “similar” a un Arduino Nano.

En esta ocasión veremos cómo programar el STM32 con un ST-Link v2, que resulta mucho más conveniente que emplear un simple conversor USB-TTL. La conexión es más sencilla, nos evita tener que mover los jumpers de la placa y, además, nos permite disponer de funciones de debug (si el IDE que usemos lo permite).

Pero vamos a empezar viendo que es el ST-Link v2 y cómo usarlo para programar placas de desarrollo basadas en el STM32.

El ST-Link v2 es un programador/debugger construido por ST Microelectronics que permite programar y debuggear los procesadores STM8 y STM32. El ST-Link v2 implementa SWIM (Single Wire Interface Module) y JTAG/SWD (Serial Wire Debugging) para comunicar con los procesadores de la placa de desarrollo.

st-link-v2-original

El ST-Link v2 original es un poco caro, con un coste de 20-25€. Una alternativa es usar una placa de desarrollo como la ST Discovery o la ST Nucleus, que incorporan un ST-Link v2 en la propia placa, con un costa similar o incluso inferior.

Afortunadamente, hay bastantes clónicos del ST-Link v2 con un precio muy inferior de 1.5-1.6€, que está más o menos en el rango de un conversor USB-TTL.

st-link-v2-clone

Normalmente estos dispositivos clónicos tienen un formato de USB e, internamente, mantienen el mismo esquema electrónico que el original (que, por cierto, usa un STM8 o 32 en su interior).

El firmware de estos ST-Link v2 clónicos está extraído del original (algo que no debe ser del todo legal, pero allá ellos). Por tanto, el comportamiento también es idéntico al del original.

No obstante, también podemos sobrescribir el firmware del ST-Link v2 clónico, ya que tiene un DFU bootloader. Por ejemplo, podemos convertirlo en un Black Magic Probe, algo que veremos en una próxima entrada.

Por el precio que tiene, un clon del ST-Link v2 es una buena compra si vamos a emplear frecuentemente placas de desarrollo con STM32 o similar.

El proceso de programación del STM32 con el ST-Link v2 es muy sencillo, incluso más que el de usar un USB-TTL.

En primer lugar, deberemos instalar los drivers de la página de ST. Los driver son gratuitos, pero tendremos que registrarnos para poder descargarlos. De la carpeta que nos descargamos, ejecutamos ‘install_drivers.bat’ como administrador.

Conectamos el dispositivo y nos aseguramos de que nuestro sistema lo reconoce correctamente.

stm32-st-link-v2-arduino-4

Ahora que tenemos listo el ST-Link v2, lo conectamos al STM32 según el siguiente esquema, siendo necesarios únicamente 4 cables.

USB-TTLSTM32
SWDIODIO
SWCLKCLK
3.3V3.3V
GNDGND

stm32-st-link-v2-arduino

stm32-st-link-v2-arduino-2

Verificar la asignación de pines en vuestra placa de desarrollo y en vuestro programador ST-Link v2, porque los fabricantes tienen tendencia a cambiarlos de sitio.

No alimentéis simultáneamente el dispositivo por el ST-Link v2, mientras también lo tenéis conectado por micro- USB de la BluePill, o podemos dañar el dispositivo.

Vamos a comprobar que todo funciona correctamente, y subir un sketch al STM32 Blue Pill. Suponemos que tenéis correctamente configurado el IDE de Arduino (¿verdad que si?) como vimos en la entrada anterior.

Subiremos el mismo fichero de blink que, como sabemos, usamos como “hello world” en procesadores, y que vimos adaptado para el STM32 en la entrada anterior. Para mayor comodidad, aquí tenéis el código otra vez.

//const int ledPIN = PB1;  //esto es lo que viene en el ejemplo pero no funciona
const int ledPIN = PC13;  // depende de cada placa

void setup()
{
  pinMode(ledPIN, OUTPUT);
}

void loop()
{
  digitalWrite(ledPIN, HIGH);
  delay(1000);
  digitalWrite(ledPIN, LOW);
  delay(1000);
}

Ahora, en la configuración del IDE de Arduino, elegimos el cargador ‘ST-Link’

stm32-st-link-v2-arduino-3

Y sin más, le damos a subir. A diferencia de con el conversor USB-TTL, no tenemos que cambiar ningún jumper, ni tocar nada en la placa. El LED integrado de la placa comenzará a parpadear lentamente, lo que significa que todo ha salido bien.

¡Así de sencillo! En la tercera y última entrada sobre formas de programar el STM32 aprenderemos a programarlo directamente con el entorno de Arduino a través del micro Usb de la placa, la más “difícil” pero también la más útil de las tres formas que vamos a ver. ¡Hasta la próxima!