1) mbed USB 가상 시리얼 통신
드라이버 설치
mbed 사이트(http://mbed.org/handbook/Windows-serial-configuration)에 접속하여 Download latest
driver 의 드라이버를 다운로드하여 설치한다. 설치는 디폴드
옵션으로만 설정해도 된다.
2) 터미널 프로그램
설치
접속 설정 : File >> New Connection... 을 선택하면 아래와
같은 접속 설정 화면이 나오고, 이중 Serial 을 선택한 후, mbed Serial Port를 선택하자.
터미널 옵션 설정 : Setup >> Terminal... 을 선택하면 아래와 같은 옵션 설정 화면이 나올 것이다. 이 중 Receive 를 LF 로 설정해주자. LF는 Line Feed 이라는 뜻으로, 16진수 아스키 코드 0x0A, 캐릭터 문자로서는 '/n' = new line 에 해당되는 데이타이다. 즉, PC가 mbed 로 부터 수신받은 데이타 중 0x0A 가 있다면, 커서를 현재 행의 다음 행으로 바꿔주는 기능을 하게된다. 참고로, CR은 Carriage Return 이라는 뜻으로, 16진수 아스키 코드 0x0D, 캐릭터 문자로서는 '/r' = return 에 해당되는 데이타이다. 기능으로는 커서를 현재 행의 맨 좌측으로 옮기기를 수행하게 된다. 참고로, mbed의 시리얼 통신은 기본적으로 9600 baud,8 bits, 1 stop bit,
no parity 로 설정되어 있다. 이는 프로그램에서 수정 가능하다.
이상으로 mbed의 USB 가상 시리얼 포트로 PC와의 통신하기 위한 설정이 모두 끝났다. 다음은
직접 통신 프로그램을 작성해보고, 테스트 해보도록 하자.
mbed 소스작성, 컴파일, 업로드와 관련해서는 이전 강좌에서 설명하였기에 넘어가고, 바로 소스를
보도록 하자.
#include "mbed.h"
Serial pc(USBTX, USBRX); // tx, rx int main() { int i=0; while(1) { pc.printf("Hello World![%d]\n",i++); if(i>99) i=0; } } 간단히 테스트 목적으로 터미널창에 "Hello World![%d]\n" 를 뿌리도록 했다. %d 는
i 를 나태내며, 이 i 는 0부터 99까지 반복하게 된다. 그리고 \n 는 앞서 설명한것과 같이 터미널창에서 새로운 라인으로 옮기기 위해서
붙여줬다.
이렇게 작성한 프로그램을 컴파일 하고, 실행 파일을 다운로드 받아 mbed USB 드라이버에
옮겨주자. 그리고 PC에는 미리 설정해준 터미널 프로그램인 테라텀을 실행해두고, mbed의 리셋 스위치를 누르면 아래와 화면과 같이 출력되어
표시됨을 확인 할 수 있을 것이다.
이대로 끝나면 조금 아쉬운 느낌이 있어서 한가지 더 해보도록 하자. 좀 전의 테스트는 mbed
-> PC 라는 단방향 통신만 하였기에 이번에는 mbed <-> PC 양방향으로 해보도록 하자. 소스는 아래와 같으며, 처음에
조작 메뉴를 PC로 보내게 되며, PC의 1번 숫자키를 누르면 mbed의 첫번재 LED가 켜지고, 2번 숫자키를 누르면 두번째 LED가 켜지는
프로그램이다. 같은 방법으로 3번, 4번 숫자기도 마찬가지이며, 0번 숫자키를 누르면 모든 LED 가 꺼지는 프로그램이다. 아무리 쉬운
예제라고는 해도 눈으로 보면 소용없으니 꼭 테스트 해보기 바란다. (※ 버튼을 누를때는 테라텀이 활성화 되어 있고, 테라텀 터미널 창에서 눌러야
한다.)
#include
"mbed.h" Serial pc(USBTX, USBRX); // tx, rx PwmOut led1(LED1); PwmOut led2(LED2); PwmOut led3(LED3); PwmOut led4(LED4); int main() { pc.printf("Press '1' On LED1\n"); pc.printf("Press '2' On LED2\n"); pc.printf("Press '3' On LED3\n"); pc.printf("Press '4' On LED4\n"); pc.printf("Press '0' Off All LED\n"); while(1) { char c = pc.getc(); if(c == '1') led1 = 1; if(c == '2') led2 = 1; if(c == '3') led3 = 1; if(c == '4') led4 = 1; if(c == '0') { led1 = 0; led2 = 0; led3 = 0; led4 = 0; } } } 터미널 창은 아래와 같은 조작 메뉴가 표시된다.
작성자: 표윤석(http://robotpilot.net/) |