Programar la BluePill (STM32) a través del USB con dapboot y PlatformIO

Nivel: Básico

¿Qué tengo que saber para este post?

  • Programar la Blue Pill o micro de STM32 con un ST-Link o a través de un USB/TTL Serie.

—————————————

En mi afán de solucionarle la vida a mis estudiantes, y que no necesiten un programador para arrancar con la Blue Pill, me puse en búsqueda de un bootloader que funcionara fácil o naturalmente en PlatformIO al hacer un clic. Obviamente, también debería funcionar con libOpenCM3 que es la herramienta de desarrollo con la que pienso encarar mi curso. Como era natural, probé primero con el STM32duino, pero no me convencía por diversos motivos, y además no podía compatibilizarlo con libOpenCM3 por lo cual terminó de ser descartado.

Por eso decidí utilizar el dapboot, un proyecto al que le mandé una estrella en github hace meses, pero nunca había probado (¿para qué? si tengo un stlink). Y después de muchas horas de buscar, leer y probar, encontré la manera de que todo funcione armoniosamente.

Preparativos

Antes de arrancar hay que tener un método probado y funcionando de grabado para la BluePill, puede ser utilizando un stlink, un USB/TTL Serie o (nunca lo probé, pero calculo que debería funcionar) un Arduino que nos haga de USB/TTL Serie. Para poder grabar el firmware del dapboot. Este bello proyecto tiene los binarios ya compilados en la parte de release de github listos para descargar y quemar. Tiene 2 variantes:

  • dapboot: el firmware se graba al principio de la flash y debemos tener en cuenta que nuestro código debe estar después del mismo.
  • highboot: el firmware se graba al final de la flash, por eso existen 2 versiones para la bluepill (64k y 128k). De esta forma no debemos procuparnos por donde arranca nuestro código, sino de que no llegue al final de la flash y pise el bootloader.

Obviamente, opté por el highboot-v1.11-bluepill-128.bin (en mi caso es de 128k), porque dudo que mis estudiantes lleguen a ocupar los 64k o 128k con las cosas que les voy a pedir programar y me pareció más práctico. Entonces usé el st-flash por linea de comandos para grabar el firmware conectando el stlink:

st-flash write highboot-v1.11-bluepill-128.bin 0x08000000

Si no tenés este programa instalado y estás en una distro de Linux derivada de Debian (Ubuntu, Mint etc.), se puede instalar por medio de apt:

sudo apt install stlink-tools stlink-gui

Como observarán existe una interfaz gráfica, que pueden utilizar también para grabar.

Si necesitan grabarlo por puerto serie, porque no tienen el stlink, pero sí un USB/TTL Serie o Arduino, van a necesitar el stm32flash que también se instala a través de apt.

Si usan windows voy a suponer que saben utilizar los softwares del fabricante para grabar el micro.

Podemos verificar que todo va bien si movemos el BOOT1 y conectando la BluePill al USB y hacemos un lsusb deberíamos ver lo siguiente:

Configurar el PlatformIO

El siguiente paso es empezar un proyecto en PlatformIO con libOpenCM3 como ya venimos trabajando los que siguen mi blog o canal de YT. Y en el platformio.ini debemos agregar las dos siguientes variables:

upload_protocol = dfu
upload_command = $PROJECT_PACKAGES_DIR/tool-dfuutil/bin/dfu-util -D $SOURCE

Con esto PlatformIO bajará dfu-util que es la herramienta que necesitamos y luego está el comando que se ejecutará al clickear upload con lo que hay que grabarle (el firmware.bin que se genera al compilar).

¿Cómo se usa?

Ahora lo único que hace falta es mover el jumper BOOT1 de la BluePill y apretar el reset, esto hace que se active el modo dfu. Ponemos el BOOT1 de nuevo en su posición original para que después de grabarlo no vuelva a entrar en modo dfu. Resta simplemente darle al UPLOAD en PlatformIO para que se grabe y empiece a ejecutar nuestro programa. Es normal que haya un error en la terminal al final de la programación ya que no es un dispositivo reconocido por dfu-util, pero no es para preocuparse.

Cada vez que queramos actualizar nuestro programa debemos hacer la secuencia de mover el BOOT1 y resetear. Otra opción es escribir en los dos primeros registros del BackUp «BOOT» en ASCII para activar el bootloader por software. Lo bueno es que una vez grabado el USB queda disponible para que lo utilicemos en nuestra aplicación, a diferencia del de Arduino que nos deja un CDC Serie.

Otra gran ventaja es que en windows no se necesita driver, lo cual me preocupaba porque sé que la mayoría (o todos) mis estudiantes son victimas usuarios de ese Sistema Operativo y quería estar seguro de que sea algo fácil de utilizar.

En definitiva estoy muy conforme con que se pueda grabar el STM32 por USB de una manera que me parece tan práctica, y que mis estudiantes que no tengan la facilidad económica puedan prescindir del stlink. Sé que tienen costos muy bajos, pero a veces eso implica menos dinero para comida o viáticos en la vida de mis estudiantes.

¡Hasta la próxima!

msavalos

Soy un hobbista: toco la guitarra, mandolina, descompongo en partituras; también soy aficionado a la fotografía, he hecho algún cursillo por ahí; me encanta la programación, sea de un programa de PC para procesar datos, una interfaz gráfica o un microcontrolador; evidentemente linuxero; y, cayéndose de maduro, geek. Hincha del más grande, técnico en electrónica, ex-estudiante de ingeniería en electrónica en la UTN FRBA, Técnico Superior en Informática y Profesor. Doy clases en el nivel medio en el Gobierno de la Ciudad de Buenos Aires e instituciones privadas y a nivel terciario en una sede dependiente de la UTN. Sobre mi afinidad política, bueno, podría decir que soy militante del Software Libre y medio zurdito (no me ofende).

Ver comentarios

Entradas recientes

Páginas embebidas con ESP8266 (WebServer)

Nivel: Básico ¿Qué tengo que saber para este post? Diseño básico de páginas con HTML…

3 años hace

Modificación de fuente ATX para laboratorio.

Nivel: Avanzado. La modificación de fuentes ATX para su utilización en laboratorio o comunicaciones es…

3 años hace

FLISoL Shield ARDUINO

El pasado 23 de abril se celebró la 18° edición del FLISoL en la que…

3 años hace

Regulador de tensión MOSFET para Moto.

Circuito del regulador, con los elementos de simulación. Típicamente, las motocicletas de baja cilindrada utilizan…

3 años hace

Review Analizador Lógico de menos de u$s10 en Linux

¿Qué puedo decir? Siempre quise tener un analizador lógico, había visto estos pequeños y baratos…

4 años hace

Oversampling con bajos recursos (+Bits ADC)

Nivel: Intermedio ¿Qué tengo que saber para este post? Entender el uso de un ADC.Programación…

4 años hace

Esta web usa cookies.