- [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
'STM32' 카테고리의 다른 글
[ABOV]Keil에서 ABOV를 위하 환경 설정 (0) | 2023.12.28 |
---|---|
[ABOV]Keil MDK-ARM Evaluation 설치 (0) | 2023.12.28 |
[stm32]기존 프로젝트의 CubeIDE 및 TouchGFX는 어떻게 실행을 해야하나 ? (0) | 2023.12.14 |
[STM32]CAN의 Basic Parameters들의 설명 (0) | 2023.12.14 |
[STM32]usart(uart) 송신 수신 인터럽트 사용하기 (0) | 2023.12.14 |