|
1. 上層と下層の接続 無線センシングネットワークでは、CC2430は収集したデータをホストコンピュータ(すなわちPC)に送って処理し、ホストコンピュータは制御情報をCC2430に送信する必要があります。 これらすべては、両者間の情報伝達と切り離せないものです。 このセクションでは、PCとCC2430間のシリアルポート通信の実装方法を学びます。 CC2430には2つのシリアル通信インターフェースが含まれていますUSART0そしてUSART1各シリアルポートには2つのモードがあります:UART(非同期)モード、SPI(同期)モード、このセクションではUARTモードのみを扱います)。 2. シリアルポート通信実験(1) 実験への導入開発ボードとPC間の通信を実現する:PCは特定の文字列をCC2430に送り、CC2430はそれを受信した後にPCに返します。 (2) 実験的準備コードを書き始める前に、ハードウェアのセットアップが必要です:正しい接続+USBシリアルドライバーのインストール。 2つのハードウェア接続が必要です: CC2430開発ボードのJTAGポートは、デバッガ→PCのUSBポート→(プログラムのデバッグやダウンロード用) CC2430開発ボードのシリアルポート→PCのUSBポート(PCとCC2430間のデータ通信用) その後、USBからシリアルへのドライバーをインストールする必要があります(ダウンロードアドレス) シリアルポートにデータを送るためには、シリアルポートデバッグツール(ダウンロードアドレス)。 (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(署名なし チャーStopBits、署名なし チャーパリティ)
{ PERCFG&= ~0x01; 最初のオプション位置としてUART0を選択し、すなわちRXDからP0.2、TXDからP0.3へ P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; UARTモードに設定し、受信機を有効にしてください
U0GCR = 11; U0ボー = 216; UART0のボーレートを115200bpsに設定してください。なぜ216bpsと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; i<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に送られるようにループが送られ、recv_countがリセットされます。 (5) 実験結果まず、ハードウェア接続を完了し、シリアルポートデバッグツールを開き、以下のようにパラメータを設定します。
「Open Serial Port」をクリックし、IARデバッグを開始し、プログラムを実行させると、シリアルポートデバッグツールの受信欄に期待される文字列が表示されます。
次に、シリアルポートデバッグツールの下にある送信テキストボックスに「Hello」と入力します(以下のように):
「送信」をクリックした後、なぜCC2430が入力した内容を返さないのか疑問に思うかもしれません。なぜなら、あなたは@で終わっていなかったからです。 もう一度「Zigbee!@」と入力し、「送信」をクリックすると、結果はこんな感じになります:
予想されるコンテンツ「Hello Zigbee!」が表示されます。 おしまいです! これで実験は終わり~ 3. 結論この記事では、CC2430開発ボードとホストコンピュータ間の通信について説明します。 シリアル通信の基本がわかったところで、次のセクションでADC(アナログからデジタルへの変換)シングルサンプリングについて学びましょう。 ADCを使えば、開発ボード上の温度センサーの値を集め、その温度値をシリアルポート経由でPCに送信して表示できます。
|