@AdamHaunの答えはあなたが必要とするすべてでsprintf()
、文字列を作成して送信するのは簡単です。しかし、本当にprintf()
独自の関数が必要な場合は、可変引数関数(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ユーティリティを使用することです。そして使用のprintf経由SWOビューアを、ここでの手動でST-Linkのユーティリティは、関連部分は31ページを開始します。
SWOビューアーを介したPrintfは、SWOを介してターゲットから送信されたprintfデータを表示します。実行中のファームウェアに関する有用な情報を表示できます。