programar-stm32-con-ide-de-arduino-y-conversor-usb-ttl

Programar STM32 con IDE de Arduino y conversor USB-TTL

En esta entrada vamos a ver cómo programar el STM32 con el entorno de Arduino, o cualquier otro IDE basado en Arduino. En particular, vamos a usar la de desarrollo BluePill que vimos en la entrada anterior.

Usar el IDE de Arduino (u otros basados en el) para programar el STM32 es una gran ventaja desde el punto de vista de la comodidad y utilidad, permitiéndonos usar un entorno sencillo y bien conocido.

Además, nos va a permitir aprovecharnos de muchas herramientas creadas por la comunidad de Arduino. Aunque hay que tener en cuenta que muchas de las librerías van a necesitar modificaciones para hacerlas funcionar en un STM32.

Tenemos, por lo menos, tres formas de programar el STM32 con entornos basados en Arduino.

  • Con un conversor USB-TTL
  • Con un programador ST-Link
  • Directamente a través del puerto micro-USB

En esta entrada nos centraremos en el primero de los métodos, programar el STM32 usando un conversor USB-TTL. Aunque no es el más útil de los tres, nos servirá nos servirá para presentar la instalación de los archivos necesarios para funcionar con el IDE de Arduino.

Configurar el entorno de Arduino

Para que el IDE de Arduino (o el resto de IDEs basados en Arduino) funcione con las placas STM32 es necesario agregarlas al gestor de placas.

Arduino no soporta oficialmente las placas de desarrollo basadas en el STM32. Pero, afortunadamente, gracias al trabajo de Roger Clark y a la comunidad que ha generado su trabajo, tenemos disponible el STM32 como extensión no oficial.

El repositorio de código de compatibilidad del STM32 con Arduino es Open Source, y está disponible en este enlace. Este, a su vez, está basado en el trabajo desarrollado por la empresa Leaflabs para la placa Maple, muy parecida a la BluePill.

Para añadir la definición de las placas vamos a usar el fichero de configuración proporcionado por www.stmduino.com, una página web que engloba gran parte de la comunidad del STM32 en torno a Arduino.

En primer lugar, abrimos el IDE de Arduino y nos dirigimos al gestor de placas (Herramientas/Placa/Gestor de tarjetas…). Aquí añadimos el soporte para las placas SAND (Zero o similar). La toolchain de las STM32 necesita ficheros de estas placas ARM para la compilación (en particular “arm-none-eabi-g++”).

programar-stm32-arduino-1

A continuación, vamos a preferencias y, en “Gestor de URLs adicionales de tarjetas”, hacemos click en el botón de la derecha y pegamos la siguiente dirección en la ventana que aparece.

http://dan.drown.org/stm32duino/package_STM32duino_index.json

programar-stm32-arduino-2

Si ya teníamos alguna definición (ESP8266, Digispark) pondremos una línea por cada placa.

Volvemos al gestor de placas, y tendremos disponibles las placas STM32. Instalamos las que necesitemos. En particular, para la BluePill (STM32F103C8T6) vamos a necesitar las STM32F1X.

programar-stm32-arduino-3

Y ya ¡podemos programar nuestra BluePill con Arduino!

Conectar el STM32 conversor USB-TTL

En esta primera entrada vamos a programar el STM32 por UART, por lo que vamos a necesitar un conversor USB-TTL. Estos conversores USB a TTL son dispositivos baratos, y muy útiles, que podemos encontrar en AliExpress o eBay por entre 0.70€ a 2€

programar-stm32-arduino-usb-ttl

La tensión de alimentación del STM32 es de 3.3V, por lo que tenemos que asegurar que nuestro conversor TTL trabaja a 3.3V. Normalmente funcionan tanto a 5V como a 3.3V, y se puede elegir la tensión de salida con un jumper de configuración, bien en la placa o bien en los pines de salida.

Para programar el STM32 debemos conectar los pines de comunicación del conversor USB-TTL (TX y RX) a los pines de UART1 del STM32, que son el A10 y A9. Por tanto, la conexión es la siguiente,

USB-TTLSTM32
TXA10(PA10)
RXA9 (PA9)
3.3VVcc
GndGnd

Por lo que el montaje queda como la siguiente imagen,

programar-stm32-arduino-conexion

Programar STM32 con Arduino

Con el bootloader por defecto el STM32 tiene dos modos de arranque que dependen del estado del pin BOOT0.

BOOT0MODO
LOWNormal: Arranque el último programa en flash
HIGHProgramación: Espera un programa por UART. Cuando lo recibe, lo graba en la flash y después lo inicia

Por tanto, para programar el STM32 es necesario poner el pin BOOT0 a HIGH y para volver al funcionamiento normal es necesario ponerlo en LOW.

Para hacerlo sencillo (aunque no tan sencillo como en las placas de Arduino) las placas BluePill disponen de unos jumpers de configuración. Para poder programar la BluePill por UART tenemos que mover el jumper BOOT0 a la posición 1.

programar-stm32-arduino-jumpers

Ahora, conectamos el conversor USB-TTL al ordenador y elegimos la placa genérica STM32F103C,

programar-stm32-arduino-4

Y los siguientes parámetros de configuración,

programar-stm32-arduino-5

Para probar que todo funciona correctamente vamos a probar con el archiconocido Blink, el equivalente al “Hola mundo” en placas de desarrollo, que simplemente hace parpadear el LED integrado en la placa.

Por tanto, pegamos el siguiente texto en el Arduino IDE.

//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);
}

Lo cargamos en la placa y el LED debería ponerse a parpadear. Eso es así porque el bootloader está configurado para ejecutar el programa inmediatamente después de su carga.

Sin embargo, si desconectamos y volvemos a conectar el SMT32F veremos que el led no parpadea, porque sigue en modo upload. Tenemos que volver a poner el Jumper de BOOT0 a la posición 0 para que el STM32 ejecute el programa cargado al iniciar.

La librería del STM32 tiene bastantes ejemplos que podemos investigar para profundizar en esta interesante placa. ¡Llegaremos a eso poco a poco! En las próximas entradas de la serie del STM32 veremos como programarlo con un ST-Link y directamente a través del micro-usb.