본문 바로가기

쓰기

ARM Cortex-M 기초 알아보기
2015.10.26 19:33

ARM Cortex-M 기초 알아보기 - 2. 개발 환경 구축

조회 수 6043
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

 Cortex-M을 지원하는 IDE는 여러 종류가 있습니다. 그 중에서 저는 ARM에서 공식적으로 지원하는 Keil µVision IDE를 사용하려고 합니다. Keil µVision은 말 그대로 ARM에서 공식적으로 지원하기 때문입니다. 코어 설계사에서 직접 제공하는 IDE가 사후 지원이나 호환성 문제에서 좀 더 나은 면을 보여 줄 것이라고 생각합니다.


`Keil.jpg

Keil Tools by ARM


 µVision은 MDK-ARM 개발 환경의 IDE입니다. Keil 홈페이지에서 MDK-Lite 버전의 무료 IDE를 다운받을 수 있습니다. 무료 버전은 코드 길이가 32KB로 제한되고, 몇 가지 제한 사항이 있습니다. 간단한 어플리케이션의 경우 코드 길이가 32KB를 넘지 않는 경우가 많으니 이를 사용하는 것도 좋습니다.


`uVision5.jpg

µVision 5 설치 후 실행



`uVision 실행 화면.jpg µVision 5 실행 모습


 µVision을 처음 실행 시키면 위 스크린샷처럼 아무것도 없는 화면이 뜨게 됩니다. 여기서 바로 프로젝트를 생성하지 않고, ST에서 제공하는 초기 코드 생성 도구인 STM32CubeMX를 이용해 코드 생성을 한 뒤 그것을 µVision으로 보내 열도록 하겠습니다. STM32CubeMX는 ST 홈페이지에서 무료로 다운로드 받을 수 있습니다.


`STM32CubeMX.jpg STM32CubeMX 실행 모습


 STM32CubeMX를 처음 실행하면 위와 같은 화면이 뜹니다. 코드를 생성하기 전에 필요한 라이브러리를 다운로드 받아야 합니다. 메뉴의 Help -> Install New Libraries를 클릭합니다. 새로 뜨는 New Libraries Manager 창에서 스크롤을 내려 STM32CubeF0 Releases의 'Firmware Package for Family STM32F0' 1.4.0 버전을 선택하고, Install now를 눌러 설치합니다. 설치에 관리자 권한이 필요하므로 처음에 프로그램을 관리자 권한으로 실행시키지 않은 경우 라이브러리 다운로드 후에 프로그램 재시작을 요구합니다.


`New Libraries Manager.jpg

STM32CubeF0의 최신 버전을 설치합니다. 여기서는 1.4.0 버전을 미리 설치해 놓았으므로 1.3.0을 선택해 보았습니다.


간혹 다운로드가 느린 경우 중간에 에러가 나면서 중단되는 경우가 있습니다. 그런 경우 ST 홈페이지에서 직접 STM32CubeF0 압축 파일을 다운로드 받은 뒤, 위 화면의 'From Loc...'을 이용해 직접 압축 파일을 지정하고 설치할 수 있습니다.


 라이브러리 설치 후 처음 화면의 New Project를 눌러 새로운 프로젝트를 시작합니다. 새로운 선택 창이 열리면 각 MCU가 소속된 line과 패키지 형태, flash, RAM, EEPROM 크기와 입출력 포트의 수를 확인할 수 있습니다. 또한 원하는 요구 사항에 따라 MCU 종류를 필터링하여 보여 주는 기능도 있습니다. MCU 이외에도 ST에서 제공하는 각종 개발 보드를 직접 선택할 수 있습니다. 이번에 예제로 사용할 MCU는 TSSOP20 패키지를 가진 STM32F030F4P6입니다. New Project 창에서 STM32F030F4Px를 선택하고, OK를 누릅니다.


`New Project.jpg

New Project 창


 원하는 MCU 선택 후 OK를 클릭하면 화면에 해당 MCU 패키지 모양과 핀 배치도가 그림으로 나타납니다. 이 핀 배치도는 단순한 그림이 아니고 각 핀의 상태를 마우스 클릭으로 설정할 수 있는 GUI입니다. 처음 어떤 핀 위에 마우스 커서를 올려 놓으면 핀 번호와 핀 이름이 나타나며 'Reset_State'라고 표시됩니다. 사용하려는 핀을 클릭하면 해당 핀에서 설정할 수 있는 옵션 리스트가 나타나며 단순히 원하는 기능을 클릭하는 것을 통해 초기 설정을 완료할 수 있습니다. 설정이 완료된 핀은 녹색으로 나타납니다. 핀 배치도 전체 화면의 좌측 리스트에서는 GUI를 통해 설정한 기능이 녹색으로 표시되며 해당 핀을 설정함으로써 사용할 수 없게 된 기능은 경고 표시와 함께 사용할 수 없다고 알려 줍니다. 이 기능이 제가 예시로 들은 20핀짜리 STM32F030F4Px의 경우 잘 느낄 수 없지만 100핀 이상의 MCU를 사용하는 경우 매우 편리합니다. 기존에는 어떤 핀을 사용하려면 데이터시트를 일일히 확인하면서 레지스터 설정을 해 주어야 했습니다. STM32CubeMX를 통해 GUI로 매우 간편하게 초기 코드를 생성하고 겹치는 기능까지 확인시켜 주니 코드 초기화와 데이터시트를 매번 보는 데 필요한 불필요한 시간을 크게 줄일 수 있습니다.


`STM32CubeMX-Pinout.jpg STM32F030F4Px MCU의 핀 배치도



`Pin config.jpg

핀의 기능을 설정한 모습


 STM32CubeMX는 기본적인 핀 설정 이외에 FreeRTOS, FatFs, USB, TCP/IP 같은 middleware 사용 설정도 할 수 있습니다. 화면 왼쪽 리스트의 MiddleWares 항목에서 원하는 항목에 체크하기만 하면 관련 라이브러리가 초기 코드에 자동적으로 포함됩니다. 그 밖에 별도 화면에서 코어와 타이머, 통신 등의 주변 장치에서 사용하는 클럭 관련 설정도 GUI를 통해 쉽게 할 수 있으며, MCU의 작동 조건에 따른 소모 전력을 계산하여 배터리 사용 시간을 계산해 주는 기능도 있습니다. 이처럼 STM32CubeMX가 공개된 지는 1년 반 정도밖에 되지 않았지만 상당히 강력한 기능들을 가지고 있어 32bit MCU가 일반인들 사이에 빠르게 퍼질 수 있는 계기가 될 것이라고 생각합니다.


 기본적인 기능들을 설정하셨다면 초기화 코드가 포함된 프로젝트를 생성할 순서입니다. 프로젝트 이름과 경로는 원하는 대로 하시고, µVision 5를 사용할 것이므로 'Toolchain / IDE'를 MDK-ARM V5로 설정해 줍니다. 별도의 Code Generator 관련 설정을 하지 않는 경우 바로 Ok를 누르면 됩니다. 기존에 STM32CubeF0 라이브러리를 받아 놓은 경우 별도 라이브러리를 받지 않고 바로 코드를 생성하게 됩니다.


`Project settings.jpg

Project Settings 창


 코드 생성 완료 후 Open Project를 눌러 프로젝트를 µVision에서 바로 실행시킵니다. µVision에 코드 관련 라이브러리가 설치되어 있지 않은 경우 Keil Pack Installer가 관련 라이브러리 설치를 요구합니다. Pack Installer 오른쪽 화면의 Devices 메뉴에서 STMicroelectronics 항목 하위 MCU를 선택하면 설치해야 하는 팩의 목록들이 화면 왼쪽 리스트에 나타납니다. 필요한 라이브러리를 설치하고 기존에 설치되어 있는 라이브러리도 Pack Installer 메뉴의 Packs -> Check For Updates를 통해 관련 팩을 업데이트 해 주는 것이 좋습니다. 만일 µVision에서 device를 찾지 못한다는 에러가 날 경우 메뉴의 Project -> Select Device for Target '프로젝트명 Configuration'을 누르고, STMicroelectronics의 STM32F030F4를 선택한 뒤 OK를 누르면 됩니다.

 

`Pack Installer.jpg

Pack Installer



`uVision with project.jpg 초기 코드와 라이브러리가 포함된 테스트 프로젝트 생성 완료


 생성된 프로젝트의 main.c 파일 내부를 보면 STM32CubeMX에 의해 생성된 MX_GPIO_Init() 함수가 포함된 것을 확인할 수 있습니다. 또한 이 함수는 main() 함수 내에서 호출되어 GPIO를 초기화하는 것도 볼 수 있습니다. 여기까지 진행하셨다면 기본적인 작업 환경 구축은 전부 끝난 것입니다.


`GPIO_init.jpg

STM32CubeMX에 의해 생성된 MX_GPIO_Init() 함수


 개인 취향에 따라 Eclipse IDE에서 디버깅을 할 수도 있습니다. Eclipse에서 Keil MDK를 플러그인으로 집어넣어 µVision에서 쓰던 다운로딩, 디버깅 메뉴를 그대로 사용할 수 있습니다. 코드 디버깅에 µVision 대신 이클립스를 사용하실 분들은 지금부터의 과정을 따라 이클립스에 Keil MDK를 적용시키면 됩니다. 우선 이클립스 C/C++를 다운로드 받습니다. 2015년 10월 기준 최신 버전은 Mars입니다. Keil MDK 이클립스 플러그인은 32bit 이클립스만 지원하기 때문에 반드시 32bit 이클립스 버전을 다운로드 받아야 합니다.


`eclipse.jpg


Eclipse IDE는 다양한 분야에서 사용되는 소프트웨어 플랫폼입니다.


 이클립스를 실행시킨 뒤 Help -> Install New Software...를 클릭합니다. Add... 버튼을 누른 뒤 Name에 'Keil MDK-ARM', Location에 Archive를 눌러 Keil MDK 설치된 경로/Eclipse/MDKEclipsePlugIn.zip! 파일을 선택한 뒤 OK를 누릅니다. Keil MDK-ARM 항목이 생성되면 항목에 체크한 뒤 Next를 누릅니다. 그 뒤 Finish 버튼을 누르면 이클립스 플러그인이 추가 작업이 진행됩니다. 플러그인 설치 후 이클립스를 재시작하면 상단에 µVision 메뉴가 생긴 것을 확인할 수 있습니다. 기존에 열어 놓은 프로젝트가 있다면 도구 모음에도 µVision 기능들이 추가된 것을 확인 가능합니다.


`eclipse start.jpg

Eclipse 시작 화면



`MDK plugin.jpg

Keil 플러그인 경로를 지정하고 추가된 항목에 체크하여 적용합니다.



`eclipse+uVision.jpg

메뉴에 µVision 기능들이 추가된 모습


 이번에는 Keil의 프로젝트를 이클립스로 import 해 보겠습니다. 이클립스에서 µVision 프로젝트를 바로 열 수 있지는 않으며, 이클립스 프로젝트를 먼저 생성한 다음 µVision 프로젝트 파일들을 이클립스 프로젝트 내부에 포함시키는 방식입니다. 이클립스에서 불러온 µVision 파일을 수정해도 원래 µVision 프로젝트 내의 파일들은 바뀌지 않습니다. 즉 import한 대상과 import된 대상은 각각의 프로젝트로 따로 관리된다고 볼 수 있습니다. 먼저 이클립스 메뉴의 File -> New -> Project를 선택합니다. New Project 창이 뜨면 General -> Project 항목을 선택한 뒤 Next를 눌러 넘어갑니다. Project name을 지정하는 칸이 나오면 이클립스 프로젝트명을 입력한 뒤 저장 경로를 지정합니다. 그리고 Finish를 눌러 빈 프로젝트를 생성합니다. 여기까지는 프로젝트를 생성해도 화면 상 변하는 것은 없습니다.


 그 다음 µVision 프로젝트를 방금 생성한 프로젝트에 import 시키는 작업을 진행합니다. 메뉴의 File -> Import...를 클릭합니다. Import 창이 나타나면 항목 중 General -> File System을 선택하고 Next를 누릅니다. 'From directory' 항목에 Browse를 눌러 µVision 프로젝트 파일들이 들어 있는 폴더를 선택합니다. 경로를 지정하면 화면에 지정한 경로와 그 경로에 포함된 파일 목록이 나타납니다. 여기서는 프로젝트 파일 전부를 import할 것이므로 프로젝트 경로 앞의 박스에 체크하여 모든 파일을 선택합니다. 그 다음 Into folder 항목에 Browse 버튼을 눌러 아까 생성한 이클립스 프로젝트를 지정해 준 뒤 Finish를 눌러 마칩니다. 모든 작업이 끝난 후 시작 화면 우측 상단의 Workbench 화살표를 누르면 프로젝트 화면으로 넘어가게 됩니다.


`import.jpg

이클립스 프로젝트에 µVision 프로젝트 import 설정



`imported.jpg

이클립스 프로젝트에 µVision 프로젝트가 import된 모습


 Import가 완료되었다면 메뉴의 Run -> Debug Configurations...를 눌러 디버깅 관련 설정을 진행합니다. 먼저 C/C++ Application with µVision Debugger 항목에 우클릭하여 New를 누르고 새 설정을 만듭니다. 이클립스 프로젝트와 디버깅할 application, target device를 각각 지정해 줍니다. Target device의 경우 device를 database에서 찾을 수 없다고 나오는 경우가 있는데, Keil 홈페이지에서 MDK v4 Legacy Support를 받아 설치하여 해결했습니다. 각각 지정이 끝나면 Apply를 눌러 설정을 저장합니다. 그 다음 µVision Project 항목도 우클릭하여 새 설정을 만듭니다. 이것도 마찬가지로 이클립스 프로젝트, µVision 프로젝트 파일, target을 지정한 뒤 Apply를 눌러 설정을 마칩니다. 이제 설정 창의 Debug 버튼을 누르거나 이클립스 도구 모음의 벌레 그림을 누르면 이클립스에서 µVision 프로젝트를 디버깅할 수 있습니다. 이클립스 사용이 익숙하신 분들은 지금까지의 과정을 거쳐 디버깅을 진행하시면 될 것입니다.


`Debug Configurations - device.jpg

C/C++ Application with µVision Debugger 항목 설정



`Debug Configurations - project.jpg

µVision Project 항목 설정



`eclipse debug.jpg

이제 이클립스에서 µVision 프로젝트 디버깅이 가능합니다!


 지금까지 ARM Cortex-M 사용을 위한 개발 환경 구축을 진행하였습니다. 개인적으로 개발 과정에서 환경 구축이 항상 가장 힘든 것 같습니다. 다음부터는 간단한 예제 위주로 Cortex-M의 기능을 하나씩 알아보고, ST에서 제공하는 HAL driver의 사용 위주로 프로그램을 작성하도록 해 보겠습니다.


  1. ARM Cortex-M 기초 알아보기 - 6. PWM 사용하기

    이번 글에서는 PWM을 이용하여 모터를 구동시켜보도록 하겠습니다. 먼저 STM32CubeMX를 이용하여 설정을 진행합니다. PWM을 사용하기 위해 타이머 TIM1의 Clock Source를 Internal Clock으로 설정해 줍니다. 그 후 사용하고 싶은 채널을 PWM Generation탭으로...
    Date2016.03.25 CategoryARM Cortex-M 기초 알아보기 By최호선 Views3874
    Read More
  2. ARM Cortex-M 기초 알아보기 - 5. ADC 사용하기

    이번에는 ADC와 관련하여 STM32F407VGT6 Discovery board에 연결된 Potentiometer의 ADC 값을 Debug Viewer를 통해 실시간으로 받아보도록 하겠습니다. (프로젝트 진행자가 변경된 이유로 인해 MCU가 Discovery board로 변경되었습니다.) STM32CubeMX의 Confi...
    Date2016.01.28 CategoryARM Cortex-M 기초 알아보기 By최호선 Views4348
    Read More
  3. ARM Cortex-M 기초 알아보기 - 4. GPIO 입력 제어하기

    이번에는 스위치를 통해 GPIO의 입력을 받아 LED를 켜고 끄는 예제를 다루어 보겠습니다. STM32CubeMX 설정은 지난번과 같지만 스위치 입력을 받기 위해 PA4 핀을 GPIO_Input으로 설정합니다. 핀 라벨은 GPIO_SW라고 붙였습니다. STM32CubeMX의 Configuration...
    Date2015.11.10 CategoryARM Cortex-M 기초 알아보기 By박정현 Views3822
    Read More
  4. ARM Cortex-M 기초 알아보기 - 3. GPIO 출력 제어하기

    이번에는 GPIO의 디지털 출력 제어를 통해 MCU계의 Hello World!인 LED 깜박이기를 해 보도록 하겠습니다. 내용 수준은 기존에 8bit MCU 사용이 익숙하신 분들에 맞춰 진행할 것입니다. 사용할 MCU는 Cortex-M0의 한 종류인 STM32F030F4P6입니다. STM32F030F4...
    Date2015.11.08 CategoryARM Cortex-M 기초 알아보기 By박정현 Views4081
    Read More
  5. ARM Cortex-M 기초 알아보기 - 2. 개발 환경 구축

    Cortex-M을 지원하는 IDE는 여러 종류가 있습니다. 그 중에서 저는 ARM에서 공식적으로 지원하는 Keil µVision IDE를 사용하려고 합니다. Keil µVision은 말 그대로 ARM에서 공식적으로 지원하기 때문입니다. 코어 설계사에서 직접 제공하는 IDE가 사후 지원...
    Date2015.10.26 CategoryARM Cortex-M 기초 알아보기 By박정현 Views6043
    Read More
  6. ARM Cortex-M 기초 알아보기 - 1. 개요

    자신이 원하는 대로 움직이는 기계나 회로 등을 만들 때는 MCU 만한 것이 없습니다. 국내에서는 2000년대 들어 8051, PIC, AVR 등을 통해 8bit MCU들이 퍼지기 시작하였고, 2010년 이후 Arduino의 등장을 통해 기존의 8bit MCU를 쉽게 사용할 수 없던 일반인...
    Date2015.10.26 CategoryARM Cortex-M 기초 알아보기 By박정현 Views6252
    Read More
  7. 2013-07-23 소모성 데시칸트 제습기

    2013년 여름에 시작한 프로젝트입니다. 정확한 시작일이 기억나지 않아 가지고 있는 자료 중에서 가장 오래된 것의 날짜를 선택하였습니다. 2013년 여름은 제가 지금 살고 있는 집으로 이사를 온 때인데, 집 주변이 광활한 논으로 둘러싸여 있습니다. 그 때문...
    Date2015.02.08 Category화학식 제습장치 By박정현 Views1425
    Read More
Board Pagination Prev 1 Next
/ 1