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

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

 

[STM32] USB를 통한 printf 사용법

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

velog.io

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

 

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

 

위 회로도를 참고하여 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로 디버그 메시지가 출력되는 것을 확인할 수 있다.

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