STM32F GCC 이클립스 개발환경 구축


 
* Update history

- 2013.9.12 : 초기 Release



 
1. 컴파일러 설치
   1.1 ARM EABI GCC가 포함된 CodeSourcery G++ Lite
   1.2 이클립스 IDE 설치
2. Configuration Eliipse for STM32F4
   2.1 Eclipse 환경설정
   2.2 STM32F4 프로젝트 생성
   2.3 STM32F4 프로젝트 설정
3. Configuration Eliipse for ST-Link/V2
   3.1 Eclipse 다운로드 환경설정
   3.2 Eclipse 디버깅 환경설정
4. Open Existing Project
   4.1 Open Existing Project

 


1. 컴파일러 설치
1.1 ARM EABI GCC가 포함된 CodeSourcery G++ Lite

(1) http://www.codesourcery.com/sgpp/lite/arm/portal/subscription3053 에 접속해서 account 확인후에 "Lite Edition 을 다운로드 한다.

stm32

(2) 다운받은 arm-2013.05-23-arm-none-eabi.exe 파일 설치. 파일 이름은 다운로드 받은 날짜에 따라서 달라질 수 있다.

stm32 stm32

stm32 stm32

stm32 stm32

stm32 stm32

stm32 stm32

stm32 stm32

설치가 모두 완료되었 다면 윈도우 도스 프롬프트(명령 프롬프트) 에서 "arm-none-eabi-gcc -v" 라고 명령을 실행 했을때 아래 그림과 같이 gcc version 이 올바르게 표시 되어야 한다. cortex-m3 를 올바르게 지원하기 위해서는 gcc 버젼 4.6.1 이상이 설치 되어 있어야 한다.

stm32

1.2 이클립스 IDE 설치

(1) 자바 JDK 설치( Download and install latest J2SE )

stm32

(2) 다운로드 받은 jdk-7u25-windows-i586.exe 파일을 설치 한다. 파일 이름은 다운로드 받은 버젼에 따라서 달라 질 수 있다.

stm32 stm32

stm32 stm32

stm32 stm32

(2) 이클립스 설치( Download and unpack Eclipse)

개발자의 윈도 환경에 따라서 Windows 32-bit or Windows 64-bit 버젼을 다운로드 한다.

stm32

이클립스 프로그램은 별도의 설치 과정은 필요 하지 않다. 다운받은 zip 파일을 압축 해제하고 eclipse 폴더의 "eclipse.exe" 파일을 곧바로 실행하면 된다.

2. Configuration Eliipse for STM32F4
2.1 Eclipse 환경설정

(1) CDT Plugin 설치
이클립스를 처음 실행하면 아래 그림과 같이 Workspace를 설정하라는 창이 나온다. 아무 폴더나 지정해도 되지만 프로젝트 관리를 체계적으로 하기위해서는 측정 작업 폴더를 생성해서 하는것이 좋다.
필자는 "D:\svn\eclipse_work" 폴더에 생성 하였다.

bitbucket

이클립스가 처음 실행된 화면이다.

bitbucket

이클립스 메뉴에서 "Help/Install New Software .." 메뉴을 선택 한다.

bitbucket

"Available Software Sites" 를 선택해서 "http://download.eclipse.org/tools/cdt/releases/helios" 사이트를 추가한다.

bitbucket

"Work With" 에 "-- All Available Sites --" 를 선택하면 온라인에서 지원 가능한 Eclipse 플러그인들이 리스트 된다. 아래 그림에서 다음과 같은 6개의 항목을 선택 한다.

"C/C++ Development Tools",
"C/C++ Development Platform",
"C/C++ GCC Cross Compiler Support",
"C/C++ GDB Hardware Debugging",
"C/C++ GNU Toolchain Build Support",
"C/C++ GNU Toolchain Debug Support"

stm32


bitbucket

bitbucket

bitbucket

bitbucket

설치가 완료된 후에 반드시 "Restart Now" 를 선택해서 이클립스 개발환경을 다시 시작 해야 한다.

만약 위와 같이 온라인을 통해서 직접 설치가 되지 않는다면 직접 다운을 받아서 설치 할 수도 있다. 필자의 PC의 경우에는 위와 같이 설치하면서 에러가 발생 하였다.

(2) 오프라인을 통한 CDT Plugin 설치
위의 (1) 번의 방법대로 온라인으로 직접 설치가 잘 되었다면 이번 장은 그냥 넘어가야 하다. 인터넷에 접속하여 직접 CDT Plugin을 다운로드 한다. CDT Plugin 다운로드(http://download.eclipse.org/tools/cdt/releases/helios/)

bitbucket

bitbucket

이클립스 메뉴에서 "Help/Install New Software .." 메뉴을 선택 한다.

bitbucket

"Add" 버튼을 눌러서 Local 폴더에 다운받은 CDT Plugin 을 추가한다.

bitbucket

아래 그림에서 다음과 같은 6개의 항목을 선택 한다.

"C/C++ Development Tools",
"C/C++ Development Platform",
"C/C++ GCC Cross Compiler Support",
"C/C++ GDB Hardware Debugging",
"C/C++ GNU Toolchain Build Support",
"C/C++ GNU Toolchain Debug Support"

bitbucket

이후의 절차는 온라인으로 설치하는 과정과 완전히 동일하다.

2.2 STM32F4 프로젝트 생성

이전 까지 이클립스 개발환경 설치에 대해서는 마무리가 되었고 이제 부터는 STM32 개발을 위한 프로젝트 생성에서 부터 환경 설정에 대한 부분을 알아보자.

(1) STM32 프로젝트 생성
이클립스 메뉴에서 "File/New/Project .." 메뉴을 실행하고, "C/C++ - C Project" 를 선택한다.

stm32

Cortex-M4 STM32F407VGT6 개발을 위한 환경을 설정할 것이다.

- Project name : stm32f4_dragon
- Location : D:\svn\google_code\jk-stm32f4-dragon\sw\led\prj\GCC

프로젝트 종류는 "Executable/Cross-Compile Project" 를 선택하고 Toolchains 는 "Cross GCC" 를 선택한다.

stm32

"C/C++ perspective" 를 지원하겠는냐고 대화창이 나오면 "Yes" 를 선택한다.

stm32

Empty C/C++ Project 가 생성된 화면 이다.

stm32

(2) STM32 SDK Library 다운로드
STM32에 관련된 자료가 가장 많이 있는 곳은 역시 제조사 홈페이지 이다. ST사에서 제공하고 있는 STM32용 SDK라이브러리를 다운로드 한다.

- ST사 홈페이지에 접속

stm32

stm32

- SDK 라이브러리 다운로드

stm32

- 다운로드 받은 SDK 라이브러리 압축 해제

stm32

(3) Import
새로 생성한 프로젝트에 STM32 SDK 라이브러리와 User파일(main.c, stm32f4xx_it.c) 을 추가한다. STM32 SDK 라이브러리의 위치와 프로젝트의 전체적인 구조는 아래 그림과 같습니다.

stm32


- 프로젝트에 필요한 파일들

$프로젝트 경로$ ( D:\svn\google_code\jk-stm32f4-dragon\sw )
\led\prj\GCC GCC 프로젝트
stm32f407_flash.ld
\led main.c
stm32f4xx_it.c
$Cortex-M3/M4 라이브러리$ ( $프로젝트 경로$ + \lib\STM32_USB-Host-Device_Lib_V2.1.0 )
\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\TrueSTUDIO startup_stm32f4xx.s
\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates system_stm32f4xx.c
\Libraries\STM32F4xx_StdPeriph_Driver\src misc.c
stm32f4xx_gpio.c
stm32f4xx_rcc.c
stm32f4xx_syscfg.c


프로젝트의 루트폴더에서 오른쪽 마우스 클릭후에 "Import" 메뉴을 선택

stm32

Import할 종류를 "File System" 을 선택

stm32

led 폴더에서 아래 그림과 같은 파일들을 추가. 여기서 유의 해야할 사항은 "Advanced" 에서 반드시
"Create links in workspace", "Create virtual folders", "Create link locations relative to : ECLIPSE_HOME" 을 선택 해야 한다. 그렇지 않으면 실제 파일과 폴더들이 이클립스 프로젝트 폴더내에 생성이 된다.


stm32

프로젝트에 led 폴더내의 파일들이 추가된 화면

stm32

위와 같은 방법으로 이번에는 "D:\svn\google_code\jk-stm32f4-dragon\sw\lib\STM32_USB-Host-Device_Lib_V2.1.0\Libraries" 경로의 STM32 SDK 라이브러리들을 Import 한다.STM32F4관련된 라이브러리들만 추가하면 된다.

stm32

stm32

마지막으로 프로젝트 루트에 "D:\svn\google_code\jk-stm32f4-dragon\sw\led\prj\GCC\stm32f407_flash.ld" 링크 스크립트 파일을 추가하면 된다. 모든 파일들이 추가되었으면 우리가 프로젝트에서 꼭 필요한 파일들을 제외하고 나머지는 모두 컴파일에서 제외하는 작업을 한다.

TrueSTUDIO startup 파일을 제외한 나머지 프로젝트 startup 파일들을 제외한다.

stm32

stm32

TrueSTUDIO startup 파일을 제외한 나머지 프로젝트 startup 파일들을 제외된 화면.

stm32

여기서 한가지 주의 해야할 사항이 있는데 startup_stm32f4xx.s 파일의 확장자 ".s" 가 소문자로 표기되어 있으면 정상적으로 어셈블이 되지 않는 버그가 있는것 같다. 반드시 어셈블리어 파일을 Import하기전에 탐색기 등에서 ".s" 소문자를 ".S" 대문자로 바꾼 다음에 Import를 하도록 하자. 이미 Import 작업을 수행 했다면 프로젝트에서 어셈블리어 파일을 제거하고 ".s" 확장자를 대문자로 수정한 다음 다시 Import를 하면 된다.

stm32

2.3 STM32F4 프로젝트 설정

Cortex-M4 코어 컴파일을 위한 이클립스 프로젝트 설정을 Cortex-M4 코어에 맞게 설정을 해야 한다.

(1) C/C++ Build/Environment

stm32

CWD : "${ProjDirPath}"\Debug
PWD : "${ProjDirPath}"\Debug

위의 Path 설정에서 "${ProjDirPath}" 의 실제적인 윈도 폴더의 위치는 "D:\svn\google_code\jk-stm32f4-dragon\sw\led\prj\GCC" 가 된다.

(2) Settings/Cross Settings

stm32

Prefix : arm-none-eabi-
Path : C:\Program Files\CodeSourcery\Sourcery_CodeBench_Lite_for_ARM_EABI\bin

(3) Settings/Cross GCC Compiler/Symbols

stm32

USE_STDPERIPH_DRIVER
STM32F4XX

참고로 STM32F10x 시리즈에서는 아래와 같이 설정한다.

USE_STDPERIPH_DRIVER
STM32F10X_HD --> Device density 에 따라서 STM32F10X_MD or STM32F10X_CL 등으로 바꾸어서 설정한다.

(4) Settings/Cross GCC Compiler/Includes

stm32

"${ProjDirPath}/../../../lib\STM32_USB-Host-Device_Lib_V2.1.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include"
"${ProjDirPath}/../../../lib\STM32_USB-Host-Device_Lib_V2.1.0\Libraries\STM32_USB_Device_Library\Core\inc"
"${ProjDirPath}/../../../lib\STM32_USB-Host-Device_Lib_V2.1.0\Libraries\STM32_USB_Device_Library\Class\hid\inc"
"${ProjDirPath}/../../../lib\STM32_USB-Host-Device_Lib_V2.1.0\Libraries\STM32F4xx_StdPeriph_Driver\inc"
"${ProjDirPath}/../../../led"
"${ProjDirPath}/../../../lib/STM32_USB-Host-Device_Lib_V2.1.0/Libraries/CMSIS/Include"

(5) Settings/Cross GCC Compiler/Miscellaneous/Oter flags

stm32

Other flags : -c -v -mthumb -mcpu=cortex-m4 -fmessage-length=0

참고로 stm32f10x 시리즈에서는 "-c -v -mthumb -mcpu=cortex-m3 -fmessage-length=0" 로 설정

(6) Settings/Cross GCC Linker/Miscellaneous/Linker flags

stm32

Linker flags : -T "${ProjDirPath}\stm32f407_flash.ld" -mthumb -mcpu=cortex-m4 -Wl,-Map=linker.map -Wl,-cref -Wl,--gc-sections

Cortex-M3 의 경우에는 flasts 에서 cortex-m4 를 cortex-m3 로 수정한다.

(7) Settings/GCC Assembler

stm32

Command : arm-none-eabi-as

(8) Settings/GCC Assembler/General

stm32

Assembler flags : -mthumb -mcpu=cortex-m4

Cortex-M3 의 경우에는 flasts 에서 cortex-m4 를 cortex-m3 로 수정한다.

* 참고로 소스내에서 sqrt 등의 수학 함수를 사용하는 경우에는 gcc의 math 라이브러리를 추가해 주어야 한다.

stm32

Library search path (-L) : "C:\Program Files\CodeSourcery\Sourcery_CodeBench_Lite_for_ARM_EABI\arm-none-eabi\lib\thumb2"

이제 드디어 모든 컴파일 환경 설정이 완료되었다. 이클립스에서 "Ctrl+B" 를 누르면 컴파일이 시작된다.

stm32

3. Configuration Eliipse for ST-Link/V2
3.1 Eclipse 다운로드 환경설정

(1) External Tools Configurations

stm32

Create New launch

stm32

STM32 ST-LINK Utility.exe 위치한 경로를 지정해 준다.

stm32

참고로 ST-Link Utility가 설치되지 않았다며 아래 경로에서 다운로드 받아서 설치 할 수 있다.

- ST-Link Utility 다운로드
- ST-Link 사용자 메뉴얼(새창)

3.2 Eclipse ST-Link 디버깅 환경설정

(1) External Tools Configurations

stm32

4. Open Existing Project
4.1 Open Existing Project

3 절에서는 프로젝트를 처음부터 생성하는 과정을 살펴 보았다. 하지만 이미 생성해 놓은 프로젝트 파일이 있다면 쉽게 이클립스 환경으로 Import 하여 사용할 수 있다.
이클립스를 처음 실행하면 아래와 같은 화면이 나오는데 여기에서 Workbench 아이콘을 눌러서 Project Workbench로 이동 한다.

stm32

"File/Import" 메뉴를 실행 한다.

stm32

Import 화면에서 "Existing Projects into Workspace" 를 선택한다.

stm32

STM32 GCC 프로젝트가 있는 폴더를 지정 한다.

stm32

지정한 폴더에 GCC 프로젝트가 있다면 아래 그림과 같이 Projects 리스트 창에 나타난다.

stm32

프로젝트 Import 가 완료된 화면 이다.

stm32