Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 7554|Antwoord: 0

Zigbee Journey (5): Verschillende belangrijke CC2430 basisexperimenten - seriële communicatie

[Link kopiëren]
Geplaatst op 30-10-2014 23:18:18 | | | |
1. Het verbinden van de boven- en benedenverdiepingen

In een draadloos detectienetwerk moet de CC2430 de verzamelde gegevens naar de hostcomputer (d.w.z. pc) sturen voor verwerking, en de hostcomputer moet controlegegevens naar de CC2430 sturen. Dit alles is onlosmakelijk verbonden met de overdracht van informatie tussen de twee. In deze sectie leren we hoe je seriële poortcommunicatie tussen de pc en de CC2430 kunt implementeren.

De CC2430 bevat 2 seriële communicatie-interfacesUSART0enUSART1, elke seriële poort bevat twee modi:UART(asynchrone) modus,SPI(synchrone) modus, behandelt deze sectie alleen UART-modus).

2. Seriële poortcommunicatie-experiment(1) Inleiding tot het experiment

Besef de communicatie tussen het ontwikkelbord en de pc: de pc stuurt een bepaalde string naar de CC2430, en de CC2430 stuurt deze string terug naar de pc nadat hij deze heeft ontvangen.

(2) Experimentele voorbereiding

Voordat je begint met het schrijven van code, moet je de hardwarefaciliteiten instellen: correcte verbinding + de USB-seriële driver installeren.

Twee hardwareverbindingen zijn vereist:

    De JTAG-poort van het CC2430-ontwikkelbord → de debugger → de USB-poort van de pc(Voor het debuggen en downloaden van programma's)

    Seriële poort van CC2430 ontwikkelbord → USB-poort van pc(Voor datacommunicatie tussen PC en CC2430)

Daarna moet je de USB-naar-seriële driver installeren (Download adres

Om data naar de seriële poort te sturen, wordt een seriële poort-debugtool gebruikt (Download adres)。

(3) Programmastroomdiagram

(4) Experimentele broncode en analyse/*
  Experimentele beschrijving: UART0, baudrate 115200bps, PC stuurt een string naar CC2430 (eindigend met @-teken), CC2430 retourneert de string na ontvangst
*/

#include

Onondertekend charrecv_buf[300] = {0};
Onondertekend charrecv_count =0;


/*系统时钟初始化
-------------------------------------------------------*/
leegtextal_init(leegte)
{
  SLAAP &= ~0x04;            //都上电
  terwijl(! (SLAAP &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Kies een 32MHz kristaloscillator.
  SLAAP |=0x04;
}

/*UART0通信初始化
-------------------------------------------------------*/
leegteUart0Init(Onondertekend charStopBits,Onondertekend charPariteit)
{
   PERCFG&= ~0x01;                  Selecteer UART0 als eerste optionele positie, dat wil zeggen, RXD naar P0.2 en TXD naar P0.3
   P0SEL |=  0x0C;                  //初始化UART0端口,设置P0.2与P0.3为外部设备IO口

   U0CSR =0xC0;                    Zet de UART-modus en schakel de ontvanger in
   
   U0GCR = 11;
   U0BAUD = 216;                     Stel de baudrate van de UART0 in op 115200bps, en waarom het 216 en 11 is, raadpleeg de CC2430 Chinese handleiding
   
   U0UCR |= StopBits| Pariteit;        //设置停止位与奇偶校验
}

/*UART0发送数据
-------------------------------------------------------*/
leegte  Uart0Send(Onondertekend chargegevens)
{
  terwijl(U0CSR&0x01);   //等待UART空闲时发送数据
  U0DBUF = data;
}

/*UART0发送字符串
-------------------------------------------------------*/
leegteUart0SendString(Onondertekend char*s)
{
  terwijl(*s !=0)         //依次发送字符串s中的每个字符
    Uart0Send(*s++);
}

/*UART0接受数据
-------------------------------------------------------*/
Onondertekend charUart0Receive(leegte)
{
  Onondertekend chardata;
  terwijl(! (U0CSR&0x04));//查询是否收到数据,否则继续等待
  data=U0DBUF;         //提取接收到的数据
  Terugkeerdata;         
}

/*主函数
-------------------------------------------------------*/
leegtehoofd(leegte)
{
  Onondertekend chari,b;
  
  xtal_init();

  Uart0Init(0x00,0x00);  //初始化UART0,设置1个停止位,无奇偶校验
  Uart0SendString("Alsjeblieft, Input-string eindigt met '@'!");

  recv_count =0;
  
  terwijl(1)
  {
    terwijl(1)                           
    {
      b = Uart0Ontvangen(); UART
      als(b=='@')Pauze;                 Als '@' wordt ontvangen, springt het uit de lus en geeft het teken de string uit

      recv_buf[recv_count] = b;        Als het niet '@' is, blijf dan tekens toevoegen aan de tekenarray recv_buf[]
      recv_count++;
    }
    voor(i=0; i<recv_count; i++)="" [kleur="RGB(0," 136,="" 0)]="" uitvoerstring[="" i][="" kleur]
      Uart0Send(recv_buf);
   
    Uart0SendString("");
    recv_count =0;                     //重置
  }
}

Eerst configureer je de I/O-poort die overeenkomt met USART0: laat het paar doorgevenPECFRG.0Stel UART0 in op optionele positie 1, dus P0.2 voor RXD en P0.3 voor TXD. Stel vervolgens P0.2 en P0.3 in als externe apparaat-I/O.

Selecteer vervolgens UART-modus en schakel de ontvanger in. Vervolgens configureer je de parameters van USART0: baudrate 115200, geen pariteit, en stopbit 1.

Stuur dan een string naar de pc: Please Input string eindigt met'@'! , en gebruik dan while(1) om te blijven proberen elk karakter te ontvangen. Wanneer dit personage het niet doet'@', betekent dat de invoer niet compleet is, en dat dit teken wordt toegevoegd aan de tekenarray recv_buf; Dit personage is precies goed'@', de invoer is voltooid, dus de lus wordt naar de PC gestuurd zodat elk karakter in de recv_buf naar de PC kan worden gestuurd, terwijl de recv_count wordt gereset.

(5) Experimentele resultaten

Voltooi eerst de hardwareverbinding, open de seriële poort-debugtool en configureer de parameters zoals hieronder weergegeven:

Klik op "Seriële poort openen", start dan met het IAR-debuggen, laat het programma draaien, en je vindt de verwachte string in het ontvangstvak van de seriële poort-debugtool:

Voer vervolgens "Hallo" in in het verzendtekstvak onder de seriële poort-debugtool, zoals hieronder weergegeven:

Na het klikken op "Verzenden" vraag je je misschien af waarom CC2430 niet teruggeeft wat je hebt getypt, omdat je niet eindigde op @.

We typen opnieuw "Zigbee!@", klikken op "Verzenden" en het resultaat ziet er zo uit:

De verwachte inhoud "Hallo Zigbee!" zal verschijnen. Het is voorbij! Dit is het einde van het experiment~

3. Conclusie

Dit artikel beschrijft de communicatie tussen het CC2430-ontwikkelbord en de hostcomputer. Nu we de basis van seriële communicatie hebben, laten we in de volgende sectie leren over ADC (analoog-naar-digitaal conversie) single sampling. Met ADC kunnen we de waarde van de temperatuursensor op het ontwikkelbord verzamelen en deze temperatuurwaarde via de seriële poort naar de pc sturen om deze weer te geven.






Vorig:Zigbee Journey (4): Verschillende belangrijke CC2430 basisexperimenten - timeronderbreking
Volgend:Zigbee Journey (6): Verschillende belangrijke CC2430 basisexperimenten - ADC single sampling
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com