[STM32F4]Serial Wire Viewer(SWV, ITM)를 사용하여 printf() 사용하기

2023년 12월 18일 by 진아사랑해

    [STM32F4]Serial Wire Viewer(SWV, ITM)를 사용하여 printf() 사용하기 목차
반응형

printf() 문을 사용하여 출력하는 방식에는

- UART

- ITM( Instrumentation Trace Macrocell ): SWV를 사용

- RTT: SEGGAR 사의 J-LInk를 사용

3가지 방식이 있는데

그중에서 ITM를 사용하는 방식을 알아보겠습니다.

 

ITM 방식에 대한 설정을 STM32CubeIDE 1.6.1을 기준으로 설정하였습니다.

1) Run -> Debug Configration

2번째 있는 Debugger 탭을 선택한 후

중간에 있는 "Serial Wire Viewer(SWV)에 Enable을 체크합니다.

Core Clock은 사용하는 CPU Clock을 넣어줍니다.

CPU Clock을 모르는 경우에는 CubeMX에서

내가 사용하는 CPU는 180 MHz입니다.

 

2) 함수 재정의

ITM을 사용하기 위해 sys_call.c에 들어있는 __attribute__((weak)) int _write(int file, char *ptr, int len) 함수를 수정해도 됩니다.(필요한 경우 해당 함수를 재정의하여 사용할 수 있습니다.)

그러나 함수 앞에 __attribute__((weak))이 붙어 있음으로 main.c에 _write() 함수를 재정의할 것입니다.

int _write(int file, char *ptr, int len)
{
   int DataIdx;
   for (DataIdx = 0; DataIdx < len; DataIdx++)
   {
   //__io_putchar(*ptr++);
   ITM_SendChar(*ptr++);
  }
   return len;
}

 

이 부분을 사용하기 위해 필요한 Header File이 있습니다.

#include <stdio.h>
#include "stm32f4xx.h"
#include "core_cm4.h"

 

3) Debugger 모드에서의 설정

SWV ITM ata Console 창을 활성화시킵니다.

화면 하단에서 "SWV ITM Data Console"을 선택한 후에 오른쪽에 있는 드라이버 비슷한 아이콘을 클릭합니다.

이 화면에서 하단에 있는 "포트 활성화"에서 0 번째를 클릭하고 OK를 누릅니다.

 

빨간색 아이콘을 눌러서 Trace를 시작합니다.

 

4) 디버거를 실행시킵니다.

printf()가 정상적으로 출력됨을 알 수 있습니다.

 

참조) https://www.st.com/resource/en/user_manual/dm00629856-stm32cubeide-user-guide-stmicroelectronics.pdf 85 ~ 86 Pages

반응형