본 내용을 통해 포팅이 무엇인지, printf를 왜 그냥은 안써지는지 등을 배우게 되었다.
STM32 에서 <stdio.h>에 있는 printf문을 사용해 UART에 출력하고자 한다.
사용한 보드는 Nucleo F103RB 보드를 사용하였으며, Tool 은 STM32cubeIDE, 통신은 Tera Term을 사용해 확인 하였다.
Tool에서 Nucleo F103RB를 선택하면 기본적으로 LD2 led와 UART, RCC,SYS 등이 설정 되어있다.
RCC는 disabel해서 clock을 72Mhz에서 64Mhz만 사용하였고,
UART2가 Asynchronous 모드와 Baudrate 가 115200hz인걸 확인하고 Code를 generater 해주었다.
printf를 사용하기 위에 헤더에 <stdio.h>를 include 해준다.
포팅이란 소프트웨어를 다른 플랫폼(운영체제 등)에서도 동작할 수 있도록 하는 과정이다.
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
사용한 코드는 다음과 같은데, 분석을 하자면 GNU 컴파일러(STM32에서 사용하는) 로 하면 PUTCHAR_PROTOTYPE 함수가
__io_putchar(int ch) 함수로 처리되며
그게 아니라면 fputc 함수로 처리가 된다.
__io_putchar(int ch) 함수는 uart로 문자를 보내는 함수이며, fputc 함수는 c표준 라이브러리에 정의된 함수로 파일에 문자를 출력하는 역할을 한다. 그러므로 printf를 사용할 수 있게 만들어진다.
printf 함수를 주고 HAL_Delay함수를 통해 1초마다 Uart를 통해 출력하게끔 만들었다.