-
Notifications
You must be signed in to change notification settings - Fork 0
How to make printf work

Disclaimer: Este tutorial solo ha sido probado en sistemas linux
A todos en algún momento nos ubiese venido bien poder usar la función printf como si el codigo estubiera ejecutandose en nuestro ordenador. El objetivo de este articulo es explicar como podemos hacer funcionar esta funcion en una consola del STM32CubeIDE.
Hacer que el printf funcione en nuestro ordenador es más complejo de lo que pueda parecer pues lo que queremos es que printf escriba en una terminal que se encuentra en un ordenador distinto al que se esta ejecutando el código. Para lograr esto tenemos que hacer que printf pueda comunicarse con nuestro ordenador, y para hacerlo cómo esto debe ser a traves del propio cable con el que programamos el microcontrolador. Esto lo podemos lograr usando UART.
El siguiente tutorial se divide en dos partes.
- En la primera se explica el código que hace falta para que la función
printfmande los mensajes por UART - En la segunda se explica como preparar una consola del STM32CubeIDE para que pueda recibir y mostrar los mensajes.
En esta parte veremos como configurar el el UART y el código que debemos añadir para hacer que los mensajes se manden por UART.
Lo primero que tenemos que tener en cuenta es que debemos tener un UART configurado que tenga los mismos pines que usamos para programar el microcontrolador. Si estamos usando una nucleo esta configuración se hace por defecto al crear el proyecto. Las opciones recomendadas para el UART son las que se pueden observar en la siguiente figura.

Una vez tenemos el ioc correctamente tan solo tendremos que generar código.
Para lograr enviar los mensajes por UART deberemos sobreescribir la funcion _write() de la libreria estandard de C.
Para ello añadiremos el siguiente código en el "User code 4" del archivo main.cpp:
#ifdef __cplusplus
extern "C" {
#endif
int _write(int file, char *ptr, int len)
{
HAL_UART_Transmit(&huart3, (uint8_t*)ptr, len, 1000);
return len;
}
#ifdef __cplusplus
}
#endifPara preparar una consola capaz de recibir datos a traves de UART es tan simple como seguir los siguientes pasos:
-
Lo primero que tenemos que hacer es conectar el microcontrolador a nuestro ordenador.
-
Seguidamente abrimos el STM32CubeIDE.
-
Seleccionamos el proyecto en el que queremos utilizar
printf. -
Ahora debemos hacer click en Open Console y seleccionar 3 Command Shell Console como se puede ver en la siguiente figura.

- A continuación debemos selecionar las opciones que se ven en la siguiente figura y clickar en New.

- Rellenaremos todos los datos como se puede ver en la siguiente figura. El nombre se recomienda que sea lo más descriptible posible como se muestra. El serial port que debes seleccionar seguramente se llame igual que el de la figura, tambien es posible que se llame
/dev/ttyUSBxo/dev/ttyACMxdonde las x deben ser substituidas por el número correspondiente. Para que te salgan los serial port debes tener conectado el microcontrolador. Una forma de ver cual es el tuyo en tu caso es utilizando el siguiente comando en una terminal de linuxls /dev/tty*teniendo el micro conectado y sin conectar, de esta forma observando cual es el que varia podrás saber cual es el tuyo. El baud rate y el resto de opciones deben ser exactamente las mismas que el que use el UART del microcontralador.

- Una vez todo acabado le damos a terminar y aceptar. A continuación la consola se abra creada y la prodremos seleccionar como se ve en la siguiente imagen, si queremos anclar esta consola para que siempre este visible deberemos hacer click en el icono que hay a la izquierda del de seleccionar la consola.

- Finalmente si todo ha ido bien deberiamos ver la consola con el mensaje CONNECTED

Como habreis visto es relativamente sencillo congigurarlo todo y la recomensa es grande. Los printf habren un mundo de posibilidades a la hora de hacer testing inimaginable sin estos. Suponen una forma muy fiable de recibir feedback de lo que esta sucediendo.
Si habeis seguido todos los pasos ya podreis escribir vuestro primer programa que haga uso de esta función. El más sencillo posible es enviar un Hola Mundo!.
printf("Hola Mundo!")Cuando se ejecute este programa podreis observar en vuestra consola (aseguraros que teneis seleccionada la que acabamos de crear) el mensaje.
