|
1. Sammenkobling av øvre og nedre nivåer I et trådløst sensornettverk må CC2430 sende de innsamlede dataene til vertsdatamaskinen (dvs. PC) for behandling, og vertsmaskinen må sende kontrollinformasjon til CC2430. Alt dette er uatskillelig fra informasjonsoverføringen mellom de to. I denne delen skal vi lære hvordan man implementerer seriell portkommunikasjon mellom PC-en og CC2430. CC2430 inkluderer 2 serielle kommunikasjonsgrensesnittUSART0ogUSART1, hver seriell port inkluderer to moduser:UART(asynkron) modus,SPI(synkron) modus, denne delen omhandler kun UART-modus). 2. Eksperiment med seriell portkommunikasjon(1) Introduksjon til eksperimentetForstå kommunikasjonen mellom utviklingskortet og PC-en: PC-en sender en bestemt streng til CC2430, og CC2430 returnerer denne strengen til PC-en etter mottak. (2) Eksperimentell forberedelseFør du begynner å skrive kode, må du sette opp maskinvarefasilitetene: korrekt tilkobling + installere USB-serielle driver. To maskinvaretilkoblinger kreves: JTAG-porten på CC2430-utviklingskortet → debuggeren → USB-porten på PC-en(For feilsøking og nedlasting av programmer) Seriellport på CC2430 utviklingskort → USB-port på PC(For datakommunikasjon mellom PC og CC2430) Deretter må du installere USB-til-seriell driveren (Nedlastingsadresse) For å sende data til den serielle porten, brukes et seriell portfeilsøkingsverktøy (Nedlastingsadresse)。 (3) Programflytskjema
(4) Eksperimentell kildekode og analyse/*
Eksperimentell beskrivelse: UART0, baudrate 115200 bps, PC sender en streng til CC2430 (avslutter med @-tegn), CC2430 returnerer strengen etter å ha mottatt den
*/
#include
Usignert Charrecv_buf[300] = {0};
Usignert Charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
Tomromxtal_init(Tomrom)
{ SOV &= ~0x04; //都上电
mens(! (SØVN &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Velg en 32 MHz krystalloscillator SØVN |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
TomromUart0Init(Usignert CharStopBits,Usignert CharParitet)
{ PERCFG&= ~0x01; Velg UART0 som første valgfrie posisjon, det vil si RXD til P0.2 og TXD til P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Sett til UART-modus og aktiver mottakeren
U0GCR = 11; U0BAUD = 216; Sett UART0 baudrate til 115200 bps, for hvorfor det er 216 og 11, vennligst se CC2430 kinesiske manual
U0UCR |= StopBits| Paritet; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
Tomrom Uart0Send(Usignert Chardata)
{
mens(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = data;
}
/*UART0发送字符串
-------------------------------------------------------*/
TomromUart0SendString(Usignert Char*s)
{
mens(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
Usignert CharUart0Receive(Tomrom)
{
Usignert Chardata;
mens(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
Tilbakedata;
}
/*主函数
-------------------------------------------------------*/
Tomromhoved(Tomrom)
{
Usignert Chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Vær så snill, Input-strengen endte på '@'!");
recv_count =0;
mens(1) {
mens(1) { b = Uart0Motta(); UART
hvis(b=='@')Pause; Hvis '@' mottas, hopper den ut av løkken og sender ut strengen
recv_buf[recv_count] = b; Hvis det ikke er '@', fortsett å legge til tegn i tegnarrayet recv_buf[] recv_count++; }
for(i=0; Jeg <recv_count; i++)="" [farge="rgb(0," 136,="" 0)]="" utgangsstreng[="" i][="" farge] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Først, konfigurer I/O-porten som tilsvarer USART0: send paretPECFRG.0Sett UART0 til valgfri posisjon 1, altså P0.2 for RXD og P0.3 for TXD. Deretter konfigurerer du P0.2 og P0.3 som ekstern enhets-I/O. Velg deretter UART-modus og aktiver mottakeren. Deretter konfigurer du parameterne til USART0: baudrate 115200, ingen paritet, og stoppbit 1. Send deretter en streng til PC-en: Please Input-streng avsluttet med'@'! , og så bruke while(1) for å fortsette å prøve å få alle karakterene mottatt. Når denne karakteren ikke gjør det'@', det betyr at inputen ikke er komplett, og fortsetter å legge til dette tegnet i tegnmatrisen recv_buf; Denne karakteren er akkurat passe'@', inputen er fullført, så løkken sendes til PC-en for at hver karakter i recv_buf skal sendes til PC-en, samtidig som recv_count tilbakesettes. (5) Eksperimentelle resultaterFørst, fullfør maskinvaretilkoblingen, åpne verktøyet for feilsøking av serielle porter, og konfigurere parameterne som vist nedenfor:
Klikk på "Open Serial Port", start IAR-feilsøkingen, la programmet kjøre, og du vil finne den forventede strengen som vises i mottakerboksen på seriell port-feilsøkingsverktøyet:
Skriv deretter inn "Hallo" i send-tekstboksen under feilsøkingsverktøyet for seriell port, som vist nedenfor:
Etter å ha klikket på «Send», lurer du kanskje på hvorfor CC2430 ikke returnerer det du skrev, fordi du ikke endte på @. Vi skriver "Zigbee!@" igjen, klikker "Send" og resultatet ser slik ut:
Det forventede innholdet «Hello Zigbee!» vil dukke opp. Det er over! Dette er slutten på eksperimentet~ 3. KonklusjonDenne artikkelen beskriver kommunikasjonen mellom CC2430-utviklingskortet og vertsmaskinen. Nå som vi har det grunnleggende om seriell kommunikasjon, la oss lære om ADC (analog-til-digital konvertering) enkeltprøving i neste avsnitt. Med ADC kan vi samle inn verdien til temperatursensoren på utviklingskortet og sende temperaturverdien til PC-en gjennom den serielle porten for å vise den.
|