@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 Utility와 함께 ST-Link, SWD 디버거를 사용하는 것입니다. 그리고 SWO 뷰어를 통해 Printf를 사용 하십시오. 여기는 ST-Link Utility 의 매뉴얼입니다 . 관련 부분은 31 페이지에서 시작합니다.
SWO Viewer를 통한 Printf는 SWO를 통해 대상에서 전송 된 printf 데이터를 표시합니다. 실행중인 펌웨어에 대한 유용한 정보를 표시 할 수 있습니다.