상세 컨텐츠

본문 제목

[STM32F4/범용] 개발환경 설정 IAR 7.4

Archive/Embedded | Cortex M

by 푸로그 2019. 2. 16. 23:16

본문

블로그 글 백업 원글 일시:2016-02-17 16:26

PORT407Z 보드 (STM32F407ZET MCU)

IAR 7.4 버전이 설치는 되어있다는 가정하여 진행 하겠습니다.

(6.4 버전 이후로 설정은 비슷합니다.)   

   

  1. 표준 라이브러리 다운로드(STM32F4 DSP and standard peripherals library)   

우선 자신의 MCU 맞는 라이브러리를 다운 받아야 하는데요, 다음 링크를 참조하세요.

http://www.st.com/web/en/catalog/mmc/SC1169/SS1577/LN11/PF252148

만약, 접속하거나 링크가 바뀌었다면,

다음과 같은 경로를 통해 접근 하시면 됩니다.

All 눌러 주셔서 보기 편하게 만들어 줍니다.

 

검색 기능(Ctrl+F) 이용하여 standard 라고 검색하시면 위와 같은 이름(STM32F4 DSP and standard peripherals library) 라이브러리를 찾을 있습니다.

다음과 같이 현재 버전(1.6.1) 나와 있네요. 높은 버전이더라도, 파일 구조는 동일 하기 때문에 그냥 받으시면 됩니다.

(M3같은 경우 DSP라는 말이 빠져 있습니다. M4 FPU같은 부동소수점 연산 유닛이 들어가 있기때문에 M4부터는 DSP 라는 말이 들어가 있습니다.)

D:\WS\ARM\lib

저는 해당 경로에 라이브러리를 다운 받아 압축 해제 하였습니다.

  1. 프로젝트 만들기

위와 같이 Create New Project 눌러 줍니다.

그리고 Empty Project 선택 하겠습니다.

   

경우는 SW/ARM/ISTM32F4xx 라는 경로에 프로젝트 폴더를 만들고,

프로젝트 이름을 코어 이름과 동일하게 STM32F407ZET 저장 하였습니다.

  이후, 디스켓 여러장 모양의 Save All 눌러 주면,

 

Workspace 코어이름과 동일하게 저장하였습니다.

   그리고 프로젝트 명을 마우스 우클릭 하여, 그룹의 구조를 다음과 같이 맞춰줍니다.

사실 구지 넣어도 되는 것들도 있지만, 라이브러리의 실제 폴더 구조와 동일하게 맞춰줍니다.

해당 빨간 박스의 파일들은 아래 경로에 있습니다.

STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates

STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\iar

STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\CMSIS\Device\ST\STM32F4xx\Include

STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\STM32F4xx_StdPeriph_Driver\src

STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\STM32F4xx_StdPeriph_Driver\inc

   

이제 User 폴더의 내부에 다음과 같은 파일을 추가 하여 주어야 합니다.

stm32f4xx_conf.h - Library Configuration file

stm32f4xx_it.c - Interrupt handlers

stm32f4xx_it.h - Interrupt handlers header file

main.h - Main header file

   

파일들은 아래의 경로에서 쉽게 가져올 있습니다.

STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Project\STM32F4xx_StdPeriph_Templates

다만 !! 복사해서 자신의 프로젝트 경로에 붙여 넣어 주시는 것을 권장합니다.

   

4개의 파일은 인터럽트와 라이브러리 설정 관련 파일이므로, 향후 여러 개의 프로젝트를 만들 , 프로젝트 별로 설정하여 주어야 하기 때문입니다.

그리고 IAR 돌아와, 추가 시켜줍니다.


main.c 파일은 다음을 복사해서 쓰시면 됩니다.(Crtl+N 하신다음 아래 내용 복사해서 붙여 넣고 저장 버튼 눌른 후에 프로젝트 경로에 붙여 넣어 줍니다!)

 

#include "main.h"

#include "stdio.h"

#include "stdlib.h"

#include "math.h"

 

/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

/* Private function prototypes -----------------------------------------------*/

static void Delay(__IO uint32_t nTime);

   

/* Private functions ---------------------------------------------------------*/

   

   

/**

* @brief Main program

* @param None

* @retval None

*/

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_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

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);

}

}

/**

* @brief Inserts a delay time.

* @param nTime: specifies the delay time length, in milliseconds.

* @retval None

*/

void Delay(uint32_t nCount)

{

__IO uint32_t i; //__IO mean volatile

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

}


 

  1. 환경 변수, 컴파일러 설정하기

   

다음과 같이 Device 자신의 MCU 맞게 설정하여 줍니다.

향후 Printf 같은 함수를 쓰려면, 라이브러리를 Full 설정해주셔야 합니다.

Use CMSIS 체크박스도 빼먹지 마시구요!

다음은 C/C++ Compiler 부분의 Preprocessor 탭을 클릭하여 환경 변수를 잡아주어야 하는데요

사용자의 선호 따라 다르지만, 저는 절대경로로 잡고 있습니다. 저는 프로젝트 안에 라이브러리를 추가시키는 편이 아니라, 라이브러리만 모아서 관리 하기 때문에 절대 경로로 잡고 있습니다.
(안드로이드 프로젝트 만들때 마다, SDK 새로 받진 않으시 잖아요 ㅎㅎ...)

Additional include directories:

D:\WS\ARM\lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\CMSIS\Include

D:\WS\ARM\lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\CMSIS\Device\ST\STM32F4xx\Include

D:\WS\ARM\lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates

D:\WS\ARM\lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\iar

D:\WS\ARM\lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\STM32F4xx_StdPeriph_Driver\src

D:\WS\ARM\lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\STM32F4xx_StdPeriph_Driver\inc

$PROJ_DIR$\

 

Defined symbols:

USE_STDPERIPH_DRIVER

STM32F40_41xxx

다음은 Dubugger Setup 입니다.

자신이 보유한 디버거를 선택하시고, Run to 체크 박스 해제 하여 주세요.

그리고 다음과 같이

Use Flash loader Override default board file을 체크 하여 줍니다.

다음은 ST-LINK 클릭하시고, 72Mhz 되어 있던걸 168Mhz 바꾸어 주세요. (=STM32F407ZE 동작 클럭)

이제 대망의 컴파일을 볼까요?

짜잔 에러가 있네요.

main.h stm32f4xx_it.c(SysTick_Handler 함수 ) 부분의 TimingDelay_Decrement 부분을 지워 줍니다.

 

부분이 에러가 나는 이유는, 저희가 편의를 위해 Template에서 가져 왔기 때문에 한가지 함수가 추가 되어 있는 것입니다.

Tip. 전체 찾기는 Ctrl + Shift + F

 

다음과 같이 설정하고 컴파일을 하면 에러 없이 동작 것입니다.

 

문제 있으시면, 댓글로 알려주세요!

 

IAR, Cortex M4, 개발 환경 설정, STM32, STM32F407ZET