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

[STM32] UART로 실수형(float) 출력하기

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

지난 포스트에서 printf 함수를 호출하여 UART 데이터를 터미널로 출력해보았다.

 

https://swiftcam.tistory.com/143

 

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

printf 함수는 펌웨어 개발단계에서 디버깅을 위해 가장 많이 사용하는 방법중 하나이다. 보통 visual studio나 PC 기반의 IDE는 printf를 통하여 툴에서 화면으로 출력되도록 지정되어 있다. 그러나 STM32와 같은..

swiftcam.tistory.com

 

  

한가지 더 확인해보기 위해 아래 코드를 실행해본다. 아래 코드에는 문자열과 int형 변수, float형 변수값을 printf로 출력하도록 하였다.

 

 

 

터미널로 출력된 결과를 보면 문자열과 int형 변수들은 출력이 되었지만, float형 변수는 출력되지 않았다.

 

 

 

기본적으로 STM32CubeIDE에서는build 옵션에서 float형 변수들을 출력할 수 있는 옵션이 지정되어 있지 않다. 따라서 float형 변수들을 출력하기 위해서는 아래 경로를 찾아들어가서 다음과 같은 옵션을 지정해주어야 한다.

 

 

Project -> Properties -> C/C++ Build -> Settings -> Tool Settings -> MCU GCC Linker -> Miscellaneous

-u _printf_float

 

 

Apply and Close 를 하고 다시 빌드후 실행해본다. 

float형 변수도 정상적으로 실행되는 것을 확인할 수 있다. 

 

 

printf가 원래 시간 소모가 많은 함수이기는 한데 Float 형 변수를 출력하게 되면 더욱 많은 시간을 사용한다. 실시간이나 주기적인 동작을 하는데 있어서 이러한 함수를 사용하는 것은 자원을 많이 낭비할 수 있다. 

 

따라서 간단한 시간측정은 GPIO로 LED를 토글 시켜 시간을 측정하던가 printf가 필요하면 float 출력 기능이 없고 수행시간이 짧은 tiny printf 같은 함수를 사용하는 것이 좋다. 

 

다음 번에는 printf의 int형, float형 변수의 시간 측정을 해 볼 예정이다.

 

728x90

댓글