EDITO [Julio-2019]: He decidido crear un tutorial mucho más completo y extenso que toca muchas más materias. Son cuatro partes:
- Parte 1. Diseño electrónico para STM32
- Parte 2. Software para programar STM32 (CubeIDE)
- Parte 3. Hola mundo para STM32
- Parte 4. Programar/Grabar un STM32
EDITO [Mayo-2019]: El 2 de mayo ST ha anunciado un nuevo software para programar sus microcontroladores, STM32CubeIDE. Dicho software será gratuito e integrará la herramienta CubeMX con un IDE nuevo. A día de hoy tiene bastantes bugs, como casi todo lo que saca ST en sus primeras versiones, pero según palabras suyas, su idea es descontinuar el software de Atollic TrueStudio que comento en esta entrada y que compró la propia ST, para centrarse en el paquete de software STM32CubeIDE.
Llevo utilizando y programando microcontroladores STM32 desde hace más de 7 años y he utilizado varios programas durante el transcurso. Al principio era bastante difícil encontrar un programa sencillo de utilizar, que permitiera programar y "debuguear" sin dar problemas y además fuera completamente gratis. Acabé utilizando CooCox y durante muchos años es lo que he ido utilizando. Desgraciadamente el desarrollo del software se paró hace dos o tres años y ahora está totalmente desactualizado y fuera de servicio.
Tras la caída de CooCox, existía una alternativa gratuita también basada en Eclipse, para mi, una de las mejores interfaces para programar, llamada OpenSTM32(AC6), activa hoy en día con su última versión, la 2.5.0, lanzada hace menos de dos meses. Pero en Diciembre de 2017 ST decide dar un paso para unificar su ecosistema y compra Atollic TrueStudio. TrueStudio era un software de programación multiplataforma de pago basada también en Eclipse pero tras la compra por parte de ST, se ha convertido en una plataforma gratuita específica para STM32 con todo el apoyo de ST a sus espaldas. Si vas a programar un microcontrolador de ST TrueStudio debería de ser tu elección, aunque OpenSTM32 sigue siendo buena opción.
Por otro lado, recuerdo como si fuera ayer que cuando empecé a programar para microcontroladores ARM (casi siempre de ST), el tortazo que me pequé fue como poco curioso y eso que tenía un buen trasfondo de conocimientos en AVR. No fue hasta que me aconsejaron CooCox hasta que empecé a avanzar. Aún así, la configuración de los periféricos del microncontrolador, o incluso, ser capaz de arrancar el microcontrolador y simplemente hacer parpadear un led era ya todo un logro. No debería de ser el único "torpe", porque ST decidió sacar en Febrero del 2014 la herramienta CubeMX. En su lanzamiento tenía más bugs que funcionalidades y como yo ya me manejaba perfectamente con ARM lo instalé y lo dejé olvidado en un rincón de mi disco duro.
A día de hoy es un software mucho más maduro y que ofrece varias ventajas y características interesantes, aún así, tengo que decir que en Enero de este mismo año (2018), ya estaba pensando en LibreServo y utilizando la herramiento CubeMX detecté un bug para la familia STM32F302... Dicho bug lo comuniqué y en unas semanas publicaron la actualización (ya podrían haberme regalado algo... ¬¬).
No es objetivo de este documento entrar en muchos detalles, pero CubeMX permite visualizar tu microcontrolador, preconfigurar los pines y ver si tiene las salidas requeridas, configurar toda la parte de relojes internos, velocidad de los puertos serie, interrupciones... y una vez configurado todo, permite generar un proyecto para varias herramientas, entre ellas TrueStudio, con la que ahora sí, hacer parpadear un led sea cuestión de segundos. Además, si las librerías se actualizan para tu microcontrolador, CubeMX actualiza tu proyecto sin modificar tu código, lo cual está genial para estar siempre actualizado y libre de posibles errores y bugs de librerías viejas.
En la galería de abajo, podéis ver unas capturas de mi CubeMX con el proyecto de LibreServo. Como podréis observar, ¡el microcontrolador apenas tiene 2 pines libres!
Galería configuración en CubeMX
En las siguientes fotos, podéis ver la configuración básica para que CubeMX respete el código de usuario. También, he decidido usar las librerías LL (low level) en vez de las HAL, ya que son mucho más ligeras, más rápidas, optimizadas y más confiables. Hay que configurar que el proyecto generado por CubeMX sea para TrueStudio, el cual al indicarle que abra el proyecto generado por CubeMX no da ningún problema y está listo para compilar.
Preferencias CubeMX
La parte de Atollic TrueStudio es tan fácil como instalar y abrir el proyecto generado por CubeMX. En github dejaré el proyecto con el que trabajo en LibreServo, tanto lo de CubeMX como lo de Atollic que al generarlo con CubeMX utilizo el mismo directorio por facilidad y conveniencia.