Siempre es útil la función printf, más si trabajamos con un puerto serie.
Con esta función, podrás hacer un printf con variables de entrada para seleccionar puerto, prioridad...
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#define DEBUG //descomentar para debug
//#define MEDIDAS //descomentar para enviar las medidas una vez realizadas
//#define CONTROL_MEDIDA St_V_Prot //elegir el estado para el cual se va a enviar la medida realizada
enum Debug
{
D_all = 0, D_medidas = 1, D_avg = 3, D_warning = 3, D_error = 4
};
extern const enum Debug Nivel_debug;
/**
* @brief Printf de debug limitado a 93 caracteres
* @param nivel: nivel de debug
* @param fmt: datos para imprir por el puerto serie.
* @retval None
*/
void Control_Debug(uint8_t nivel, const char *fmt, ...)
{
#ifdef DEBUG
if (nivel < Nivel_debug)
return;
strcpy((char*) &Buffer_Control[0], "DEBUG: ");
va_list args;
va_start(args, fmt);
vsnprintf((char*) &Buffer_Control[7], 100 - 7, fmt, args);
va_end(args);
HAL_UART_Transmit(&huart3, (uint8_t*) &Buffer_Control[0], (uint16_t) strlen((char*) &Buffer_Control[0]), 100);
#endif
}
Hay que configurar las librería como las estándar para que funcione. En Atollic, se hace en propiedades del proyecto->C/C++ Build->Settings->General y se selecciona Newlib standard en Runtime Library.