Ответ @ AdamHaun - это все, что вам нужно, с помощью sprintf()
которого легко создать строку и затем отправить ее. Но если вы действительно хотите printf()
свою собственную функцию, то Variable Argument Functions (va_list) является подходящим вариантом.
С va_list
пользовательской функцией печати выглядит следующим образом:
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
void vprint(const char *fmt, va_list argp)
{
char string[200];
if(0 < vsprintf(string,fmt,argp)) // build string
{
HAL_UART_Transmit(&huart1, (uint8_t*)string, strlen(string), 0xffffff); // send message via UART
}
}
void my_printf(const char *fmt, ...) // custom printf() function
{
va_list argp;
va_start(argp, fmt);
vprint(fmt, argp);
va_end(argp);
}
Пример использования:
uint16_t year = 2015;
uint8_t month = 12;
uint8_t day = 18;
char* date = "date";
// "Today's date: 2015-12-18"
my_printf("Today's %s: %d-%d-%d\r\n", date, year, month, day);
Обратите внимание, что хотя это решение предоставляет вам удобную функцию для использования, но оно медленнее, чем отправка необработанных данных или использование даже sprintf()
. С большим количеством данных я думаю, что этого будет недостаточно.
Другой вариант, и, возможно, лучший вариант, это использовать ST-Link, SWD-отладчик вместе с ST-Link Utility. И используйте Printf через SWO viewer , вот руководство по ST-Link Utility , соответствующая часть начинается на странице 31.
Printf через SWO Viewer отображает данные printf, отправленные с цели через SWO. Это позволяет отображать некоторую полезную информацию о запущенной прошивке.