| I. 不足している部分を補う ワイヤレス・センサ・ネットワークでは、CC2430は収集したデータを処理のためにホスト・コンピュータ(つまりPC)に送る必要があり、同時にホスト・コンピュータは制御情報をCC2430に送る必要がある。これらはすべて、両者間の情報伝達と切り離すことができません。このセクションでは、PCとCC2430間のシリアル通信の実装方法について説明します。 CC2430には2つのシリアル通信インターフェース USART0と USART1があり、それぞれのシリアルポートにはUART(非同期)モードとSPI(同期)モードの2つのモードがあります。) 次に、シリアルポート通信の実験です。 PCからCC2430にある文字列を送信し、CC2430がそれを受信してPCに返すという、開発ボードとPC間の通信を実現する。 (2) 実験の準備 コードを書き始める前に、正しい接続とUSB-シリアルドライバーのインストールという、ハードウェア設備のセットアップが必要である。 ハードウェアの接続には2つ必要です: CC2430開発ボードのJTAGポート → デバッガ → PCのUSBポート(デバッグとプログラムのダウンロード用) CC2430開発ボードのシリアル・ポート → PCのUSBポート(PCとCC2430のデータ通信用) 次に、USBからシリアルポートへのドライバをインストールする必要があります(ダウンロードアドレス)。 シリアルポートにデータを送るためには、シリアルポートデバッグツールも必要です(ダウンロードアドレス)。 (3) プログラムのフローチャート
(4) 実験ソースコードと解析/* 実験内容:UART0,ボーレート115200bps, PCからCC2430に文字列を送信(@で終了), CC2430はその文字列を受信して返す*/# include unsigned char recv_buf[300] ={0};
unsigned char recv_count = 0;/* システム・クロックの初期化-------------------------------------------------------*/void xtal_init(void) { SLEEP & amp;=~0x04; // 両方の電源投入while(! (SLEEP & 0x40)); //水晶発振器オン、安定 CLKCON &=~0x47; &
nbsp; //select 32MHz crystal oscillator SLEEP |=0x04; }/*UART0 communication initialisation-------------------------------------------------------*/void Uart0Init(
unsigned char StopBits,unsigned char Parity) { PERCFG&=~0x01;   P0SEL |= 0x0C; //UART0をオプションのポジション1、つまりRXDをP0.2、TXDをP0.3に選択する P0SEL |=0x0C;  
nbsp; //UART0ポートを初期化し、P0.2とP0.3を外部デバイスのIOポートに設定 U0CSR =0xC0; // UART0ポートに設定。
nbsp; //Set UART mode and enable receiver U0GCR = 11; U0BAUD = 216; & nbsp;//Set UART0 port, set P0.2 and P0.3 as external device IO port. nbsp; //Set UART0 baud rate to 115200bps, why is 216 and 11, you can refer to CC2430 Chinese manual  
U0UCR |= StopBits|Parity; //Set StopBits and Parity }/*UART0 send data----------------------------------------
---------------*/void Uart0Send(unsigned char data) {while(U0CSR&0x01); //データ送信中はUARTがアイドルになるのを待つ U0DB0Send(unsigned char data) { while(U0CSR&0x01); //データ送信中はUARTがアイドルになるのを待つ U0DB0Send(unsigned char data)
nbsp;U0DBUF = data; }/*UART0SendString-------------------------------------------------------*/void Uart0SendString(unsigned char *s) { &while(*s !
= 0) //文字列 s の各文字を順番に送信 Uart0Send(*s++); }/*UART0 がデータを受け取る---------------------------------------*/ void Uart0SendString(unsigned char *s) { & nbsp;while(*s !
--------------------*/unsigned char Uart0Receive(void) {unsigned char data;while(!
(U0CSR&0x04)); //データを受信したら問い合わせ、そうでなければ待ち続ける data=U0DBUF;//受信データを取り出すreturn data;&
nbsp; }/* main関数------------------------------------------------------------------------*/void main(void) {
u nsigned char i,b; xtal_init(); Uart0Init(0x00,0x00); //UART0を初期化し、1ストップビット、パリティなしを設定する。nbsp;Uart0SendString("Please Input string ended with '@'!
"); recv_count =0;while(1) {while(1) & nbsp; { b = UART0SendString("Please Input string ended with '@'!
nbsp; { b = Uart0Receive() UARTの 場合if(b=='@')break; //'@'を受信したら、ループを抜けて文字列を出力 する。
ループを飛び出し、文字列を出力 recv_buf[recv_count] = b;//'@' でない場合、文字配列に文字を追加し続ける recv_buf[] &
nbsp; recv_count++; }for(i=0; i<recv_count; i++)="" [color="rgb(0," 136,=&
quot;" 0)]="" 出力文字列[="" i][="" color] Uart0Send(recv_buf); UART0SendString(""); recv_count=0; &
nbsp; //リセット } }まず USART0 に対応する I/O ポートを設定します。 PECFRG.0 を ゼロクリアして UART0 をオプショナルポジション 1 に設定します。 UARTモードを選択し、レシーバーをイネーブルにします。 次に USART0のパラメータを設定します:ボーレート115200、パリティなし、ストップビット1! そしてwhile(1)を使い、受信した全ての文字を取得しようとします。この文字が'@'でないときは、まだ入力が終了していないことを意味し、この文字を文字配列recv_bufに追加し続ける。この文字がちょうど'@'であるときは、入力が終了したことを意味するので、ループから飛び出してrecv_bufの各文字を順番にPCに送信し、同時にrecv_countをリセットする。 (5) 実験結果まず、ハードウェアの接続を完了し、シリアルポートを開く 。
"Open Serial Port "をクリックし、IARデバッグを開始し、プログラムを実行させると 、シリアルポートデバッガが実行さ れることがわかります。
次に、シリアルデバッギングツールの下部にある送信テキストボックスに、次のように" Hello"と入力 します。
「送信」をクリックした後、なぜ CC2430が メッセージを返さないのか不思議に思うかもしれません。送信」をクリックした後、なぜCC2430が入力した内容を返さないのか不思議に思うかもしれませんが、それはメッセージの末尾に@をつけていないからです。 もう一度 "Zigbee!@"と入力して "送信 "をクリックしてみましょう
g
期待通りの内容です。"Hello Zigbee!"なう!この実験の終わりへ~ III.おわりに今回は、CC2430開発ボードとホストコンピュータの通信について紹介した。シリアル通信を基本として、次はADC(アナログ・デジタル変換)のシングル・サンプリングを学びます。ADC を使うことで、開発ボード上の温度センサーの値を収集し、シリアルポートを通して PC に温度値を送信して表示することができます。
|