|
1. Att koppla ihop de övre och undre nivåerna I ett trådlöst sensornätverk måste CC2430 skicka den insamlade datan till värddatorn (dvs. PC) för bearbetning, och värddatorn måste skicka styrinformation till CC2430. Allt detta är oskiljaktigt från informationsöverföringen mellan de två. I detta avsnitt kommer vi att lära oss hur man implementerar seriell portkommunikation mellan PC:n och CC2430. CC2430 inkluderar 2 seriella kommunikationsgränssnittUSART0ochUSART1, varje seriell port innehåller två lägen:UART(asynkront) läge,SPI(synkront) läge, denna sektion behandlar endast UART-läge). 2. Seriell portkommunikationsexperiment(1) Introduktion till experimentetFörstå kommunikationen mellan utvecklingskortet och datorn: PC:n skickar en viss sträng till CC2430, och CC2430 returnerar denna sträng till datorn efter att ha mottagit den. (2) Experimentell förberedelseInnan du börjar skriva kod behöver du ställa in hårdvarufunktionerna: korrekt anslutning + installera USB-seriedrivrutinen. Två hårdvaruanslutningar krävs: JTAG-porten på CC2430-utvecklingskortet → felsökningsmaskinen → USB-porten på PC:n(För felsökning och nedladdning av program) Seriellport på CC2430-utvecklingskort → USB-port på PC(För datakommunikation mellan PC och CC2430) Sedan måste du installera USB-minnet till seriell drivrutin (Nedladdningsadress) För att skicka data till den seriella porten används ett seriell port-felsökningsverktyg (Nedladdningsadress)。 (3) Programflödesschema
(4) Experimentell källkod och analys/*
Experimentell beskrivning: UART0, baudhastighet 115200bps, PC skickar en sträng till CC2430 (slutar på @-tecken), CC2430 returnerar strängen efter att ha mottagit den
*/
#include
osignerad charrecv_buf[300] = {0};
osignerad charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
tomrumxtal_init(tomrum)
{ SOV &= ~0x04; //都上电
medan(! (SÖMN &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Välj en 32MHz kristalloscillator SÖMN |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
tomrumUart0Init(osignerad charStopBits,osignerad charParitet)
{ PERCFG&= ~0x01; Välj UART0 som första valbara position, det vill säga RXD till P0.2 och TXD till P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Ställ in på UART-läge och aktivera mottagaren
U0GCR = 11; U0BAUD = 216; Ställ in UART0:s baudhastighet på 115200 bps, för varför det är 216 och 11, se den kinesiska manualen CC2430
U0UCR |= StopBits| Paritet; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
tomrum Uart0Send(osignerad chardata)
{
medan(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = data;
}
/*UART0发送字符串
-------------------------------------------------------*/
tomrumUart0SendString(osignerad char*s)
{
medan(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
osignerad charUart0Receive(tomrum)
{
osignerad chardata;
medan(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
Återkomstendata;
}
/*主函数
-------------------------------------------------------*/
tomrumhuvud(tomrum)
{
osignerad chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Snälla, Input-strängen slutar på '@'!");
recv_count =0;
medan(1) {
medan(1) { b = Uart0Mottagande(); UART
om(b=='@')Bryt; Om '@' tas emot hoppar den ut ur loopen och skickar ut strängen
recv_buf[recv_count] = b; Om det inte är '@', fortsätt lägga till tecken i karaktärsmatrisen recv_buf[] recv_count++; }
för(i=0; Jag <recv_count; i++)="" [färg="rgb(0," 136,="" 0)]="" utgångssträng[="" i][="" färg] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Först, konfigurera I/O-porten som motsvarar USART0: skicka paretPECFRG.0Ställ in UART0 på valfritt läge 1, dvs. P0.2 för RXD och P0.3 för TXD. Konfigurera sedan P0.2 och P0.3 som extern enhets-I/O. Välj sedan UART-läge och aktivera mottagaren. Konfigurera sedan parametrarna för USART0: baudhastighet 115200, ingen paritet, och stoppbit 1. Skicka sedan en sträng till datorn: Vänligen Inputsträng slutar med'@'! , och sedan använda while(1) för att fortsätta försöka få varje karaktär mottagen. När denna karaktär inte gör det'@', det betyder att inmatningen inte är komplett och fortsätter att lägga till detta tecken i teckenarrayen recv_buf; Den här karaktären är precis lagom'@', inmatningen är klar, så loopen skickas till spelarkaraktären för att varje karaktär i recv_buf ska skickas till spelarkaraktären, samtidigt som recv_count återställs. (5) Experimentella resultatFörst slutför du hårdvaruanslutningen, öppnar verktyget för seriell port-felsökning och konfigurerar parametrarna enligt nedan:
Klicka på "Open Serial Port", starta sedan IAR-felsökningen, låt programmet köras, och du kommer att hitta den förväntade strängen i mottagarrutan på det seriella port-felsökningsverktyget:
Ange sedan "Hallå" i skicka-textrutan under verktyget för seriell port-felsökning, som visas nedan:
Efter att ha klickat på "Skicka" kanske du undrar varför CC2430 inte returnerar det du skrev, eftersom du inte slutade på @. Vi skriver "Zigbee!@" igen, klickar på "Skicka" och resultatet ser ut så här:
Det förväntade innehållet "Hej Zigbee!" kommer att dyka upp. Det är över! Det här är slutet på experimentet~ 3. SlutsatsDenna artikel beskriver kommunikationen mellan CC2430-utvecklingskortet och värddatorn. Nu när vi har grunderna i seriell kommunikation, låt oss lära oss om ADC (analog-till-digital konvertering) single sampling i nästa avsnitt. Med ADC kan vi samla in värdet på temperatursensorn på utvecklingskortet och skicka temperaturvärdet till datorn via den seriella porten för att visa det.
|