먼저 CubeMX에서 UART 설정을 해준다.
코드에 표준입출력 헤더파일을 포함한다
#include "uart.h"
#include <stdio.h>
printf 함수가 호출되면 _write 함수가 호출되고 _write 함수가 다시 io_putchar 함수를 호출하는 구조인데 Src폴더의 syscall.c 파일에 attribute__((weak)) 처리되어 있다.

int _write(int file, char* p, int len){
HAL_UART_Transmit(myHuart, p, len, 10);
return len;
}
프로젝트 오른쪽 클릭

C / C++ Build - Settings - Tool Settings - MCU GCC Linker - Other flags 추가

6.주의점
printf함수 사용시 개행문자(\n)를 써야 제대로 출력이 된다.