정보공간_1

[7기 강남 이학경 ] Cortex-M# (STM32F#)전체 환경 셋팅 본문

IT 놀이터/Elite Member Tech & Talk

[7기 강남 이학경 ] Cortex-M# (STM32F#)전체 환경 셋팅

알 수 없는 사용자 2015. 6. 8. 10:33

안녕하세요.

강남 멤버십 이학경 입니다.

이번 포스팅은 마이크로프로세서 시장의 대표 제품인 STM32(Cortex-M#)의 개발 환경셋팅에 대하여 알아보도록 하겠습니다.


STM32프로세서는 기본적으로 CMSIS라이브러리를 통해서 코드 작업을 진행합니다.

IAR컴파일러가 설치되어있다는 가정하여 ST사에서 제공하는 CMSIS라이브러리를 다운받도록합니다.

 

지속적으로 업데이트 되므로 버전이 계속해서 변하니 포스팅 시점과 글을 읽으시는 시점의 버전 및 경로가 다를 수 있습니다.

 

 

ST.com 접속경로


링크

http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743/PF257890?s_searchtype=keyword

 

 

아래의 경로까지만 접속하면 


다음과 같은 화면을 볼수 있습니다.
빨간색 박스를 누르면 ProductsList 제목명의엑셀파일을 다운받을수 있는데 여기에 소프트웨어 종류가 정리되어 있습니다.

저의 경우는 STM32F4(Cortex-M4)의 CMSIS가 필요했습니다.

STM32F4xx DSP and standard peripherals library 라고 되어있는걸 확인할 수 있네요

standard peripherals library에는 기본 예제와 함께 CMSIS라이브러리가 함께 포함되어 있습니다.
STM32F4의 경우는 내부장치에 고속연산이 가능한 FPU가 내장되면서 DSP가 가능합니다. 그러다 보니 기본 라이브러 자치에서 DSP를 지원합니다.

이러한 이유로 F1,2,3(CORTEX-M0/3)의 경우 라이브러리 명은 그냥 standard peripherals library 이라고 되어있는 반면 F4(CORTEX-M4)의 경우만 DSP and standard peripherals library 라고 되어있습니다.


STM32F4xx DSP and standard peripherals library를 클릭하면 아래와 같은 화면이 나오고 해당 라이브러리를 다운로드를 받을수 있습니다.
압축파일명은 stm32f4_dsp_stdperiph_lib.zip 으로 되어있네요.


1.
상기페이지 접속

2.
Design Resources 상단바 클릭

3. 

Related Tools and Software -> 
STSW-STM32065STM32F4 DSP and standard peripherals library

 


STSW-STM32065 라이브러리 다운

(여러 라이브러리가 있으나 가장 기본이되는 standard 라이브러리를 선택)



stm32f4_dsp_stdperiph_lib.zip 압축을 풀면 stm32f4_dsp_stdperiph_lib 폴더가 생기는데요. C드라이브에 IAR개발환경을 저장할 폴더를 하나 생성하고 stm32f4_dsp_stdperiph_lib폴더명을 STM32F4xx_Library로 변경한 후 안에 넣어줍니다.

 

아래의 예 처럼 프로젝트폴더 안에 넣어주면 됩니다.

C:\IAR_Project\Project_A

C:\IAR_Project\Project_B

C:\IAR_Project\Project_C

 

프로젝트마다 라이브러리를 저장해서 넣어주는걸 권장드립니다. 

(IAR컴파일러에서 라이브러리 경로설정을 하기 용이 하기 때문)

 

 

1) IAR 컴파일러 실행

 

2) Project -> Create New Project 



3) OK 선택




4) 라이브러리가 있는 경로에 원하는 파일명(영문)으로 저장


5) 저장을 누른후 왼쪽에 프로젝트가 생성된 모습


6) Save All 을 눌러서 같은 이름으로 .eww파일 저장




7) 왼쪽의 Workspace에서 File에 프로젝트명을 우클릭

Add-> Add Group 선택하여 폴더 4개 생성

 

 

 

8) 폴더명은 다음과 같이 지정 (CMSIS, EWARM, STM32F4xx_StdPeriph_Driver, User)

 

 

 

9)

CMSIS 폴더 우클릭 Add-Files를 클릭하여

다음경로의 파일을 불러온다.

C:\IAR_Project\Project_CortexM4_#1\Lib\STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\iar



해당경로에는 .s 파일이 여러개가 존재하는데 자신이 사용하는 F4계열 칩에 맞는것을 선택하면 됩니다. (startup_xx..xx.s 파일은 칩을 선택하는 기능을 포함합니다.)

아래와 같은 화면이 나오면 선택하여 추가하면 됩니다.


10)

동일한 방법으로 EWARM폴더를 우클릭하여 다음 경로의 파일을 추가시켜 줍니다.

C:\IAR_Project\Project_CortexM4_#1\Lib\STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates


파일명

system_stm32f4xx.c

아래와 같이 추가된것을 볼수 있습니다.

 

 

11)

메모장을 열어 다음 경로에 main.c 파일명으로 저장합니다.

C:\IAR_Project\Project_STMF4 (최상위 경로)

추가한후에 컴파일러의 User폴더에서 main.c파일을 추가해줍니다.

아래와 같이 아무내용이 없는 main문이 추가된것을 볼 수 있습니다.


 

12)

Cortex-M4(STM32F4)를 사용하기위한 가장 기본적인 파일을 추가 하였습니다.

옵션 설정 (STM32F4-Debug를 우클릭하여 옵션을 선택합니다.)

 

 

13) Device에서 해당하는 프로세서를 선택합니다.

 

 

14) 프로세서를 선택하고 Fpu에서 VFPv4를 선택 하면 FPU를 사용한다는 의미이다.

None를 선택하면 사용하지 않습니다. - M4를 사용하신다면 선택해주세요.


 

15) General Options -> Library Configuration -> CMSIS -> Use CMSIS 선택

(DSP라이브러리를 사용할경우 DSP libray 선택)

printf 함수를 사용하려면 Library -> Full 로 선택

 

 

16) C/C++ Compiler에서 Optimizations 설정

Level에서 None으로 설정해도되고 High로 설정하여도 무방합니다.

 

 

17) 

C/C++ Compiler에서 Preprocessor 설정

가장 중요한 부분인데요. 사용하는 라이브러리의 경로를 추가해주는 부분입니다.


$PROJ_DIR$\

$PROJ_DIR$\Lib\STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\iar

$PROJ_DIR$\Lib\STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates

$PROJ_DIR$\Lib\STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm

$PROJ_DIR$\Lib\STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\Include

$PROJ_DIR$\Lib\STM32F4xx_DSP_StdPeriph_Lib\Libraries\STM32F4xx_StdPeriph_Driver\inc

$PROJ_DIR$\Lib\STM32F4xx_DSP_StdPeriph_Lib\Libraries\STM32F4xx_StdPeriph_Driver\src

$PROJ_DIR$\Lib\STM32F4xx_DSP_StdPeriph_Lib\Project\STM32F4xx_StdPeriph_Templates

$PROJ_DIR$\Lib\STM32F4xx_DSP_StdPeriph_Lib\Libraries\CMSIS\Device\ST\STM32F4xx\Include





Defined symbol (미리 정의되어있는 부분)

USE_STDPERIPH_DRIVER

STM32F40XX

 

18)

Output Converter -> Output 설정 에서 binary 선택, Output file->체크



 

19)

Debugger ST-LINK 선택 (저는 ST-LINK를 사용하였습니다)



20)

다운로드에서 해당부분 체크

 


21)

ST-LINK옵션 다음과 같이 선택합니다.

CPU clock : 168Mhz (해당 칩마다 다름)

 

 

22)

여기까지 셋팅을 한 후에 아래의 소스를 main문에 복사해서 F7를 눌러 컴파일을 합니다.

 

#include "stm32f4xx.h"

 

void main(void)

{

    while(1);

}

 

잘 작동하는것을 확인할수 있습니다.

여기까지가 STMF4를 사용하기위한 최소한의 셋팅이었습니다.

 


23)

본격적인 CMSIS 라이브러리를 사용하기위해서는 몇가지 라이브러리를 더 추가해 주어야 합니다. 


STM32F4xx_StdPeriph_Driver 폴더 우클릭 해당경로의 파일 전체 추가

C:\IAR_Project\Project_CortexM4_#1\Lib\STM32F4xx_DSP_StdPeriph_Lib\Libraries\STM32F4xx_StdPeriph_Driver\src


 


24)

GPIOA의 작동 확인을 위한 예제소스를 main.c에 복사해서 붙여 넣습니다.

 

/* 예제소스 */ 


#include "stm32f4xx.h"

#include "stdio.h"

#include "stdlib.h"

#include "math.h"

 

void Delay(uint32_t nCount)

{

     __IO uint32_t i;   //__IO mean volatile

      for(i=0; nCount > i; i++);

}

 

 

void main(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;    //structure

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);    

 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;  //Pin_Enable

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

    GPIO_Init(GPIOA, &GPIO_InitStructure);

 

    while(1)

    {

      GPIO_SetBits(GPIOA, GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);        Delay(1000000);    

      GPIO_ResetBits(GPIOA, GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);  Delay(1000000);    

    }

}

 

 

F7를 누르면 다음과 같이 컴파일 에러가 나는것을 확인할수 있는데요.

이는 추가된 fmc 등 여러 라이브러리가 충돌하기 때문입니다.

 

다음과 같이 우클릭을하고 옵션을 선택한 후에 

Exclude form build를 선택합니다. (오른쪽에 빨간 *로 뜨는 모든c파일에 적용)


 

25)

Exclude form build를 선택하면 회색으로 비활성화 되는것을 확인할 수 있습니다.

다시 F7를 눌러 컴파일을 하면 정상적으로 작동 됩니다.


 

26)
컴파일이 정상적으로 되었으면 ST-LINK를 이용하여 다운로드를 해봅시다.

오른쪽 상단에 Make & Restart Debugger 를 클릭

 

27)

다음과 같이 디버깅을 준비하는 화면이 나온다.

Go를 누르면 프로그램을 실행합니다.


/* IAR 컴파일러 기본셋팅 완료 */



여기까지 모든 셋팅이 끝났습니다.

생각보다 손이 많이가고 길었던 작업이엇죠?

이 셋팅을 하기까지 많은 자료조사와 시간이 필요했었는데요. 

많은 분들에게 도움이 되었으면 합니다.

감사합니다.