yagarto, STM32

Embeded : 2014. 1. 7. 18:47
반응형

참고한 싸이트 : https://sites.google.com/site/stm32discovery/open-source-development-with-the-stm32-discovery/setting-up-eclipse-for-stm32-discovery-development


http://www.jkelec.co.kr/img/lecture/stm32_eclipse/stm32_eclipse.html



codesourcery + eclipse 조합으로 개발툴을 만들었었는데 codesourcery의 라이브러리가 너무 큰지 최종 빌드된 바이너리가 너무 커서 STM32L 보드에 올릴수가 없었다.


그래서 이번에는 yagarto 툴체인을 사용해서 다시 개발환경을 세팅해보고자 한다.


1. yagarto toolchain 설치


홈페이지 : http://www.yagarto.org/index.html


다운로드 : http://sourceforge.net/projects/yagarto/


yagarto tools : http://www.emb4fun.de/archive/gabmt/


위에 다운로드 싸이트 소스포지에서 다운받는다. 


yagarto-bu-2.23.1_gcc-4.7.2-c-c++_nl-1.20.0_gdb-7.5.1_eabi_20121222.exe 버전을 받았다. 

yagarto는 newlib를 사용하는데 nl-1.20.0 이라고 된부분이 newlib 버전을 의미한다.


다운받았으면 그냥 설치해준다.


툴체인은 그냥 c:\ 에 설치하는게 가장 속편하다. 정리벽이 발동해서 다른데로 설치하면 나중에 꼬이는 일이 많다.


2. eclipse cdt 설치


eclipse cdt 버전을 받아서 설치한다. c/c++ 버전으로 받으면 된다.

카이스트 서버는 허벌나게 느리기 때문에 차라리 일본 미러 서버에서 받는게 빠르다.


이클립스를 받아서 실행하면 나오는 웰컴 화면을 끄고 이제 설정을 시작한다.


메뉴에서 "Help/Install New Software .." 로 들어간다.


http://download.eclipse.org/tools/cdt/releases/helios 를 추가한다. 


추가한것을 선택하면 목록이 나오는데


거기에서 다음과 같은 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"


다 깔면 이클립스를 Restart 해준다.


3. STM32L152RBT6 설정


이제 STM32 프로젝트를 만들어보자.


하나 잘 만들어놓고 두고두고 쓰면 된다.



이클립스 메뉴에서 "File/New/Project .." 메뉴을 실행하고, "C/C++ - C Project" 를 선택한다. 


프로젝트 이름은 대충 잡아준다.


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


쭉~ 세팅하고 마지막에 컴파일러 설정하는 곳에서



prefix 에 arm-none-eabi-


path에 C:\yagarto-20121222\bin


라고 지정한다.



STM 싸이트에서 

STM32L1xx standard peripherals library 를 받는다. 이것이 STM32의 기본 파일이다.



하다가 crt0.o 없다고 나오면 아래와 같이 해준다.

Use -nostartfiles rather than -nostdlib.



마지막에 stm flash loader로 구울라면 hex파일 형식이어야 하는데 컴파일한 것이 형식이 달라서 다운로드 할수가 없다. 


이때 


Next , Go to the Properties->C++ Build->Settings and select the Build Steps tab and enter the following in the Post-build-steps Command section and give it a description.


arm-none-eabi-objcopy  ${ProjName} ${ProjName}.bin -O binary


arm-none-eabi-objcopy -S  -O binary  "${ProjName}" "${ProjName}.bin" 


이렇게 해준다.







stm32, printf, putchar


IAR 에서 printf를 사용하려면 putchar 함수만 디파인 다시 해주면 된다.


IAR Embedded Workbench, stm32f051 기준


int putchar(int ch) {

while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

USART_SendData(USART1, ch);

return ch;

}


int main(void) {

printf("Test printf\n");

while(1);

}




반응형

'Embeded' 카테고리의 다른 글

how to setup Odroid.  (0) 2014.02.08
bluetooth 포팅 하면서 본 싸이트들.  (0) 2013.11.29
어플에서 I2C 버스로 디바이스 접근하는 방법  (0) 2013.04.17
Posted by Real_G