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형 변수 출력이 불가능하다.
그런데 디스플레이 장치가 없을 때
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형 변수 출력이 불가능하다.
감사합니다.
ReplyDelete