@ AdamHaun'un cevabı tek ihtiyacınız olan sprintf()şey, bir dize oluşturmak ve daha sonra göndermek kolaydır. Ancak gerçekten printf()kendinize ait bir işlev istiyorsanız , Değişken Bağımsız Değişken İşlevleri (va_list) yoldur.
İle va_listaşağıdaki gibi bir özel baskı fonksiyonu görünüyor:
#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);
}
Kullanım örneği:
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);
Bu çözümün size kullanışlı bir işlev sunmasına rağmen, ham veri göndermekten ve hatta kullanmaktan daha yavaş olduğunu unutmayın sprintf(). Yüksek veri hızları ile bunun yeterli olmayacağını düşünüyorum.
Başka bir seçenek ve muhtemelen daha iyi bir seçenek ST-Link, SWD hata ayıklayıcı ST-Link Utility ile birlikte kullanmaktır. Ve SWO görüntüleyici üzerinden Printf kullanın , burada ST-Link Utility kılavuzu , ilgili bölüm sayfa 31'de başlıyor.
SWO ile Printf Görüntüleyicisi, hedeften SWO aracılığıyla gönderilen printf verilerini görüntüler. Çalışan ürün yazılımı hakkında bazı yararlı bilgilerin görüntülenmesini sağlar.