|
1. Forbindelse mellem øvre og nedre niveauer I et trådløst sensornetværk skal CC2430 sende de indsamlede data til værtscomputeren (dvs. PC) til behandling, og værtscomputeren skal sende kontrolinformation til CC2430. Alt dette er uadskilleligt fra informationsoverførslen mellem de to. I dette afsnit vil vi lære, hvordan man implementerer seriel portkommunikation mellem PC'en og CC2430. CC2430 inkluderer 2 serielle kommunikationsgrænsefladerUSART0ogUSART1, hver seriel port indeholder to tilstande:UART(asynkron) tilstand,SPI(synkron) tilstand, denne sektion omhandler kun UART-tilstand). 2. Seriel port kommunikationseksperiment(1) Introduktion til eksperimentetIndse kommunikationen mellem udviklingskortet og PC'en: PC'en sender en bestemt streng til CC2430, og CC2430 returnerer denne streng til PC'en efter modtagelsen. (2) Eksperimentel forberedelseFør du begynder at skrive kode, skal du sætte hardwarefaciliteterne op: korrekt forbindelse + installer USB-seriel driver. To hardwareforbindelser er nødvendige: JTAG-porten på CC2430-udviklingskortet → debuggeren → PC'ens USB-port(Til fejlfinding og download af programmer) Seriellport på CC2430 udviklingskort → USB-port på PC(Til datakommunikation mellem PC og CC2430) Derefter skal du installere USB-nøglen til den serielmæssige driver (Download adresse) For at sende data til den serielle port bruges et seriel port-fejlsøgningsværktøj (Download adresse)。 (3) Programflowchart
(4) Eksperimentel kildekode og analyse/*
Eksperimentel beskrivelse: UART0, baudrate 115200 bps, PC sender en streng til CC2430 (afslutter med @-tegn), CC2430 returnerer strengen efter modtagelse
*/
#include
Usigneret Charrecv_buf[300] = {0};
Usigneret Charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
tomrumxtal_init(tomrum)
{ SOV &= ~0x04; //都上电
mens(! (SØVN &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Vælg en 32MHz krystaloscillator SØVN |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
tomrumUart0Init(Usigneret CharStopBits,Usigneret CharParitet)
{ PERCFG&= ~0x01; Vælg UART0 som den første valgfrie position, det vil sige RXD til P0.2 og TXD til P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Sæt til UART-tilstand og aktivér modtageren
U0GCR = 11; U0BAUD = 216; Sæt UART0's baudrate til 115200 bps, og for hvorfor det er 216 og 11, se venligst CC2430 kinesiske manual
U0UCR |= StopBits| Paritet; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
tomrum Uart0Send(Usigneret Chardata)
{
mens(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = data;
}
/*UART0发送字符串
-------------------------------------------------------*/
tomrumUart0SendString(Usigneret Char*s)
{
mens(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
Usigneret CharUart0Receive(tomrum)
{
Usigneret Chardata;
mens(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
Tilbagevendendata;
}
/*主函数
-------------------------------------------------------*/
tomrumhoved(tomrum)
{
Usigneret Chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Venligst Input-strengen sluttede med '@'!");
recv_count =0;
mens(1) {
mens(1) { b = Uart0Modtager(); UART
hvis(b=='@')Pause; Hvis '@' modtages, springer den ud af løkken og sender strengen ud
recv_buf[recv_count] = b; Hvis det ikke er '@', fortsæt med at tilføje tegn til tegnarrayet recv_buf[] recv_count++; }
for(i=0; Jeg <recv_count; i++)="" [color="rgb(0," 136,="" 0)]="" outputstreng[="" i][="" farve] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Først konfigureres I/O-porten, der svarer til USART0: send parret viderePECFRG.0Sæt UART0 til valgfri position 1, dvs. P0.2 for RXD og P0.3 for TXD. Konfigurer derefter P0.2 og P0.3 som ekstern enheds I/O. Vælg derefter UART-tilstand og aktiver modtageren. Konfigurer derefter parametrene for USART0: baudrate 115200, ingen paritet, og stopbit 1. Send derefter en streng til PC'en: Please Input-streng afsluttet med'@'! , og så bruge while(1) til at blive ved med at prøve at få alle karakterer modtaget. Når denne karakter ikke gør det'@', det betyder, at inputtet ikke er komplet, og fortsætter med at tilføje dette tegn til tegnarrayet recv_buf; Denne karakter er lige den rette'@', inputtet er fuldført, så løkken sendes til PC'en, så hver karakter i recv_buf kan sendes til PC'en, mens recv_count nulstilles. (5) Eksperimentelle resultaterFørst fuldender du hardwareforbindelsen, åbner det serielle port-fejlfindingsværktøj, og konfigurerer parametrene som vist nedenfor:
Klik på "Åbn seriel port", start derefter IAR-fejlfinding, lad programmet køre, og du vil finde den forventede streng dukke op i modtagerboksen på seriel port-fejlsøgningsværktøjet:
Indtast derefter "Hallo" i send-tekstboksen under seriel port-fejlfindingsværktøjet, som vist nedenfor:
Efter at have klikket på "Send", undrer du dig måske over, hvorfor CC2430 ikke returnerer det, du har skrevet, fordi du ikke sluttede på @. Vi skriver "Zigbee!@" igen, klikker på "Send", og resultatet ser sådan ud:
Det forventede indhold "Hej Zigbee!" vil dukke op. Det er slut! Dette er slutningen på eksperimentet~ 3. KonklusionDenne artikel beskriver kommunikationen mellem CC2430-udviklingskortet og værtscomputeren. Nu hvor vi har det grundlæggende i seriel kommunikation, lad os lære om ADC (analog-til-digital konvertering) enkeltprøvetagning i næste afsnit. Med ADC kan vi indsamle værdien af temperatursensoren på udviklingskortet og sende temperaturværdien til PC'en gennem den serielle port for at vise den.
|