@ AdamHauns Antwort ist alles, was Sie brauchen. sprintf()Es ist einfach, einen String zu erstellen und ihn dann zu senden. Aber wenn Sie wirklich eine eigene printf()Funktion wollen , dann sind variable Argumentfunktionen (va_list) der richtige Weg.
Mit va_listeiner benutzerdefinierten Druckfunktion sieht das folgendermaßen aus:
#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);
}
Anwendungsbeispiel:
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);
Beachten Sie, dass Sie mit dieser Lösung zwar bequeme Funktionen verwenden können, diese jedoch langsamer sind als das Senden von Rohdaten oder die Verwendung von Even sprintf(). Mit hohen Datenraten denke ich, wird es nicht ausreichen.
Eine weitere und wahrscheinlich bessere Option ist die Verwendung von ST-Link, dem SWD-Debugger, zusammen mit dem ST-Link-Dienstprogramm. Verwenden Sie Printf über den SWO-Viewer . Hier finden Sie das Handbuch des ST-Link-Dienstprogramms . Der entsprechende Teil beginnt auf Seite 31.
Der Printf via SWO Viewer zeigt die Printf-Daten an, die vom Ziel über SWO gesendet wurden. Hier können einige nützliche Informationen zur laufenden Firmware angezeigt werden.