STM32 개발보드 ST-Link 포트를 이용한 printf

STM32 개발보드로 디버그문은 항상 UART 포트를 할당하여 USB2Serail을 연결하여 사용하였는데, 몇일전 자료를 찾다가 개발보드의 ST-Link USB 포트로 UART 출력이 가능하다는 글을 보게 되어 바로 테스트 해보았다.

 

[STM32] USB를 통한 printf 사용법

USB를 사용하여 printf를 사용하는 법입니다.

velog.io

ST-Link USB 포트로 UART 출력하기 위해 아래 이미지와 같은 설정이 필요하다.

etc-image-0etc-image-1

 

System Core의 Sys 항목에서 Debug 모드를 Trace Asynchronous SW로 설정하고 STM32L432KC 개발보드의 Virtual COM Port가 설정되며, 이것은 UART2으로 연결된 것을 확인할 수 있다. UART2 기본 핀(PA2:Tx, PA3:Rx)을 설정하면 안되고 아래 회로도를 참고하여 Rx Pin을 PA3아닌 PA15번으로 변경해야 한다.

스크린샷 2023-12-18 23-27-24.png

 

위 회로도를 참고하여 UART2 핀을 설정한 후, 아래와 같이 간단히 코드를 작성하면 USB2Serial 연결 없이 ST-Link 디버그 포트로 디버그 메시지가 출력되는 것을 확인할 수 있다.

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
#include <stdio.h>

int __io_putchar(int ch)
{
  HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 10);
  return ch;
}
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  HAL_Init();
  SystemClock_Config();

  MX_GPIO_Init();
  MX_USART2_UART_Init();

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  uint32_t count = 0;
  while (1)
  {
    printf("count = %ld\r\n", count++);
    HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

 

위 코드를 작성후 개발보드에 다운로드 하면, 우분투인 경우 ttyACM0 디바이스가 생성되어 Vitual COM Port로 디버그 메시지가 출력되는 것을 확인할 수 있다.

스크린샷 2023-12-18 23-32-23.png

그동안 불편하지만 디버그하기 위해 어쩔수 없이 사용했던 USB2Serial을 더이상 사용할 필요가 없어졌다. ㅎㅎ