게시글 상세

목록으로

STM32 디버거에서 변수 출력 방법

조회수: 114
작성자: june9152
등록일: 2025-08-23 04:11 수정일: 2025-12-20 19:46
STM32 디버거에서 변수 출력 방법

STM32 디버거에서 변수 출력 방법

마이크로컨트롤러 디버깅을 위한 종합 가이드

개요

STM32 마이크로컨트롤러를 디버깅할 때 변수 값을 확인하는 것은 필수적인 과정입니다. 본 문서에서는 효율적이고 실용적인 변수 출력 방법들을 체계적으로 소개합니다.

1. SWD/JTAG 디버거를 활용한 방법

방법 A: 실시간 변수 감시 (Live Variable Watch)
  • IDE(STM32CubeIDE, Keil, IAR)에서 디버그 세션 시작
  • "Expressions" 또는 "Watch" 창 열기
  • 감시할 변수명 입력
  • 디버깅 중 실시간으로 값 업데이트 확인
방법 B: 중단점을 활용한 변수 검사
  • 변수 확인이 필요한 지점에 중단점(breakpoint) 설정
  • 디버거 실행 (F5)
  • 중단점에서 변수에 마우스 오버하거나 "Variables" 창에서 확인
방법 C: 메모리 브라우저 활용
  • "Memory Browser" 창 열기
  • 변수 주소 입력 (&variable 형식)
  • 원시 메모리 내용 확인

2. 시리얼 출력 (UART/ITM/SWO) 방법

방법 A: UART 디버그 출력

UART를 통한 printf 함수 리다이렉션:

#include // printf를 UART로 리다이렉션 (main() 함수 이전에 추가) int _write(int fd, char *ptr, int len) { HAL_UART_Transmit(&huart1, (uint8_t*)ptr, len, HAL_MAX_DELAY); return len; } // 사용 예시 printf("변수 값: %d\n", my_var);

주의사항: UART 초기화 필요 (예: huart1)

방법 B: ITM (Instrumentation Trace Macrocell) - SWO 핀 활용
  • STM32CubeMX에서 "Debug" 설정에서 ITM 활성화
  • ITM을 통한 printf 사용:
#include "stm32f4xx_hal.h" void ITM_SendChar(uint32_t ch) { ITM->PORT[0].u32 = ch; } // 사용 예시 (ITM 설정 시) printf("값: %d\n", my_var);

출력은 SWV ITM Data Console(STM32CubeIDE) 또는 Keil의 Debug (printf) Viewer에서 확인

3. Segger RTT (Real-Time Transfer) 방법

UART보다 빠른 대안:

  • 프로젝트에 Segger RTT 라이브러리 추가
  • 다음과 같이 사용:
#include "SEGGER_RTT.h" SEGGER_RTT_printf(0, "변수: %d\n", my_var);

J-Link RTT Viewer 또는 STM32CubeIDE Terminal에서 출력 모니터링

4. ST-Link GDB 서버 (명령행 디버깅)

OpenOCD/GDB 사용 시:

# GDB에서: (gdb) monitor reset halt (gdb) print my_var (gdb) watch my_var # 변수 변경 시 중단

방법별 비교표

방법 속도 실시간성 설정 복잡도 추천 용도
IDE 변수 감시 보통 높음 낮음 중단점 디버깅
UART 출력 느림 보통 보통 일반적인 로깅
ITM/SWO 빠름 높음 보통 실시간 모니터링
Segger RTT 매우 빠름 높음 높음 고성능 로깅

권장사항

  • 실시간 모니터링: ITM(SWO) 또는 Segger RTT 사용
  • 중단점 디버깅: IDE Watch Expressions 활용
  • 저부하 로깅: UART 대신 SWO 또는 RTT 선택
  • 성능 최적화: 디버깅 코드는 릴리즈 빌드에서 제거 권장

본 문서는 STM32 개발 효율성 향상을 위한 기술 가이드입니다.

처리 중입니다...

잠시만 기다려주세요.