架构师_程序员_码农网

사용자 이름 비밀번호 검색
등록하기

QQ登录

시작하기 위한 한 단계

검색
조회:5250|댓글: 0
打印 上一主题 下一主题

[转]지그비 여행(5): 중요한 CC2430 기반 실습 - 직렬 포트 통신

[링크 복사]
직접 리프트 跳转到指定楼层
건물 소유주
게시됨 : 2014-10-30 23:18:18|작성자만 보기回帖奖励| 역방향찾아보기| 읽기 모드
I. 여유 공간 확보

  무선 센서 네트워크에서 CC2430은 수집된 데이터를 호스트 컴퓨터(즉, PC)로 전송하여 처리해야 하며, 동시에 호스트 컴퓨터는 제어 정보를 CC2430으로 전송해야 합니다. 이 모든 것은 둘 사이의 정보 전송과 분리할 수 없습니다. 이 섹션에서는 PC와 CC2430 간의 직렬 통신을 구현하는 방법을 배웁니다.

  CC2430에는 두 개의 직렬 통신 인터페이스 USART0과 USART1이 있으며, 각 직렬 포트에는 UART (비동기) 모드, SPI (동기) 모드의 두 가지 모드가 있습니다(이 섹션에서는 UART 모드만 다룹니다).

둘째, 직렬 포트 통신 실험(1) 실험 소개

  개발 보드와 PC 간의 통신을 달성합니다: PC가 특정 문자열을 CC2430에 보내고, CC2430은 이 문자열을 수신한 후 PC에 반환합니다.

(2) 실험 준비

  코드 작성을 시작하기 전에 하드웨어 기능을 설정해야 합니다: 올바른 연결 + USB-시리얼 드라이버 설치.

  하드웨어 연결은 두 가지가 필요합니다:

     CC2430 개발 보드의 JTAG 포트 → 디버거 → PC의 USB 포트 (디버깅 및 프로그램 다운로드용)

     CC2430 개발 보드의 직렬 포트 → PC의 USB 포트 (PC와 CC2430 데이터 통신용)

  그런 다음 USB-시리얼 포트 드라이버를 설치해야 합니다( 다운로드 주소 ).

  시리얼 포트로 데이터를 전송하기 위해서는 시리얼 포트 디버깅 툴도 필요합니다( 다운로드 주소 ).

(3) 프로그램 흐름도







(
4) 실험 소스 코드 및 분석/* 실험 설명: UART0, 전송속도 115200bps, PC가 문자열을 CC2430으로 전송(@문자로 끝), CC2430이 문자열을 수신하여 반환*/#include unsigned char recv_buf[ 300 ] = {0};







u nsigned char recv_count = 0;/* 시스템 클럭 초기화-------------------------------------------------------*/void xtal_init( void ) { SLEEP &.
amp;= ~0x04; // both power upwhile (!
(SLEEP & 0x40 )); //크리스탈 오실레이터 켜고 안정 CLKCON &=~0x47; &.





nbsp; //select 32MHz 수정 발진기 SLEEP |=0x04; }/*UART0 통신 초기화-------------------------------------------------------*/void Uart0Init(

부호 없는 문자 StopBits, 부호 없는 문자 Parity) { PERCFG&=~0x01; &nbsp
; //선택적 위치 1번으로 UART0을 선택, 즉 RXD를 P0.2로, TXD를 P0.3으로 선택 P0SEL |=0x0C; &nbsp

U ART0 포트를 초기화하고, P0.2와 P0.3을 외부 장치 IO 포트로 설정합니다. U0CSR =0xC0;   //Set to UART0 port.


U ART 모드로 설정하고 수신기를 활성화합니다 U0GCR = 11; U0BAUD = 216; & nbsp;//Set UART0 포트, P0.2 및 P0.3을 외부 장치 IO 포트로 설정합니다.

U ART0 전송 속도를 115200bps로 설정하고, 왜 216과 11인지에대해서는 CC2430 중국어 매뉴얼을 참조하세요.



; U0UCR |= StopBits|Parity; //Set StopBits and Parity }/*UART0 send data----------------------------------------



- --------------*/void Uart0Send( unsigned char data) {while ( U0CSR&0x01 ); //데이터를 전송하는 동안 UART가 유휴 상태가 될때까지 기다립니다 .






nbsp;U0DBUF = data; }/*UART0SendString-------------------------------------------------------*/void Uart0SendString( unsigned char *s) { & nbsp;while (*s !




= 0 ) //Send 각 문자를 차례대로 문자열 s로 전송 Uart0Send(*s++); }/*UART0 accepts data-----------------------------------



- -------------------*/unsigned char Uart0Receive( void ) {unsigned char data;while (!

( U0CSR&0x04 )); //데이터가 수신되면 쿼리, 그렇지 않으면 계속 대기 data=U0DBUF;//수신된 데이터를 추출반환 데이터;&?






nbsp; }/* main function-------------------------------------------------------*/void main( void ) {




u nsigned char i,b; xtal_init(); Uart0Init(0x00, 0x00 ); //UART0 초기화, 1 스톱 비트 설정, 패리티 없음 &*/*! nbsp;Uart0SendString("@'로 끝나는 문자열을 입력하세요!





& quot;); recv_count =0;while( 1 ) {while ( 1 ) &( ...)

nbsp; { b = Uart0Receive()
UARTif (b== '@' ) break; //'@'가 수신되면, 루프에서 벗어나


루프, 출력 문자열 recv_buf[recv_count] = b;//'@'가 아니라면, 문자 배열에 문자를 계속 추가합니다 recv_buf[] & amp;.

nbsp; recv_count++; }for ( i=0; i<recv_count; i++)="" [colour="rgb(0," 136,=&&.


q uot;" 0)] ="" 출력 문자열[="" i][="" color] Uart0Send(recv_buf);
Uart0SendString ( ""); recv_count=0; &?


n bsp; //reset } }

먼저 USART0에 해당하는 I/O 포트를 구성합니다: PECFRG.0을 0으로 지워 UART0을 선택적 위치 1로 설정합니다(즉, RXD는 P0.2에 해당하고 TXD는 P0.3에 해당). 그런 다음 P0.2와 P0.3을 외부 장치 I/O로 구성한

다음 UART 모드를 선택하고 수신기를 활성화합니다.

그런

다음

USART0의 파라미터를 설정합니다: 전송 속도 115200, 패리티 없음, 정지 비트 1.

그런 다음 PC에 문자열을 보냅니다: '@' 로 끝나는 문자열을 입력하세요! 를 입력한 다음 while(1)을 사용하여 수신하는 모든 문자를 계속 시도합니다.

이 문자가 '@' 가 아니면 아직 입력이 끝나지 않았다는 의미이므로 이 문자를 문자 배열 recv_buf에 계속 추가하고, 이 문자가 정확히 '@' 이면 입력이 끝났다는 의미이므로 루프에서 벗어나 recv_buf의 각 문자를 순서대로 PC로 보내고 동시에 recv_count를 재설정합니다.

(5) 실험 결과

먼저 하드웨어 연결을 완료하고 직렬 포트를 엽니다

.

"Open Serial Port"를 클릭한 후 IAR 디버깅을 시작하고 프로그램을 실행하면

직렬 포트

디버거가 실행되는

것을 확인할 수 있습니다.

2011022316560420.jpg
직렬 디버깅 도구의 수신 상자에 예상 문자열이 표시됩니다:

그런 다음 직렬 디버깅 도구 하단의 보내기 텍스트 상자에 "

.

2011022316581688.jpg
H

ello"를 다음과 같이 입력합니다:

"보내기"를 클릭한 후 CC2430이

메시지를 회신하지 않는

이유가 궁금할 수 있습니다. "보내기"를 클릭한 후 CC2430이 입력한 내용을 반환하지 않는 이유는 @로 메시지를 끝내지 않았기 때문일 수 있습니다.

  

다시 "Zigbee!@"를 입력하고 "보내기"를 클릭하면 다음과 같은 결과가 표시됩니다:

2011022317013210.jpg
g

예상 내용만

"안녕 지그비!" 지금!

이 실험의 끝 ~

III. 결론

이번 글에서는 CC2430 개발 보드와 호스트 컴퓨터 통신에 대해 소개했습니다. 시리얼 통신의 기초를 다진 다음에는 ADC(아날로그-디지털 변환) 싱글 샘플링에 대해 알아보겠습니다. ADC를 사용하면 개발 보드에서 온도 센서의 값을 수집하고 직렬 포트를 통해 온도 값을 PC로 전송하여 표시할 수 있습니다.






이전: [반복] 지그비 여정 (4) : 몇 가지 중요한 CC2430 기본 실험 - 타이머 인터럽트
다음: [ 반복 ] 지그비 여정 (6): 몇 가지 중요한 CC2430 기본 실험 - ADC 단일 샘플링
코드 파머 네트워크, 연습 과정에서만 게시 된 기술적 인 어려움이 발생했으며 다른 사람들을 오도하지 마십시오.
로그인해야 다시 게시할 수 있습니다 로그인하기 | 등록하기

이 버전의 통합 규칙 댓글 달기


면책 조항: 코드파머에서 제공하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용하도록 제한되며, 위 내용을 상업적 또는 불법적인 목적으로 사용할 경우 모든 결과는 사용자 본인이 부담해야 합니다. 네트워크에서 제공하는 사이트 정보, 저작권 분쟁은 본 사이트와 무관합니다. 다운로드 후 24시간 이내에 컴퓨터에서 위의 콘텐츠를 완전히 삭제해야 합니다. 프로그램이 마음에 들면 정품 소프트웨어를 지원하고 등록을 구입하여 더 나은 정품 서비스를 받으십시오. 침해가 있는 경우 이메일로 연락하여 처리해 주시기 바랍니다.

메일 To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|사이트맵

GMT+8, 2024-9-17 14:51

빠른 답글맨 위로 돌아가기목록으로 돌아가기