Cortex-M 아두이노 프로그래밍 Cortex-M 아두이노 프로그래밍 4/2/2016 Written by Steve AHN 1/23

Similar documents
아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

Install stm32cubemx and st-link utility

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

ISP and CodeVisionAVR C Compiler.hwp

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

RealDSP UT 프로그램 메뉴얼

(Microsoft PowerPoint - \270\266\300\314\305\251\267\316\304\250USB_Host_Device_\272\316\306\256\267\316\264\365\275\307\275\300_Philip.ppt)

Microsoft PowerPoint - chap01-C언어개요.pptx

SBR-100S User Manual

BY-FDP-4-70.hwp

(SW3704) Gingerbread Source Build & Working Guide

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

PowerPoint 프레젠테이션

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

C. KHU-EE xmega Board 에서는 Button 을 2 개만사용하기때문에 GPIO_PUSH_BUTTON_2 과 GPIO_PUSH_BUTTON_3 define 을 Comment 처리 한다. D. AT45DBX 도사용하지않기때문에 Comment 처리한다. E.

목 차 1. 드라이버 설치 설치환경 드라이버 설치 시 주의사항 USB 드라이버 파일 Windows XP에서 설치 Windows Vista / Windows 7에서 설치 Windows

IRISCard Anywhere 5

Mango-E-Toi Board Developer Manual

1

Microsoft Word ARM_ver2_0a.docx

임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Index 1. Intro Install Connect Scratch 1.4 (Offline Editor) Scratch 2.0 (Online Editor) Connect f

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

Microsoft PowerPoint - RPino-GOGO_datasheet.pptx

Windows 8에서 BioStar 1 설치하기

윈도 모바일 6.1을 OS로 사용하는 스마트폰(옴니아2 등)에서의 Tcl/Tk의 사용

Microsoft Word - MAI-ISP-STK500_매뉴얼_Ver25.docx

SIGIL 완벽입문

Microsoft Word - PEB08_USER_GUIDE.doc

1. 제품소개및설명 제품특징 그림. 개발장비사진 - AVR FLASH READ/WRITE 가능 - AVR ISP 프로그래밍방식을지원하는 ATmega8, ATmega16, ATmega32, ATmega64, ATmega128, ATmega 등다수의 AVR MC

PowerPoint 프레젠테이션

USB Manager 1

Motor Control Solution

Microsoft PowerPoint - es-arduino-lecture-03

슬라이드 1

<4D F736F F F696E74202D20325FBEC6B5CEC0CCB3EB20B1E2C3CABDC3C7E82E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

CAN-fly Quick Manual

특징 찾아보기 열쇠 없이 문을 열 수 있어요! 비밀번호 및 RF카드로도 문을 열 수 있습니다. 또한 비밀번호가 외부인에게 알려질 위험에 대비, 통제번호까지 입력해 둘 수 있어 더욱 안심하고 사용할 수 있습니다. 나만의 비밀번호 및 RF카드를 가질 수 있어요! 다수의 가

RealDSP UT 프로그램 메뉴얼

View Licenses and Services (customer)

Microsoft Word - EastSocket매뉴얼_ _.doc

Studuino소프트웨어 설치

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

온라인등록용 메뉴얼

Microsoft PowerPoint - SY-A3PSK-V1.pptx

USB-EK001 매뉴얼

Microsoft Word - Korean_뷰어 메뉴얼_공용_ADVR&SWi_.doc

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

구성품 - UMD 2808 모듈 - JTAG 커넥터 - 젂원 케이블 주요 특징 모듈의 부품화 : 고신뢰성의 DSP 모듈을 최적화된 시스템에 적용 용이 TMS320F2808 ZGMS - 100MHz 탑재 : 확장된 온도규격 (-40 도 ~ 125 도) 적용 Ultralo

6. 설치가시작되는동안 USB 드라이버가자동으로로드됩니다. USB 드라이버가성공적으로로드되면 Setup is starting( 설치가시작되는중 )... 화면이표시됩니다. 7. 화면지침에따라 Windows 7 설치를완료합니다. 방법 2: 수정된 Windows 7 ISO

Nordic Chipset BLE Test Application Note

*2008년1월호진짜

BC6HP Korean.ai

CZ-KETI-IOTG200

AN2629

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

*Revision History 날짜 내용 최초작성 Tel Fax [2] page

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft Word - Armjtag_문서1.doc

JARDUINO-UNO-BT 커넥터 / 스위치기능 종류 USB 커넥터리셋스위치 DC 전원잭업로드선택스위치 ISP 모드선택점퍼블루투스시리얼모듈전원 / 디지털포트 / 아날로그포트커넥터및 ISP 커넥터 기능 +5V 전원공급, 유선업로드기능누른상태에서전원을공급하면부트로더프로그

MACH3 Jog Pendant User Manual Draft Revision th of November 2015 By TECHDINE

Microsoft Word - PLC제어응용-2차시.doc

PowerPoint 프레젠테이션

JDK이클립스

1. 제품소개및특징 1.1 제품소개 < 그림 1.1> AVRISP MK2 USB 개발장비 AVR ISP(In System Programmer)MK2 USB 란 Atmel 사의 AVR 마이크로컨트롤러의내부플래쉬와 EEPROM 에프로그램메모리및데이터를써 (Write, Re

Microsoft Word - Ahram_ISP_V15_Manual_V20.doc


SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

2 PX-8000과 RM-8000/LM-8000등의 관련 제품은 시스템의 간편한 설치와 쉬운 운영에 대한 고급 기술을 제공합니다. 또한 뛰어난 확장성으로 사용자가 요구하는 시스템을 손쉽게 구현할 수 있습니다. 메인컨트롤러인 PX-8000의 BGM입력소스를 8개의 로컬지

Microsoft Word - src.doc

ThinkVantage Fingerprint Software

Oracle VM VirtualBox 설치 VirtualBox에서 가상머신 설치 가상머신에 Ubuntu 설치

<4D F736F F D20B0B3B9DFC8AFB0E65FB4D9BFEEB7CEB5E55FB5F0B9F6B1EBBCB3C1A42E646F63>

ez-shv manual

Microsoft Word doc

JMOD : ATmega128 기본모듈 사용자설명서 제이씨넷

TITLE: Education LK Development Team Status S/N Revision V0.1 Date 2011 /08/09 Doc LK임베디드 LK-STM32-M Manual ST-STM32F 모듈매뉴얼 (Model: LK-STM32-M V01) WW

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가

USBISPV3.0(071112).hwp

고객 카드

설치 순서 Windows 98 SE/Me/2000/XP 1 PC를 켜고 Windows를 시작합니다. 아직 컴퓨터에 프린터를 연결하지 마십시오. 2 PC에 P-S100 CD-ROM(프 린터 드라이버)을 삽입합니다. 3 설치 프로그램을 시작합니다. q CD-ROM의 PS1

STM32F2xx 시리즈의특성 Core: ARM 32-bit Cortex -M3 CPU with Adaptive real-time accelerator (ARTAccelerator ) allowing 0-wait state execution performance fro

: AA ( ) TV : ios ( ).. 2


비디오 / 그래픽 아답터 네트워크 만약에 ArcGolbe를 사용하는 경우, 추가적인 디스크 공간 필요. ArcGlobe는 캐시파일을 생성하여 사용 24 비트 그래픽 가속기 Oepn GL 2.0 이상을 지원하는 비디오카드 최소 64 MB 이고 256 MB 이상을 메모리

Microsoft PowerPoint - USB다운로더PC연결.pptx

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot)

목차 1. 머리말 PCL 6045BL -EVK 형상 제품제원 3.1 동작제원 구성 H/W Block Diagram Connector 구성 Connector Pin 구성 6.1 PO

슬라이드 제목 없음

DE1-SoC Board

2 Mitsubishi FX Series Computer Link MITSUBISHI FX SERIES COMPUTER LINK 시스템구성 시스템설정 사용예 사용예 사용예

슬라이드 1

MF Driver Installation Guide

Transcription:

4/2/2016 Written by Steve AHN 1/23

1, Arduino의 개발환경 1-1, 아두이노 다운로드 아두이노는 소스 공개형 전자개발 플랫폼으로써 누구나 쉽게 사용할 수있는 인터페이스를 제공함으로 써, 다양한 프로젝트를 쉽게 개발하게 하기 위하여 만들어 졌다. 아두이노에서는 전용 ISE(Integrated Software Environment)를 제공하는데, 이를 통하여 다양한 종류의 아두이노 보드를 사용할 수 있다. 아두이노 전용 프로그램은 아두이노 사이트에서 무료로 다운로드 할 수 있으며, 아래 링크를 이용하여 다 운로드 할수 있다. https://www.arduino.cc/en/main/software 이 글을 작성하는 현재 사용 버전은 Arduino1.6.5 이다. Cotex-M CPU를 아두이노에서 프로그래밍 하기 위해서는 Arduino1.6.5버전을 사용해야하며, 그 이후의 버전은 링킹 문제가 발생한다. 차후 아두이노에서 이 문제가 해결되면 그때 사용해야 한다. 1-2, 아두이노 설치 다운로드한 프로그램을 실행시켜 아두이노를 설치한다. [그림 1] 아두이노 설치 화면 [그림2] 아두이노 설치 완료 2/23

설치는 간단히 라이센스에 동의 하는 것으로 시작되며, 설치가 완료되면 바탕화면의 아두이노 바로가기 아이콘을 통해서 실행하면 된다. [그림 3] 아두이노 실행 1-3, STM32-M 개발환경 설정 아두이노에서 STM32-M3 개발환경을 추가하기 위해 다음과 같이 보드 매니저를 이용하여 STM32 기반 환경을 추가로 설치한다. [그림 4] 보드 매니저 구동 3/23

아두이노 풀다운 메뉴의 툴->보드->보드매니저 를 선택하자. 보드 매니저에는 추가적으로 Cortex M0, M3외에 10여종의 다양한 개발 환경을 제시하고 있는데, 우리가 할것은 Cortex-M3/M4 이므로 그것을 선택하여 설치하면 된다. [그림 5] SAM Boards (32 bits ARM Cortex-M3) 선택 설치가 완료되면 32비트 컴파일 환경이 구성된 셈이다. 그러나 일반 Cortex-MX개발환경을 추가하려면 이외에 추가적인 조치가 필요한데, 온라인을 통해서 개 발환경을 받아올 수 있다. 다음 링크에서 Zip 파일을 다운로드 하자 https://github.com/rogerclarkmelbourne/arduino_stm32/archive/master.zip 로저 클락이란 개발자가 배포한 자료인데, 아두이노에 다양한 일반적인 Cortex-M0/M3/M4 개발환경을 추가할 수 있게 해준다. 압축을 해제하면 Arduino_STM32-master 란 폴더가 생성되며, 이 폴더를 다음의 경로에 복사해 넣는다. 경로 : My Documents/Arduino/hardware 내문서 Arduino 에 들어가 보면 아무 것도 없는 경우가 있는데, 처음 설치한 필자의 컴퓨터 역시 비어 있었다. 이런 경우에는 hardware 폴더를 새로 만들어주고 복사하면 된다. 4/23

[그림 6] master 파일 복사 이제 아두이노를 다시 실행하여 툴->보드 를 선택하면 다양한 개발 보드가 추가된것을 확인 할 수 있다. [그리 7] 추가된 개발 보드 추가된 환경은 Cortex -M0, Cortex-M3, Cortex-M4 등 거의 모든 종류의 low-mid end 급 Cortex 칩을 지 원한다. 5/23

본 문서는 이 중에서 Cortex-M3 위주로 다양한 개발 환경을 구축하고 실제로 활용하는 방법에 대하여 설 명한다. Cortex-M3는 기존의 maple 보드의 변형인 Generic Stm32F10X 시리즈를 이용하는 방법에 대해 다루고, 다양한 다운로드 환경을 설명하겠다. 2, 개발 보드의 소개 2-1, STM32F103 보드 본문서에서 사용하는 보드는 STM32F103 개발보드로써, 두가지 제품이 있는데 그 두제품을 소개하고 타겟으로 진행하기로 한다. Stm32F103 UNO Link Stm32F103Mini Link2 [그림 8] STM32F103 보드 2종 STM32 개발보드는 현재 2가지 형태가 있는데, UNO 보드에는 추가 전원 입력및 Iot 제어를 위한 무선모 듈 커넥터가 배치되어 있다. 테크다인의 Cortex-M3 유사한 다른 보드에 비해 몇가지 장점이 있는데, 우선 두 보드는 기본적으로 USB2Serial 젠더가 내장되어 있어서, 별도의 시리얼 통신 링크가 필요없다. 두 번째로는 두 보드는 USB 젠더외에 칩에 내장된 USB 코어및 USB2Serial 젠더를 옵션핀을 이용하여 선택할 수 있다. 세번째로는 ST-Link 단자를 제공하기 때문에 STL-Link를 이용한 개발방법도 가능하다. 3, CorteX-M3 연결하기 3-1, 보드의 구성 [그림9] STM32F103 Mini Generic B/D 구성도 6/23

[그림 9] 에 STM32F103 Generic 보드의 구성을 보였다. 이보드의 회로도는 다음 링크를 통해 받을 수 있다. Generic Board 회로도 아래는 STM32F103 UNO Board의 구성을 보였다. [그림 10] STM32F103 UNO Board 미니보드와의 차이점은 UNO보드에는 IoT 개발을 위한 Wifi 모듈 단자가 내장되어 있어서, IoT모듈인 TWM02 모듈을 바로 꼽아 프로그래밍을 할 수 있다. 3-2, 아두이노와 연결 하기 STM32F103보드를 연결하기 전에, 보드 커넥터 중 CP2102 / ST_USB 옵션핀을 CP2102 쪽으로 설정 해야한다. 보드상에 CP2102 라고 쓰여진 쪽으로 2개 점퍼를 모두 꼽는다. 반대쪽인 ST 쪽으로 꼽으면 CortexM3 칩의 USB 포트로 직접 연결된다. 우리는 아두이노에서 시리얼 포트를 사용할 예정이기 때문에 일단, CP2102 쪽으로 테스트 한다. USB 포트의 사용법은 그 이후에 다시 별도로 다루기로 하겠다. 이제 보드를 USB 포트에 꼽아보자. STM32F103 보드의 경우 내부에 USB2Serial 젠더인 CP2102 칩이 내장 되어 있어서, 시리얼 포트가 자동으로 생성된다. 만일 장치 드라이버가 설치 되어 있지 않으면 장치드라이버를 설치해야 하는데, 윈도우 에서 자동 검색하 거나 혹 자동 설치가 안되면 Silicon Labs 사에서 VCP 드라이버를 다운로드 해서 설치해야 한다. 7/23

VCP 드라이버는 다음 링크를 통해서 할 수 있다. https://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers.aspx 드라이버가 활성화 되면, 시리얼 포트가 생성 된걸 볼 수 있다. 이제 아두이노를 실행하자. 아두이노 메뉴에서 툴 보드 Generic STM32F103C Series 를 선택한다. [그림 11] 아두이노 보드 선택 보드 선택후 다시 툴 보드 메뉴를 선택하면 먼가 새로운 메뉴가 추가된걸 볼 수 있다. 1, Varient 2, Upload Method 3, 포트 Varient는 칩셋의 메모리 크기를 선정한다. 우리는 20KRAM, 64K Flash로 작업을 한다. 그리고 업로드 방식은, 시리얼 방식을 사용할 예정이기 때문에 Serial 로 설정한다. 마지막으로 포트는 보드를 USB 젠더에서 잡힌 시리얼 포트를 지정한다. ** 보드 설정 확인 ** 이제 프로그램 테스트 하기전에 한가지 더 확인할 것이 있는데, STM32F103 Mini 보드의 Boot 모드 이다. ST Electronics 사에서 만든 Cortex M 칩셋들은, 약 3가지의 부트 모드를 지원하는데 다음과 같다. Boot1 Boo0 = X0 Boot1 Boot0= 01 Boot1 Boot0= 11 : main Flash Memory 에서 시작, X = don't care : System Memory Boot : Embedded SRAM Boot 8/23

즉 Boot1 = 0 인 상태에서, Boot0 핀이 0 이면, 일반 내부 플래쉬 프로그램이 실행되고, 만일 Boot0 = 1이면 시스템 내장 부트로더로 동작된다. 시스템 내장 부트로더는 칩내부의 시리얼 포트 1 번으로 전송되는 데이터를 main Flash 영역으로 라이팅 해주고 전송및 라이팅이 완료되면, main Flash 영역으로 분기해서 다운로드 된 프로그램을 실행 하게 된다. 즉 우리는 시리얼 전송을 사용할 계획이기 때문에, BOOT1 = 0, BOOT0 = 1로 점퍼핀을 셋팅하고 시작해 야 만 한다. 보드에 B1 = 0 (G)쪽으로, B0 = 1 (B0) 쪽으로 설정하자. 보드 설정이 끝났으면, 이제 Reset 버튼을 눌러서 보드의 부트 모드를 재실행 시킨다. 3-3, 예제 프로그램 테스트 이제 아두이노에서 예제를 하나 불러오자. 다음 경로에서 예제를 하나 불러온다. [그림 12] Blink 예제 Documents\Arduino\hardware\Arduino_STM32-master\examples\Digital\Blink 예제는 상기 [그림 13] 과 같이 스케치 북 메뉴에서 직접 찾아들어갈 수 있다. 간단한 LED Blink 예제이다. 9/23

[그림 13] Blink 예제 일단 예제를 컴파일 하기전에 약간 수정을 해야 하는데, 수정을 하기전에 회로도를 잠깐 살펴보자. 위 Blink 예제에는 디지털 출력 핀으로 PB1 을 사용하였는데, 이는 Maple 보드를 기준으로 작성되어 있 어서 이다. [그림 14] LED 회로도 STM32F103 보드의 회로도에는 LED 가 PC13 번 핀에 연결 된걸 확인할 수 있다. 따라서 프로그램을 PC13으로 수정하자. 10/23

[그림 15] 컴파일 및 다운로드 수정완료 후, 업로드 버튼을 누르면, [그림15] 같이 컴파일 후 자동으로 보드에 바이너리 파일을 업로드 해준다. 업로드가 완료되면 바로 보드의 LED 가 깜박 거리는걸 확인할 수 있을것이다. 위 컴파일 과정이나 다운로드 과정의 메시지가 안보이는 경우, 파일 환경설정 에서 동작중 자세한 출력보이기 옵션의 컴파일 항목과 업로드 항목을 모두 체크 하면 된다. [그림 16] 환경설정 메시지 보이기 옵션 11/23

3-4, 설정을 좀더 들여다 보자 우리가 사용하는 STM32F_Master 파일 디렉토리를 좀 들여다 보자. \Documents\Arduino\hardware\Arduino_STM32-master\STM32F1\variants\generic_stm32f103c 경로의 디렉토리에 보면 board.cpp 파일이 보일것이다. 마찬가지로, 그디렉토리 내에있는 board 디렉토리안에는 board.h 파일이 존재하는데, 이는 STM32F1 시리지 칩들의 핀정의 프로그램이 들어있다. 예를들어 board.h 에 정의 된 enum 파일을 들여다 보면, enum { PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA11, PA12, PA13,PA14,PA15, PB0, PB1, PB2, PB3, PB4, PB5, PB6, PB7, PB8, PB9, PB10, PB11, PB12, PB13,PB14,PB15, PC13, PC14,PC15 }; 모든 핀이 enumeration 되어 있는데, 현재 우리가 사용한 PC13의 경우 33번째 정의 되어 있기 때문에 핀 번호가 0부터 시작하므로 32 번이 된다. 즉 아두이노 보드상의 핀번호,혹은 포트 번호중 하나만 알면 제어가 가능한데, 위의 enum 파일을 참조하 면 핀번호와 포트 번호가 어떻게 정의 되어 있는지 한번에 알 수 있다. 실례로 우리가 방금 테스트한 프로그램을 위 enum 파일을 기초로 비꿔보면 PC13 대신 숫자 32를 사용 해도 무방하다. 즉 프로그램을 아래와 같이 바꾸어서 실험해 보자, 역시 동일한 결과를 얻을 수 있다. // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin PB1 as an output. pinmode(32, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalwrite(32, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalwrite(32, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } 마찬가지로 다른 보드 정의 파일들을 들여다보면 각각의 보드별로 정확한 핀맵데이터를 얻어 활용할 수 있으니 잘 활용하도록 하자. 이번에는 \Documents\Arduino\hardware\Arduino_STM32-master\STM32F1 파일을 좀 들여다 보자. Boards.txt와 platform.txt 파일을 볼수 있는데, 이 두파일에 대해 간단히 살펴보고 가도록 하자. 아두이노 버전 1.53 이후에는 아두이노를 유저임의대로 커스터마이징 하기위한 표준이 제정되었는데, 커스터 마이징 하기위해 아두이노에서는 3가지 파일을 통해 스크립트 형태의 파일을 지원해준다. 그파일은 각각 platform.txt, boards.txt, programmers.txt 파일을 통해 사용자 정의 보드를 확장할 수 있다. 그 파일의 역활은 다음과 같다. 12/23

Platform.txt: CPU 구조에 대한 정의를 포함한다. 예를들면 컴파일러, 빌드시 매개변수, 업로드 시 이용할 툴 등등.. boards.txt: 보드에 관한 정의된 내용을 포함한다. 보드 이름, 파일 빌드에 관한 매개변수와 스케치 업드및 기타 등등.. programmers.txt: 외부 프로그래머에 대한 정의를 가지고 있다. (부트로더를 굽거나, 깡통 CPU에 스케치 를 써넣을때 사용하는 방법에 대한 내용.) 실제 유저 확장 보드의 추가는 기존 빌드 환경이 존재할 경우 매우 간단한 스크립트로 메뉴내용을 추가할 수 있다. 참고로 STM32의 boards.txt.침 platform.txf를 참고해도 간단히 유저정의 보드를 만들 수 있을것 이다. 위에서 보았듯이 3가지 파일은 반드시 {ARDUINO}/hardware/ 에 정의되어야 하고, 이에 관한 사항은 다 음링크에 자세히 기술되어 있다. 차후 유저정의 보드를 추가할때 참고하기 바란다. https://github.com/arduino/arduino/wiki/arduino-ide-1.5-3rd-party-hardware-specification 3-5, 시리얼 출력 테스트 이번엔 간단한 시리얼 출력 테스트를 해보자. 우리는 위에서 통신포트를 통해 컴파일된 바이너리 파일을 다운로드 해보았는데, 시리얼 통신 포트는 다운로드이후 바로 통신포트로 사용할 수 있다. STM32F103C 시리즈는 총 3개의 UART 통신을 제공하는데, 포트 1번은 4.5Mbps, 나머지 2포트는 2.5Mbps의 속도를 제공해 준다. 우리가 사용하는 Gemeric STM 보드는 CP2102를 통해 UART1 을 그리고 전용 핀을 통해 UART2를 사 용 가능하고, 확장핀 40핀 을 통해 UART3 까지 이용할 수있다. 이제 간단한 시리얼 포트 출력을 확인해 보자. 소스코드에 다음과 같이 추가해 보자. // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin PB1 as an output. pinmode(pc13, OUTPUT); Serial.begin(115200); Serial2.begin(9600); Serial.println("Serial1 started"); } // the loop function runs over and over again forever void loop() { digitalwrite(pc13, HIGH); // turn the LED on (HIGH is the voltage level) Serial.println("On"); Serial2.println("On"); delay(1000); // wait for a second digitalwrite(pc13, LOW); // turn the LED off by making the voltage LOW Serial.println("Off"); Serial2.println("Off"); delay(1000); // wait for a second } 13/23

이제 보드의 Reset 버튼을 누르고 다운로드하자. 다운로드가 완료되면, 아두이노 메뉴상의 도구->시리얼 모니터 를 실행 시키자. 시리얼 모니터는 현재 아두이노 다운로드에 설정한 COM3가 기본으로 설정되어 있다. 현재 프로그램 상 에서 두개의 시리얼 통신을 초기화 하였는데, Serial1 이 COM3로 사용중이고, Serial2는 별도의 핀으로 되어있기 때문에 Serial1은 간단히 모니터링이 가능하고, Serial2는 별도로 USB2Serial 젠더를 통해 모 니터링 할 수 있다. 시리얼 모니터가 실행되면 통신 baudrate을 115200에 맞추자. [그림 17] 시리얼 모니터 두 개의 포트 모두 이상없이 통신이 되는것을 확인할 수 있을것이다. 이로써 간단한 프로그램 테스트를 통해 컴파일및 다운로드 환경을 살펴보았다. 이번에는 DFU 방식의 다운로드를 활용해 보도록 하겠다. 3-6, 부트로더 다운로드 ST 마이크로 사 에서는 CPU다운로드를 크게 3가지를 지원하는데, 방금 실험해본 시리얼 다운로드 방식 그리고 USB 포트를 통한 DFU 다운로드 방식, 마지막으로 전용 디버깅 툴을 통한 ST Link 다운로드 방식 이다. DFU 방식에 대한 다운로드 프로코콜은 별도의 문서에 정의되어 있으므로 필요시 다음링크를 참조하기 바란다. http://www.st.com/web/en/resource/technical/document/application_note/cd00264379.pdf 처음 메이플을 만들당시, 메이플에서는 STM32F10X 시리즈의 자체 내장된 USB 포트를 이용해서 USB2Serial 젠더를 구성해서 여러가지 모니터링 용도로 설계를 하였는데, 메이플은 이 포트를 단순히 시리얼 포트 뿐만 아니라, USB 포트를 통해 DFU 다운로드를 동시에 하길 원했었다. 14/23

이방식은 약간의 문제가 있었는데, 일단 UART 다운로드가 아닌 USB DFU 방식을 통한 다운로드는 CPU 내부의 부트로더 대신, 별도의 DFU 프로토콜을 지원하는 부트로더가 필요하다. 이 부트로더를 먼저 칩내부에 써놓고, 이부트로더를 통해 유저가 컴파일한 바이너리 파일을 다시 다운로 드 해야 하는데, 처음에 부트로더만 있을 경우는 그래서 STM32 디바이스가 DFU 장치로 표시된다. 일단 이 상태에서 이미지 다운로드를 하면, 다운로드한 이미지의 시작번지로 프로그램을 분기 시킨다. 그리고 분기전에 부트로더는 내부 USB 포트를 DFU 디바이스에서 USB2Serial로 다시 초기화 시켜서 USB 포트를 통해 바로 시리얼 통신이 가능하게 만들었다. (보통 USB Enumeration 과정에 보면, USB Master 쪽에 D+/-신호는 매우 높은 저항으로 Pull-Down 상태 에 있는데, 회도상에서 D+에 1.5K 옴을 달면 High Speed, D-에 1.5K 옴을 달면 Low Speed USB 로 초 기화를 시작한다. 일단 D+신호가 0 볼트가 되면, USB는 장치가 제거됬다고 판단하고, 다시 Enumeration 대기 상태가 되 는데, 이때 다시 D+를 로직 1로 만들면 새장치가 꼽힌걸로 인식해서, 다시 Enumeration 상태로 진입한 다.) 초기 CPU가 Reset 되었을때, maple 은 DFU 상태의 부트로더로 진입해서, 새 다운로드가 진행되는지 판단하고, 있으면 USER 프로그램을 다운로드 한 후 USB 포트를 초기화 해서 실행프로그램으로 분기 한다. 즉 DFU 에서 USB2Serial 젠더로 기능변경을 마친후 메인 프로그램을 콜하게 된다. USER 프로그램에선, USB 포트가 리셋 되어 새로 USB2Serial 포트로 재설정 하는 일련의 복잡한 과정 을 반복하는 것이다. 그런데 우리가 사용하는 Gemeric B/D 에는 이 USB 포트의 리셋기능이 없기 때문에, 일단 전원이 켜지면 USB DFU 프로토콜에서 USER 프로그램으로 진입시 이 포트를 초기화 할 수가 없게 된다. 그래서 부트로더를 일부 수정해서 다운로드완료후 D+ 단자를 GPIO모드로 만들어서 강제로 0으로 만들 어서 USB 포트를 초기화 한후 메인 프로그램으로 분기하는 방식으로 바꾸게 되었다. 일단 부트로더를 다운로드 해보자. 아래 링크에 보명 다양한 부트로더 파일을 발견할 수가 있다. https://github.com/rogerclarkmelbourne/stm32duino-bootloader/tree/master/stm32f1/binaries 우리는 PC13을 테스트 LED로 쓰기 때문에 PC13 바이너리를 받아오면 된다. 이 바이너리를 먼저 다운로드 해야하는데, 이를 위해 ST 마이크로 사에서 제공하는 Flash Loader라는 프 로그램이 필요하다. 다음 링크의 제일 하단에서 프로그램을 받아서 설치하자. http://www.st.com/web/en/catalog/tools/pf257525 설치가 완료되었으면 일단 실행하자. 15/23

[그림 18] 플래쉬 로더 셋팅 [그림 19] 칩 자동 인식 현재 보드의 UART상태를 설정하고 넘어가자. 이때 보드는 반드시 리셋 한 상태로 하고 다음으로 넘어가 자. 자동으로 보드를 검색하게 된다. 이제 다운로드할 바이너리 파일을 찾아서 다운로드 하면 된다. [그림20] 바이너리 파일 지정 3-7. DFU 드라이버 설치 및 보드 설정변경 다운로드가 완료되었으면, 이제 USB2 Serial 젠더가 아니라, 바로 CPU의 USB 포트를 사용할 수 있다. 일단 보드의 점퍼를 변경하자. [그림 20] 점퍼 설정 16/23

1. 현재 설정된 USB 포트 설정을 CP2102에서 ST 쪽으로 설정한다. 2. BOOT Mode는 두 핀 모두 0으로 설정해서 일반 프로그램 실행 모드로 설정한다. 보드의 점퍼설정이 끝났으면 연결 전에 드라이버를 설치해야 한다 \Documents\Arduino\hardware\Arduino_STM32-master\drivers\win 폴더 아래에 보면 install_drivers.bat 화일이 있는데, 관리자 권한으로 실행 시키자. @echo off echo Installing Maple DFU driver... "%~dp0wdi-simple" --vid 0 1EAF --pid 0 0003 --type 1 --name "Maple DFU" --dest "%~dp0mapledfu" echo. echo Installing Maple Serial driver... "%~dp0wdi-simple" --vid 0 1EAF --pid 0x0004 --type 3 --name "Maple Serial" --dest "%~dp0maple-serial" echo. pause 아주 간단한 배치 화일인데 Vid/pid 파일을 가지고 있는데 설치하고 간단한 이름으로 맵핑 시키는 역할만 한다. 이제 설치가 끝났으면 보드를 USB 포트에 연결하자. 보드가 연결되면, 새장치를 연결했기 때문에 새로운 디바이스를 찾아서, 장치드라이버를 설치하게된다. 설치된 장치는 장치관리자에서 찾을 수 있다. [그림 21] 장치 관리자 장치관리자에 MapleDFU 로 잡혀있으면 정상적으로 설치가 된것이다. 이제 다시 아두이노를 실행하자. 이전까지는 USB2Serial 로 작업했지만 이제는 직접 칩내부의 USB 장치 를 이용하여 프로그램을 한다. 이제 Upload 방식을 기존의 Serial 에서 USB DFU방식으로 바꾼다. 메뉴상에서 STM32duino bootloader를 선택하면 된다. 17/23

[그림 22] bootloader에 의한 다운로드 이제 아까 프로그램을 업로드 해보자. 업로드 버튼을 누르면 컴파일과 동시에 라이팅이 시작된다. 일반 실행모드에서 부트로더가 실행된 상태에서, 부트로더를 통해 업로드를 하는 것이기 때문에 더이상 점퍼셋팅을 바꿀 필요가 없다. 업로드가 정상적으로 완료되면 다음과 같은 메시지를 확인할수 있다. [그림 23] 아두이노 업로드 메시지 그리고 이때 딩글 딩글 하는 USB 관련 경고음을 들을 것이다. 즉 DFU 디바이스를 리셋하고 새로운 시리 얼 디바이스를 업로드 하는 소리이다. 업로드가 끝나면 부트로더는 D+를 0볼트로 만들고 USB를 리셋 시 킨후, 바로 새로운 PID 로 시리얼 디바이스를 등록시킨다. 그에 따라 장치드라이버가 리셋되고, 시리얼 장치가 올라오는 소리가 2번 들리면 정상이다. 18/23

자 이제 새 장치가 올라왔으면, 장치관리자에서 그 장치를 확인할 수 있을 것이다. 장치 관리자를 열어서 확인해 보자. 기존의 Maple DFU 장치가 사라지고, 이제 시리얼 포트가 하나 생성되었음을 확인할 수있다. [그림 24] 시리얼 포트 이제 새 포트로 모니터링을 해보자. 새포트는 COM4에 잡혀있으니. 아두이노의 시리얼 모니터를 COM4 로 바꿔서 실행해보자.. [그림 25] 시리얼 모니터 정상적으로 시리얼 포트 1번이 동작하는것을 확인할 수 있다. 여기서 주의할점은, 기존 젠더를 사용할때는 아두이노에서 사용한 Serial이 CPU의 UART1을 사용하였 는데, CPU내부의 USB를 통해 Serial 포트를 생성시키면, 아두이노에선 자동으로 USB 포트의 가상 포트 를 Serial로 맵핑시킨다. 즉 기존의 내부 UART1은 일반 GPIO기능으로 사용하고 UART로 사용하지 않는다. 이제 젠더 칩 없이 CPU내부의 USB 포트를 통해 다운로드하고 시리얼 포트를 새로 인식 시켜서 프로그 램 테스트를 해보았다. 단 처음 부트로터를 다운로드 할때는, 한번은 시리얼 포트를 통해서 다운로드 해 야한다. 4. Furtuer Study 차후 이와 관련하여 더 해보고 싶은 분은, 위에 잠깐 언급 하였듯이 1. 사용자 정의 장치를 만드는 작업과 2. 부트로더를 수정하는 방법을 실습해 보길 권장한다. 부트로더는 오픈소스로 공개되어 있기 때문에, 간단한 수정만으로 장치를 변경할 수 있다. 다음 링크에서 관련 자료를 참고하기 바란다. https://github.com/rogerclarkmelbourne/stm32duino-bootloader 다음 링크는 STM32 Generic 보드 관련 아두이노 포럼이다. 좋은 자료가 많으니 참고하면 된다. http://www.stm32duino.com/viewforum.php?f=28&sid=af769d8c1db4c63060ae0670ea82a615 19/23

5. Schematic & Dimensions [그림 26] STM32F103 MINI 회로도 20/23

[그림 27] STM32F103 UNO 회로도 21/23

[그림 28] STM32F MINI Dimension [그림 28] STM32F UNO Dimension 22/23

Note : 23/23