|
1. 상하층 연결 무선 감지 네트워크에서는 CC2430이 수집된 데이터를 호스트 컴퓨터(즉, PC)로 전송하여 처리해야 하며, 호스트 컴퓨터는 CC2430에 제어 정보를 전송해야 합니다. 이 모든 것은 두 사람 간의 정보 전달과 불가분의 관계입니다. 이 섹션에서는 PC와 CC2430 간의 직렬 포트 통신을 구현하는 방법을 배울 것입니다. CC2430은 2개의 직렬 통신 인터페이스를 포함하고 있습니다USART0그리고USART1, 각 직렬 포트는 두 가지 모드를 포함합니다:UART(비동기) 모드,SPI(동기) 모드, 이 섹션은 UART 모드만을 다룹니다). 2. 직렬 포트 통신 실험(1) 실험 소개개발 보드와 PC 간의 통신을 구현하세요: PC가 특정 문자열을 CC2430에 보내고, CC2430이 받은 후 이 문자열을 PC에 반환합니다. (2) 실험적 준비코드를 작성하기 전에 하드웨어 기능을 설정해야 합니다: 올바른 연결 + USB 시리얼 드라이버 설치. 두 개의 하드웨어 연결이 필요합니다: CC2430 개발 보드의 JTAG 포트는 디버거→ PC USB 포트→(프로그램 디버깅 및 다운로드용) CC2430 개발 보드의 직렬 포트 → PC의 USB 포트(PC와 CC2430 간 데이터 통신용) 그 다음에는 USB to 시리얼 드라이버를 설치해야 합니다 (다운로드 주소) 직렬 포트로 데이터를 전송하기 위해 직렬 포트 디버깅 도구(다운로드 주소)。 (3) 프로그램 플로우차트
(4) 실험적 소스 코드 및 분석/*
실험 설명: UART0, 보드 속도 115200bps, PC가 CC2430에 문자열(끝이 @문자로 끝나며), CC2430은 문자열을 받은 후 반환합니다
*/
#include
서명 없음 차어recv_buf[300] = {0};
서명 없음 차어recv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
공허xtal_init(공허)
{ 잠 &= ~0x04; //都上电
반면(! (잠 그리고0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; 32MHz 크리스털 발진기를 선택하세요 잠 |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
공허Uart0Init(서명 없음 차어스톱비트,서명 없음 차어패리티)
{ PERCFG&= ~0x01; 첫 번째 선택적 위치로 UART0를 선택하는데, 즉 RXD에서 P0.2, TXD에서 P0.3으로 변환합니다 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; UART 모드로 설정하고 수신기를 활성화하세요
U0GCR = 11; U0BOUD = 216; UART0 보드 속도를 115200bps로 설정하세요. 왜 216과 11bps인지는 CC2430 중국 매뉴얼을 참고하세요
U0UCR |= StopBits| 패리티; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
공허 Uart0Send(서명 없음 차어데이터)
{
반면(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = data;
}
/*UART0发送字符串
-------------------------------------------------------*/
공허Uart0SendString(서명 없음 차어*s)
{
반면(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
서명 없음 차어Uart0Receive(공허)
{
서명 없음 차어데이터;
반면(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
귀환데이터;
}
/*主函数
-------------------------------------------------------*/
공허주요(공허)
{
서명 없음 차어i,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("입력 줄이 '@'로 끝나요!");
recv_count =0;
반면(1) {
반면(1) { b = Uart0Receive(); UART
만약(b=='@')휴식; '@'가 수신되면 루프에서 벗어나 문자열을 출력합니다
recv_buf[recv_count] = b; 만약 '@'이 아니라면, 문자 배열에 문자를 계속 추가하세요 recv_buf[] recv_count++; }
에 대해(i=0; <recv_count; i++)="" [color="RGB(0), 136,="" 0)]="" 출력 문자열[="" i][="" color] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
먼저, USART0에 대응하는 I/O 포트를 설정하세요: 쌍을 전달합니다PECFRG.0UART0를 선택적 위치 1, 즉 RXD는 P0.2, TXD는 P0.3으로 설정하세요. 그 다음 P0.2와 P0.3을 외부 장치 I/O로 설정하세요. 그 다음 UART 모드를 선택하고 수신기를 활성화하세요. 그 다음 USART0의 매개변수를 설정하세요: 보드 속도 115200, 패리티 없음, 스톱 비트 1. 그 다음 PC에 다음과 같은 문자열을 보냅니다: Please Input 문자열은 다음과 같이 끝납니다'@'! , 그리고 while(1)을 사용해 모든 문자를 받도록 계속 시도합니다. 이 캐릭터가 그렇게 하지 않을 때'@', 입력이 완전하지 않다는 의미이며, 이 문자를 문자 배열에 계속 추가하는 recv_buf; 이 캐릭터는 딱 맞아요'@', 입력이 완료되면, recv_buf 내 각 문자가 PC로 전송되도록 루프가 PC로 전송되고 recv_count가 초기화됩니다. (5) 실험 결과먼저, 하드웨어 연결을 완료하고 직렬 포트 디버깅 도구를 열어 아래에 표시된 매개변수를 설정하세요:
"Open Serial Port"를 클릭한 후 IAR 디버깅을 시작하고, 프로그램이 실행되도록 두면, 시리얼 포트 디버깅 도구의 수신 상자에 예상 문자열이 나타납니다:
그 다음 직렬 포트 디버깅 도구 아래 send 텍스트박스에 "Hello"를 입력하세요.
"전송"을 클릭한 후, 왜 CC2430이 입력한 내용을 반환하지 않는지 궁금할 수 있습니다. 왜냐하면 @로 끝나지 않았기 때문입니다. 다시 "Zigbee!@"를 입력한 후 "보내기"를 클릭하면 결과가 다음과 같습니다:
예상되는 콘텐츠인 "Hello Zigbee!"가 등장할 것입니다. 끝났어요! 이게 실험의 끝이야~ 3. 결론이 글에서는 CC2430 개발 보드와 호스트 컴퓨터 간의 통신을 설명합니다. 이제 직렬 통신의 기본을 알았으니, 다음 섹션에서 ADC(아날로그-디지털 변환) 단일 샘플링에 대해 배워보겠습니다. ADC를 사용하면 개발 보드의 온도 센서 값을 수집해 시리얼 포트를 통해 PC에 온도 값을 전송해 표시할 수 있습니다.
|