이번엔 SWV (Serial Wire Viewer) / ITM (Instrumentation Trace Macrocell 를 통한 printf 사용방법에 대해 소개한다.
이전글 참고 : 2022.06.06 - [MCU/STM32 (ARM Cortex-M)] - STM32 , printf 디버깅에 사용하기 1편 ( UART 통신 )
1. CubeMX에서 클락설정 먼저 해준다.
2. 표준입출력 헤더파일을 포함한다.
/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */
3. _write 함수를 ITM에 리다이렉션하는 것으로 재정의 해준다.
/* USER CODE BEGIN PFP */
int _write(int file, char* p, int len){
for(int i=0; i<len; i++){
ITM_SendChar((*p++));
}
return len;
}
/* USER CODE END PFP */
4. 테스트를 위한 소스코드 작성
/* USER CODE BEGIN 2 */
uint8_t count=0;
float f = 0.5;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
printf("hello : %d %f\r\n", count, f);
count++;
f += 1.5;
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
5. 다음과 같이 Debug Configuration 설정 후 디버그한다.
Debugger 탭 클릭
Debug probe는 (ST-LINK GDB Server)여야 한다.
스크롤을 내려
Serial Wire Viewr (SWV) 의 Enable 을 체크하고,
Core Clock 은 Clock Configuration 의 값을 그대로 써준다.
내 경우엔 180MHz
6. Window - Show View - SWV - SWV ITM Data Console 과 SWV Data Trace Timeline Graph 창을 열고, 둘 중 아무거나 오른쪽에 있는 공구모양의 트레이스 설정 아이콘을 클릭한다.
7. 아래와 같이 SWV 세팅을 하고 Start Trace 버튼을 눌러 활성화 한 뒤 Resume키를 누른다.
Printf 출력만 확인 하려면 ITM 포트 0번만 열어도 된다.
그래프까지 확인하고 싶으면 그 위에 데이터 트레이스 Comparator에 활성화 체크하고 변수명을 넣는다.
아까 설정버튼 오른쪽에 있는 빨간 버튼을 누른 뒤 디버그 재개
아래와 같이 그래프를 통해 볼 수 있다.
각 변수에 대한 그래프 색깔이 다르고 y축의 값도 다르다.
출처 : https://www.youtube.com/watch?v=sPzQ5CniWtw
'임베디드 개발 > STM32 (ARM Cortex-M)' 카테고리의 다른 글
STM32 ] RTC , GetTime / GetDate 함수로 시간 값 확인 시 주의사항 (1) | 2022.06.11 |
---|---|
STM32 , RTC 와 FND 로 시계 만들기 + UART로 시간 제어 (FND 라이브러리 공유) (0) | 2022.06.09 |
STM32 , printf 디버깅에 사용하기 1편 ( UART 통신 ) (0) | 2022.06.06 |
STM32 , I2C 통신 오실로스코프로 확인하기 (0) | 2022.06.06 |
STM32CubeIDE , 프로젝트 복사 붙여넣기 하는법 / clone or duplicate a project for reuse (2) | 2022.06.04 |