@ 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_list
einer 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.