stm32 UART printf 함수 사용하기

#개발하다가 어떤 변수에 든 값을 확인하고 싶을 때
그런데 디스플레이 장치가 없을 때
UART 통신으로 pc나 다른 장치에 변수의 내용을 출력하고 확인한다.

#마이크로 컨트롤러에서 printf() 함수를 쓸 때는 출력 대상을 변경해서 쓴다.

#include <stdio.h>
/* USER CODE BEGIN PFP */
/* private function prototypes */
int _write(int file, char* p, int len) => printf()의 출력 대상을 리디렉션
{
 HAL_UART_Transmit(&huart3, p, len, 10);
 return len;
}
/* USER CODE END PFP */

uint8_t = 0;
float f = 1.234;

while(1){
 printf("hello %d %f\n", a++, f);
 HAL_Delay(1000);
}

#대부분의 마이크로 컨트롤러에서 printf()의 출력이 정수 형태만 출력이 되도록 정의되어 있다. float형 변수를 출력하려면 옵션을 주어야 한다.
=> project 이름에서 우클릭 => 특성 => C/C++ Build => setting => Tool settings
=> C Linker => Miscellaneous => other options에 -u _printf_float 입력 => 적용
=> %f로 float형 변수 출력 가능

#printf() => 무겁다 => ms단위까지 걸릴 수 있다.

#tiny printf 사용법 => project 이름에서 우클릭 => 새로 만들기 => 기타
=> Library function => tiny printf implementation 추가

#tiny printf 사용시 #include <tinyprintf.h> 추가

#tiny printf 함수는 가볍지만 float형 변수 출력이 불가능하다.

Comments

Post a Comment