본문 바로가기

MCU 제어/STM32Cube Mx

[STM32]ST-Link 사용법 및 IAR 디버깅 방법

ST-Link는 무엇일까?

st홈페이지에 나와있는 ST-Link 설명

해석 - ST-LINK/V2는 STM8 및 STM32 마이크로컨트롤러 제품군을 위한 회로 내 디버거 및 프로그래머다. SWIM 및 JTAG/SWD 인터페이스는 애플리케이션 보드에 위치한 모든 STM8 또는 STM32 마이크로컨트롤러와 통신하기 위해 사용된다. 

 

대충 ST-Link는 STM계열의 보드에 프로그램을 업로드 하거나 디버깅할 때 사용하고, 그 인터페이스로 SWIM, JTAG, SWD를 사용할 수 있다는 것 같다.

 

하드웨어 디버거과 소프트웨어 디버거

 주로 시리얼 포트로 터미널 프로그램에 메서지를 출력하며 디버깅하는 것을 소프트웨어 디버깅이라하고 ST-Link등 디버깅 장비와 SWIM, JTAG/SWD 등의 인터페이스로 브레이킹 포인트를 걸고 코드를 한줄 한줄 실행시키고 멈추고 해당 상태를 읽으며 디버깅하는 것을 하드웨어 디버깅이라고 한다.

 

소프트웨어 디버깅을 하면 디버깅할 때마다 컴파일을 새로해야한다. 하지만 하드웨어 디버깅은 직접 core를 조절할 수 있기 때문에 빨리 디버깅할 수 있고 편하다.

 

ST-Link/V2

파란색 선이 HOST와 연결하는 USB선이다.

SWIM, JTAG, SWD는 뭘까?

1. SWIM

 저사양 MCU인 STM8에 프로그램을 다운로드하고 디버깅할 때 사용하는 포트이다. 위 사진에서 STM8이라고 적혀있는 부분이 SWIM 커넥터이다.

핀 아웃은 VDD, SWIM, GND, RST로 구성된다.

 

관련 문서 https://www.st.com/content/ccc/resource/technical/document/user_manual/ca/89/41/4e/72/31/49/f4/CD00173911.pdf/files/CD00173911.pdf/jcr:content/translations/en.CD00173911.pdf

2. JTAG

JTAG 커넥터는 보통 20핀으로 구성되며 TDI, TDO, TMS, TCK, TRST 이 핀들을 통해 제어하게 된다.

 

나는 SWD를 주로 사용하기 때문에 자세한 사용법은 다음에 기회가 되면 알아보겠다.

 

3. SWD

JTAG 포트는 20핀이나 차지하기 때문에 보드에 이 포트를 넣어야하는데 공간을 많이 차지한다. 반면에 SWD는 포트를 공유해서 사용할 수도 있지만 시리얼 방식으로 통신하기 때문에 클럭과 데이터 GND핀만있으면 되기 때문에 편하다.

 

ST-Link User manual - 여기에 ST-Link 핀맵을 보고 보드와 연결하면 된다.

https://www.st.com/content/ccc/resource/technical/document/user_manual/65/e0/44/72/9e/34/41/8d/DM00026748.pdf/files/DM00026748.pdf/jcr:content/translations/en.DM00026748.pdf

IAR 디버깅 방법

프로젝트 빌드 -> F7

Run -> F5

Program download and debug -> Ctrl + D

Step over(한줄씩 코드 실행, 만약 한줄이 함수라면 그 함수 내부를 모두 실행) -> F10

Step into(함수를 만났을 때, 그 함수 내부로 들어감) -> F11

Step out(현재 함수의 끝까지 실행하고, 함수를 호출했던곳으로 되돌아감) -> Shift + F11

디버깅 종료 -> Ctrl + Shift + D 

 

Break point를 사용하려면 해당 코드에 커서를 놓고 F9를 누른다. Break point를 설정한 상태에서 Run(F5)하게 되면 Break point가 설정된 곳 전까지 실행한다. 이 상태에서 Step over, into out 등을 하며 디버깅할 수 있다.

 

디버깅하면서 메뉴에서 View->Locals를 클릭하면 지역변수 상태를 볼 수 있다.

 

'MCU 제어 > STM32Cube Mx' 카테고리의 다른 글

[STM32]PWM을 이용하여 BLDC 모터 구동하기  (0) 2020.03.21
[STM32] Basic Timer  (1) 2020.03.02
[STM32]UART 인터럽트 송수신 실습  (3) 2020.02.29
Cube MX란?  (0) 2020.02.21
[STM32]UART 통신 입출력 실습  (0) 2020.02.02