본문 바로가기
프로젝트 기록/23SEMA_Control_STM32

[STM32CubeIDE] printf를 USART와 연결해 사용하기

by 소요이 2023. 4. 5.
728x90

0. printf 출력을 USART와 연결하여 사용하는 이유:

 sprintf와 HAL_UART함수를 이용해 teraterm과 통신할 필요 없이, printf형식으로 원하는 변수를 출력 할 수 있음.

따라서 디버깅 시 편리해짐

 

1. 구현 방법

main.c 파일에 다음의 함수를 추가.

/* USER CODE BEGIN 4 */
//...
/*for using printf in teraterm */

#ifdef __cplusplus
extern "C" int _write(int32_t file, uint8_t *ptr, int32_t len) {
#else
int _write(int32_t file, uint8_t *ptr, int32_t len) {
#endif
    if( HAL_UART_Transmit(&huart2, ptr, len, len) == HAL_OK ) return len;
    else return 0;
}
/* USER CODE END 4 */

+) 추가설명:

- 이때 HAL_UART_Transmit함수에서 uart의 인스턴스를 설정해야 함

- STM32F446RE 보드에선 USART2번이 ST-Link의 Virtual Com Port와 연결되어 있음

- 아래와 같이 huart2로 연결

 

 

2. Setting 변경

- 상단 project > properties

 

- C/C++ Build > Settings > MCU Settings >

     Use float with printf from newlib-nano (-u _printf_float) 항목 체크

 

 

출력 완료!