|
1. Verbindung der oberen und unteren Ebenen In einem drahtlosen Sensornetzwerk muss der CC2430 die gesammelten Daten zur Verarbeitung an den Host-Computer (also PC) senden, und der Host-Computer muss Steuerinformationen an den CC2430 senden. All dies ist untrennbar mit der Informationsübertragung zwischen den beiden verbunden. In diesem Abschnitt erfahren wir, wie man die serielle Port-Kommunikation zwischen dem PC und dem CC2430 implementiert. Der CC2430 verfügt über zwei serielle KommunikationsschnittstellenUSART0undUSART1, jeder serielle Port enthält zwei Modi:UART(asynchroner) Modus,SPI(synchroner) Modus, dieser Abschnitt behandelt nur den UART-Modus). 2. Serielles Kommunikationsexperiment(1) Einführung in das ExperimentBeachten Sie die Kommunikation zwischen der Entwicklungskarte und dem PC: Der PC sendet eine bestimmte Zeichenkette an die CC2430, und die CC2430 gibt diese Zeichenkette nach Empfang an den PC zurück. (2) VersuchsvorbereitungBevor du mit dem Schreiben von Code anfängst, musst du die Hardware-Funktionen einrichten: korrekte Verbindung + den USB-Serielltreiber installieren. Zwei Hardwareanschlüsse sind erforderlich: Der JTAG-Port der CC2430-Entwicklungsplatine → der Debugger → USB-Anschluss des PCs(Zum Debuggen und Herunterladen von Programmen) Serieller Anschluss der CC2430-Entwicklungsplatine → USB-Anschluss des PCs(Für Datenkommunikation zwischen PC und CC2430) Dann musst du den USB-zu-Seriell-Treiber installieren (Adresse herunterladen) Um Daten an den seriellen Port zu senden, wird ein serielles Port-Debugging-Tool (Adresse herunterladen)。 (3) Programmflussdiagramm
(4) Experimenteller Quellcode und Analyse/*
Experimentelle Beschreibung: UART0, Baudrate 115200bps, PC sendet eine Zeichenkette an CC2430 (endet mit @-Zeichen), CC2430 gibt die Zeichenkette nach Empfang zurück
*/
#include
Unsigniert charrecv_buf[300] = {0};
Unsigniert charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
Leerextal_init(Leere)
{ SCHLAF &= ~0x04; //都上电
während(! (SCHLAF &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Wählen Sie einen 32-MHz-Kristalloszillator SCHLAF |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
LeereUart0Init(Unsigniert charStopBits,Unsigniert charParität)
{ PERCFG&= ~0x01; Wählen Sie UART0 als erste optionale Position, also RXD bis P0.2 und TXD bis P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Stellen Sie den UART-Modus ein und aktivieren Sie den Empfänger
U0GCR = 11; U0BAUD = 216; Stellen Sie die Baudrate des UART0 auf 115200 bps ein, warum es 216 und 11 sind, siehe bitte das chinesische Handbuch CC2430
U0UCR |= StopBits| Parität; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
Leere Uart0Send(Unsigniert charDaten)
{
während(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = Daten;
}
/*UART0发送字符串
-------------------------------------------------------*/
LeereUart0SendString(Unsigniert char*s)
{
während(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
Unsigniert charUart0Receive(Leere)
{
Unsigniert charDaten;
während(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
RückgabeDaten;
}
/*主函数
-------------------------------------------------------*/
Leeremain(Leere)
{
Unsigniert chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Bitte Eingabe-String endete mit '@'!");
recv_count =0;
während(1) {
während(1) { b = Uart0Empfang(); UART
wenn(b=='@')Pause; Wenn '@' empfangen wird, springt es aus der Schleife und gibt die Zeichenkette aus
recv_buf[recv_count] = b; Wenn es nicht '@' ist, fügen Sie weiterhin Zeichen zum Zeichenarray hinzu recv_buf[] recv_count++; }
für(i=0; i<recv_count; i++)="" [color="rgb(0," 136,="" 0)]="" Ausgabestring[="" i][="" Farbe] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Zuerst konfigurieren Sie den I/O-Port entsprechend USART0: Passieren Sie das PaarPECFRG.0Setze UART0 auf optionale Position 1, also P0.2 für RXD und P0.3 für TXD. Dann konfiguriere P0.2 und P0.3 als externe Geräte-I/O. Wählen Sie dann den UART-Modus aus und aktivieren Sie den Empfänger. Dann konfigurieren Sie die Parameter von USART0: Baudrate 115200, keine Parität und Stoppbit 1. Dann senden Sie einen String an den PC: Bitte Eingabestring endet mit'@'! , und dann while(1) nutzen, um weiterhin zu versuchen, jeden Charakter zu erhalten. Wenn dieser Charakter es nicht tut'@', das bedeutet, dass die Eingabe nicht vollständig ist, und dieses Zeichen wird weiterhin zum Zeichenarray recv_buf hinzugefügt; Dieser Charakter ist genau richtig'@', die Eingabe ist abgeschlossen, sodass die Schleife an den PC gesendet wird, damit jeder Charakter im recv_buf an den PC gesendet wird, während der recv_count zurückgesetzt wird. (5) VersuchsergebnisseSchließen Sie zuerst die Hardwareverbindung ab, öffnen Sie das Debugging-Tool für serielle Ports und konfigurieren Sie die Parameter wie unten gezeigt:
Klicken Sie auf "Serieller Port öffnen", starten Sie das IAR-Debugging, lassen Sie das Programm laufen, und Sie finden die erwartete Zeichenkette im Empfangsfeld des seriellen Port-Debugging-Werkzeugs:
Geben Sie dann "Hallo" in das Senden-Textfeld unter dem seriellen Port-Debugging-Tool ein, wie unten gezeigt:
Nachdem Sie auf "Senden" geklickt haben, fragen Sie sich vielleicht, warum CC2430 nicht zurückgibt, was Sie eingegeben haben, weil Sie nicht mit @ endet. Wir tippen erneut "Zigbee!@", klicken auf "Senden" und das Ergebnis sieht so aus:
Der erwartete Inhalt "Hallo Zigbee!" wird erscheinen. Es ist vorbei! Das ist das Ende des Experiments~ 3. FazitDieser Artikel beschreibt die Kommunikation zwischen dem CC2430-Entwicklungsboard und dem Host-Computer. Da wir nun die Grundlagen der seriellen Kommunikation haben, lernen wir im nächsten Abschnitt mehr über ADC-Single-Sampling (Analog-zu-Digital-Umwandlung). Mit ADC können wir den Wert des Temperatursensors auf der Entwicklungsplatine erfassen und den Temperaturwert über den seriellen Anschluss an den PC senden, um ihn anzuzeigen.
|