| I. Prevzatie zodpovednosti V bezdrôtovej sieti snímačov musí CC2430 posielať zozbierané údaje do hostiteľského počítača (t. j. PC) na spracovanie a zároveň hostiteľský počítač musí posielať riadiace informácie do CC2430. Toto všetko je neoddeliteľné od prenosu informácií medzi nimi. V tejto časti sa dozvieme, ako implementovať sériovú komunikáciu medzi PC a CC2430. CC2430 obsahuje dve sériové komunikačné rozhrania USART0 a USART1, každý sériový port obsahuje dva režimy: režim UART (asynchrónny), režim SPI (synchrónny), táto časť sa zaoberá len režimom UART). Po druhé, experiment so sériovým komunikačným portom(1) Úvod do experimentu Dosiahnite komunikáciu medzi vývojovou doskou a PC: PC pošle určitý reťazec do CC2430 a CC2430 po prijatí vráti tento reťazec do PC. (2) Príprava experimentu Predtým, ako začnete písať kód, musíte nastaviť hardvérové zariadenia: správne pripojenie + nainštalovať ovládač USB na sériový port. Hardvérové pripojenie potrebuje dve: JTAG port vývojovej dosky CC2430 → ladiaci program → USB port PC (na ladenie a sťahovanie programu) sériový port vývojovej dosky CC2430 → USB port PC (na dátovú komunikáciu PC a CC2430) Potom je potrebné nainštalovať ovládač USB na sériový port ( adresa na stiahnutie ) Na odosielanie údajov na sériový port je potrebný aj nástroj na ladenie sériového portu ( adresa na stiahnutie ). (3) Bloková schéma programu
(4) Zdrojový kód a analýza experimentu/* Popis experimentu: UART0,prenosová rýchlosť 115200bps, PC posiela reťazec do CC2430 (ukončený znakom @), CC2430 prijíma a vracia reťazec*/#include unsigned char recv_buf[ 300 ] = {0};
u nsigned char recv_count = 0;/* inicializácia systémových hodín-------------------------------------------------------*/void xtal_init( void ) { SLEEP & amp;= ~0x04; // obidve napájaniawhile (! (SLEEP & 0x40 )); //kryštálový oscilátor zapnutý a stabilný CLKCON &=~0x47; &
nbsp; //vyber 32MHz kryštálový oscilátor SLEEP |=0x04; }/*Inicializácia komunikácie UART0-------------------------------------------------------*/void Uart0Init(
u nsigned char StopBits, unsigned char Parity) { PERCFG&=~0x01;   ; //Vyberte UART0 ako voliteľnú pozíciu jedna, to znamená RXD na P0.2, TXD na P0.3 P0SEL |=0x0C;  
nbsp; //Inicializujte port UART0, nastavte P0.2 a P0.3 ako IO port externého zariadenia U0CSR =0xC0; //Nastavte na port UART0.
nbsp; //Nastavte režim UART a povoľte prijímač U0GCR = 11; U0BAUD = 216; & nbsp;//Nastavte port UART0, nastavte P0.2 a P0.3 ako IO port externého zariadenia. nbsp; //Nastavte prenosovú rýchlosť UART0 na 115200b/s, prečo je 216 a 11, si môžete prečítať v čínskej príručke CC2430  
; U0UCR |= StopBits|Parity; //Nastavenie StopBits a parity }/*UART0 posiela dáta----------------------------------------
- --------------*/void Uart0Send( unsigned char data) {while ( U0CSR&0x01 ); //Čakanie na nečinnosť UART počas odosielania dát &
nbsp;U0DBUF = data; }/*UART0SendString-------------------------------------------------------*/void Uart0SendString( unsigned char *s) { & nbsp;while (*s !
= 0 ) //Odosielanie každého znaku v reťazci s postupne Uart0Send(*s++); }/*UART0 prijíma dáta-----------------------------------
- -------------------*/unsigned char Uart0Receive( void ) {unsigned char data;while (!
( U0CSR&0x04 ); //pýtať sa, či sú dáta prijaté, inak pokračovať v čakaní data=U0DBUF;//vyňať prijaté dátareturn data;&
nbsp; }/* hlavná funkcia-------------------------------------------------------*/void main( void ) {
u nsigned char i,b; xtal_init(); Uart0Init(0x00, 0x00 ); //inicializácia UART0, nastavenie 1 stop bitu, bez parity & nbsp;Uart0SendString("Please Input string ended with '@'!
& quot;); recv_count =0;while( 1) {while ( 1) &
nbsp; { b = Uart0Receive() ;UARTif (b== '@' ) break; //Ak je prijaté '@', vyskočte z
c yklu, výstupný reťazec recv_buf[recv_count] = b;//Ak nie je '@', pokračujte v pridávaní znakov do poľa znakov recv_buf[] &
nbsp; recv_count++; }for ( i=0; i<recv_count; i++)="" [color="rgb(0," 136,=&
q uot;" 0)] ="" výstupný reťazec[="" i][="" farba] Uart0Send(recv_buf); Uart0SendString ( ""); recv_count=0; &
n bsp; //reset } }Najprv nakonfigurujte I/O port zodpovedajúci USART0: nastavte UART0 na voliteľnú pozíciu 1 vymazaním PECFRG.0 na nulu, t. j. RXD zodpovedá P0.2 a TXD zodpovedá P0.3. Potom nakonfigurujte P0.2 a P0.3 ako vstupy/výstupy externého zariadenia. UART a povoľte prijímač. Potom nakonfigurujte parametre USART0: prenosová rýchlosť 115200, bez parity, stop bit 1. Potom pošlite reťazec do PC: Please Input string ended with '@'! , a potom sa pomocou while(1) pokúsi získať každý prijatý znak. Keď tento znak nie je "@", znamená to, že vstup ešte nie je ukončený, a pokračuje v pridávaní tohto znaku do poľa znakov recv_buf; keď je tento znak presne "@", znamená to, že vstup je ukončený, a preto vyskočí z cyklu, aby poslal do PC každý znak v recv_buf v poradí a zároveň vynuloval recv_count. 5. Výsledky experimentuNajprv dokončite hardvérové pripojenie a otvorte sériový port .
l adiaceho nástroja, nakonfigurujte parametre nasledovne:
Kliknite na "Open Serial Port", potom spustite ladenie IAR, nechajte program bežať , zistíte, že sa spustí ladiaci program sériového portu.
U vidíte, že sa v poli pre príjem v nástroji na ladenie sériového portu objaví očakávaný reťazec:
Potom do textového poľa pre odoslanie v spodnej časti nástroja na ladenie sériového portu zadajte "
H ello" nasledovne:
Po kliknutí na tlačidlo "Send" (Odoslať) sa môžete čudovať, prečo CC2430 nevráti vašu správu . Po kliknutí na tlačidlo "Odoslať" sa môžete čudovať, prečo CC2430 nevráti to, čo ste napísali, je to preto, že ste správu neukončili znakom @. Zadajme opäť "Zigbee!@" a kliknite na "Odoslať", výsledok bude nasledovný:
g
Len očakávaný obsah "Hello Zigbee!" Teraz! Na záver tohto experimentu ~ III. ZáverTento článok predstavuje vývojovú dosku CC2430 a komunikáciu s hostiteľským počítačom. So základmi sériovej komunikácie sa v ďalšej časti stretneme, aby sme sa naučili ADC (analógovo-digitálny prevod) s jedným vzorkovaním. Pomocou ADC môžeme zbierať hodnoty snímača teploty na vývojovej doske a posielať hodnotu teploty cez sériový port do počítača, aby sa zobrazila.
|