2010년 7월 21일 수요일

STMicrosystem 사의 프로세서 stm32를 위한 개발환경 설정


1. 컴파일러 설치
ARM EABI GCC가 포함된 컴파일러 도구인 CodeSourcery G++ Lite를 다음 주소 http://www.codesourcery.com/sgpp/lite/arm/portal/subscription3053 에서 다운받자.



현재 시점에서 가장 최신버전인 Sourcery G++ Lite 2010q1-188을 설치하자.




모든 사용자가 사용할 수 있도록 PATH를 지정하도록 설정한다.



설치를 마치고 사용 방법을 살펴보도록한다.



2. IDE(Integrate Development Environment) 설치
http://www.eclipse.org/downloads/ 에서 Eclipse IDE for C/C++ Developer중에서 windows 32bits 버전을 다운 받고 c:\에 압축을 해제한다.

3. JRE(Java Runtime Environment) 설치
Eclipse를 설치하고 c:\eclipse\eclipse.exe를 실행하면 다음과 같은 메시지를 출력한다.


http://java.com/ko/download/windows_ie.jsp?locale=ko&host=java.com 에서 무료 Java 다운로드 항목을 클릭하여 JRE를 다운로드한다. 현재 시점에서 JavaSetup6u21.exe가 실행되면 설치시에 대상 폴더 변경을 선택한다.


그리고 c:\eclipse\jre라는 폴더를 만든다.



JRE 설치시에 대상폴더를 위의 폴더로 변경한다.



4. Eclipse 환경 설정
Eclipse를 실행하면 다음과 같이 workspace를 설정하는 화면이 나온다.


C:\work\STMicrosystem이라는 폴더를 생성하고 위의 경로를 C:\work\STMicrosystem으로 변경하자.


그러면 Loading Workbench 라는 메시지와 함께 Eclipse의 로딩 화면이 시작된다.



로딩이 종료된 시작화면은 다음과 같다.



새로운 프로젝트의 생성 File->New->C Project 를 선택하고 다음과 같은 STM32_MP3라는 프로젝트를 생성한다.


그리고 다음 화면에서 Workbench로 모드를 전환한다.


STM32_MP3라는 프로젝트가 Project Explore에 나타나고 내용은 아직 아무것도 없는 상태가 된다.


5. 프로젝트 파일 작성
생성된 프로젝트 STM32_MP3의 Project Explore 탭에서 오른쪽 버튼을 클릭하여 Property항목을 선택한다.



항목중 C/C++ Build의 Environment항목을 선택하고, 컴파일러의 경로를 지정해주기 위한 새로운 환경변수를 등록하자.

Add 버튼을 선택하고 아래와 같은 새로운 변수를 등록하자. 경로는 위에서 설치한 컴파일러의 경로인 C:\Program Files\CodeSourcery\Sourcery G++ Lite\bin을 추가하자.



위와 같이 컴파일러를 설정하면 컴파일러를 사용할 준비가 다 완료 되었다. 하지만, Eclipse에서 Build All을 선택하게 되면 Console에서 다음과 같은 메시지를 출력한다.


이메시지는 컴파일하는데 필요한 make명령어가 없다는 것을 알려주는 것이다. 실제로 컴파일러의 경로를 따라 가보면, 다음과 같이 make 명령어가 없고 cs-make라는 명령어만 존재한다.



이 부분을 해결하기 위해서 다시 Project의 Property부분으로 되돌아 가서 Use default build command를 해제하고 make부부분을 cs-make로 변경하자.



6. 디버깅환경 설정하기
여기서 사용할 디버깅 도구는 olimex사에서 나오는 openusbjtag이라는 장비와 OpenOCD라는 소프트웨어가 된다. 일반적인 Wiggler도 약간의 차이점만 있을 뿐 거의 비슷한 수준일 것이다. 우선 OpenOCD 의 최신 버전을 다운 받자. 불행히도 OpenOCD 최신버전은 git서버를 통한 접근만 허용하고 있기 때문에 Windows에서 사용할 수 있는 바이너리 구하는 것이 쉽지 않다. 하지만,공식적으로 http://www.freddiechopin.info/ 사이트에서 제공한다. Download/OpenOCD 0.4.0.msi 파일을 다운받자.



잘 살펴보면 Due to alleged GPLv2 license incompatibility of using ftd2xx.dll libraries, this version was compiled to use libftdi + libusb-win32 librarie 이라는 글에서 알 수 있듯이 ftd2xx.dll파일이 GPLv2 라이센스에 부합하지 않다고 다른 방법으로 사용하고 있음을 알려주고 있다. 우선은 설치해 보도록 하자.



설치가 완료되면 Eclipse를 다시 실행하자. Eclipse의 Run->External Tool -> External Tools Confiturations를 선택하자. 그리고 다음과 같이 이미지를 Upload하도록 하는 설정을 하자.



그리고 Debug를 하기 위한 설정을 다음과 같이 하자.


한가지 빼먹은 것이 있다. 위의 두설정의 각각의 Common탭의 Display in favorites menu에 External Tools를 체크해야지만 메뉴상에 나타나서 쉽게 사용할 수 있다. 그리고 위에서 언급된 olimexopenocd.cfg, stm32_jtag.cfg, stm32_program_eclipse_jtag.cfg, 그리고 stm32_debug_jtag.cfg라는 파일은 다음과 같다.

----------------------------------- olimexopenocd.cfg--------------------------------------
#interface
interface ft2232
ft2232_device_desc "Olimex OpenOCD JTAG A"
ft2232_layout "olimex-jtag"
ft2232_vid_pid 0x15BA 0x0003
------------------------------------------------------------------------------------------------

--------------------------- stm32_jtag.cfg ---------------------------------------------
# script for stm32

if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME stm32
}

if { [info exists ENDIAN] } {
set _ENDIAN $ENDIAN
} else {
set _ENDIAN little
}

# Work-area is a space in RAM used for flash programming
# By default use 16kB
if { [info exists WORKAREASIZE] } {
set _WORKAREASIZE $WORKAREASIZE
} else {
set _WORKAREASIZE 0x4400
}

# JTAG speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz
jtag_khz 1000

jtag_nsrst_delay 100
jtag_ntrst_delay 100

#jtag scan chain
if { [info exists CPUTAPID ] } {
set _CPUTAPID $CPUTAPID
} else {
# See STM Document RM0008
# Section 26.6.3
set _CPUTAPID 0x3ba00477
}
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID

if { [info exists BSTAPID ] } {
# FIXME this never gets used to override defaults...
set _BSTAPID $BSTAPID
} else {
# See STM Document RM0008
# Section 29.6.2
# Low density devices, Rev A
set _BSTAPID1 0x06412041
# Medium density devices, Rev A
set _BSTAPID2 0x06410041
# Medium density devices, Rev B and Rev Z
set _BSTAPID3 0x16410041
# High density devices, Rev A
set _BSTAPID4 0x06414041
# Connectivity line devices, Rev A and Rev Z
set _BSTAPID5 0x06418041
}
jtag newtap $_CHIPNAME bs -irlen 5 -expected-id $_BSTAPID1 \
-expected-id $_BSTAPID2 -expected-id $_BSTAPID3 \
-expected-id $_BSTAPID4 -expected-id $_BSTAPID5

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME

$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0

set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME stm32x 0 0 0 0 $_TARGETNAME

# For more information about the configuration files, take a look at:
# openocd.texi
------------------------------------------------------------------------------------------------

--------------------------- stm32_program_eclipse_jtag.cfg -------------------------
# default ports
telnet_port 4444
gdb_port 3333
tcl_port 6666

init
jtag_khz 1125
reset init
verify_ircapture disable

halt
poll
stm32x mass_erase 0
flash write_image stm32f10x.bin 0x08000000 bin
reset run
shutdown
------------------------------------------------------------------------------------------------

-------------------------------- stm32_gdb_jtag.cfg --------------------------------------
# default ports
telnet_port 4444
gdb_port 3333
tcl_port 6666

#swj_mode 2

init
jtag_khz 565
reset init
verify_ircapture disable
------------------------------------------------------------------------------------------------

그리고 Wiggler를 사용할 경우 다음과 같은 내용의 *.cfg 파일을 만들어서 olimexopenocd.cfg파일을 대체시키면 사용이 가능하다.

#
# Parallel port wiggler (many clones available) on port 0x378
#
# Addresses: 0x378/LPT1 or 0x278/LPT2 ...

interface parport
parport_port 0x378
parport_cable wiggler

여기까지는 외부장치에 대한 설정을 하는 것이다. 실제로 Eclipse가 외부장치(Jtag 디버거)와 통신할 수 있는 환경을 만들어 주는 것도 설정해 주어야 한다. 단순히 이미지 업로드 하는 것은 별다른 설정없이 업로드할 이미지 즉, stm32_program_eclipse_jtag.cfg파일에서 stm32f10x.bin만 정확히 설정해 주면 동작하지만 디버깅의 경우 좀더 설정해 주어야 할 것이 있다. 우선 Eclipse에서 GDB Hardware Debugging 을 지원해주는 Plug-in을 설치하자. 설치하기 위해서 소프트웨어가 들어있는 서버의 주소를 아래와 같이 먼저 설정해 주어야한다. Help->Install New Softwares ->"Available Software Sites"를 선택하면 된다.


그리고 Work with항목에 위의 주소를 설정해 주고 다음 Plug-in을 설치하고 재시작하자.



Run메뉴에서 Debug Configurations를 선택한다. 그러면 다음과 같은 화면이 나타난다.


왼쪽 탭의 네가지 항목중에서 GDB Hardware Debugging을 선택하고 New 버튼을 클릭한다. 그리고 Debugger 탭에서 가서 다음과 같이 설정하고 Apply버튼을 누른다.




댓글 없음:

댓글 쓰기