Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 7554|Svar: 0

Zigbee Journey (5): Flera viktiga grundläggande CC2430-experiment – seriell kommunikation

[Kopiera länk]
Publicerad på 2014-10-30 23:18:18 | | | |
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 experimentet

Fö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örberedelse

Innan 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 resultat

Fö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. Slutsats

Denna 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.






Föregående:Zigbee Journey (4): Flera viktiga grundläggande CC2430-experiment – timeravbrott
Nästa:Zigbee Journey (6): Flera viktiga CC2430-grundexperiment - ADC enkelprovtagning
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com