본문 바로가기
  • 경제적 자유를 얻는 그날까지
엔지니어링/임베디드

[STM32] printf를 시리얼로 출력하기

by 베니스상인 2020. 3. 6.

printf 함수는 펌웨어 개발단계에서 디버깅을 위해 가장 많이 사용하는 방법중 하나이다.

 

보통 visual studio나 PC 기반의 IDE는 printf를 통하여 툴에서 화면으로 출력되도록 지정되어 있다. 

그러나 STM32와 같은 임베디드 보드의 경우에는 printf를 출력할 대상을 지정해주어야 한다. 

STM는 UART를 기본적으로 가지고 있기 때문에 UART를 이용하여 printf를 출력할 수 있다. 

 

오늘은 UART를 이용하여 printf를 터미널 화면으로 출력하는 방법을 소개한다. 

 

 

 

UART를 이용하여 printf를 출력하기 위해서는 먼저 UART 사용할 수 있도록 드라이버가 설정되어  있어야 한다. STM32CubeIDE에서 UART를 설정하는 방법에 대해서는 아래를 참고하면 된다.

https://swiftcam.tistory.com/89

 

[STM32 - 자작드론개발] UART 디버그 포트 생성

UART 포트는 PC와 연결하여 터미널로 메시지를 수신하거나 제어 명령을 전달하여 간단한 제어를 하기에 적합하다. 이번 포스팅에서는 디버그용 UART를 연결하고 메시지 송수신 테스트를 할 예정이다. 1. UART 드라..

swiftcam.tistory.com

 

 

 

 

1. main.c에서 printf를 사용하기 위해서는 아래 헤더파일을 추가한다. stdio.h는 printf가 정의되어 있는 standard io 헤더파일이다.

#define <stdio.h>

 

2. 그 아래에 다음과 같은 함수를 추가한다. _write는  printf 함수의 출력대상을 redirection하는 함수이다. printf를 실행하 경우 아래 함수가 호출되어 UART로 데이터를 1byte 씩 len의 크기 만큼 전송한다.  

int _write(int file, char* p, int len)
{
    for(int i=0; i<len; i++) {
        LL_USART_TransmitData8(USART6, *(p+i));
        LL_mDelay(1);
    }
    return len;
}

 

 

 

3. main.c에서 printf를 이용하여 문자열을 출력해본다.

 

4. 터미널 프로그램을 이용하여 문자열이 출력되는지 확인한다.

 

Teraterm 터미널 프로그램을 이용하여 문자열 출력 확인

 

728x90

댓글