[STM32] UART Printf 사용

Vandeven·2024년 3월 27일
0

STM32

목록 보기
2/5

서론

본 내용을 통해 포팅이 무엇인지, 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 해주었다.

porting

printf를 사용하기 위에 헤더에 <stdio.h>를 include 해준다.
포팅이란 소프트웨어를 다른 플랫폼(운영체제 등)에서도 동작할 수 있도록 하는 과정이다.

Code

#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를 통해 출력하게끔 만들었다.

profile
신입 하드웨어 개발자 입니다.

0개의 댓글

관련 채용 정보