| I. Vapauteen tarttuminen Langattomassa sensoriverkossa CC2430:n on lähetettävä kerätyt tiedot isäntätietokoneeseen (eli tietokoneeseen) käsiteltäväksi, ja samaan aikaan isäntätietokoneen on lähetettävä ohjaustietoja CC2430:lle. Kaikki tämä on erottamaton osa näiden kahden välillä tapahtuvaa tiedonsiirtoa. Tässä jaksossa opimme, miten PC:n ja CC2430:n välinen sarjaliikenne toteutetaan. CC2430 sisältää kaksi sarjaliikenneliitäntää USART0 ja USART1, kumpikin sarjaportti sisältää kaksi tilaa: UART (asynkroninen) tila, SPI (synkroninen) tila, tämä jakso kattaa vain UART-tilan). Toiseksi sarjaporttiviestintäkokeilu(1) Johdanto kokeeseen Saavuta kehityslevyn ja PC:n välinen viestintä: PC lähettää tietyn merkkijonon CC2430:lle, ja CC2430 palauttaa tämän merkkijonon PC:lle sen vastaanotettuaan. (2) Kokeen valmistelu Ennen kuin aloitat koodin kirjoittamisen, sinun on asetettava laitteistotilat: oikea liitäntä + asenna USB-sarja-ajuri. Laitteistoyhteys tarvitsee kaksi: CC2430-kehityslevyn JTAG-portti → debuggeri → PC:n USB-portti (debuggausta ja ohjelman lataamista varten). CC2430-kehityslevyn sarjaportti → PC:n USB-portti (PC:n ja CC2430:n tiedonsiirtoa varten). Tämän jälkeen sinun on asennettava USB-sarjaporttiohjain ( latausosoite ). Sarjaporttiin lähetettävien tietojen lähettämiseen tarvitaan myös sarjaportin debuggaustyökalu ( latausosoite ). (3) Ohjelman kulkukaavio
(4) Kokeen lähdekoodi ja analyysi/* Kokeen kuvaus: UART0, baudinopeus 115200bps, PC lähettää merkkijonon CC2430:lle (päättyy @-merkillä), CC2430 vastaanottaa ja palauttaa merkkijonon*/#include unsigned char recv_buf[ 300 ] = {0};
u nsigned char recv_count = 0;/* järjestelmän kellon alustaminen-------------------------------------------------------*/void xtal_init( void ) { SLEEP & amp;= ~0x04; // molempien virta päällewhile (! (SLEEP & 0x40 )); //kideoskillaattori päällä ja vakaa CLKCON &=~0x47; &
nbsp; //valitaan 32 MHz:n kideoskillaattori SLEEP |=0x04; }/*UART0-yhteyden alustaminen-------------------------------------------------------*/void Uart0Init(
u nsigned char StopBits, unsigned char Parity) { PERCFG&=~0x01;   ; //Valitaan UART0 valinnaiseksi ykkösasennoksi, eli RXD P0.2:een, TXD P0.3:een P0SEL |=0x0C;  
nbsp; //Initialisoi UART0-portti, aseta P0.2 ja P0.3 ulkoisen laitteen IO-portiksi U0CSR =0xC0; //Setaa UART0-portti.
nbsp; //Säädä UART-tila ja ota vastaanotin käyttöön U0GCR = 11; U0BAUD = 216; & nbsp;//Säädä UART0-portti, aseta P0.2 ja P0.3 ulkoisen laitteen IO-portiksi. nbsp; //Setää UART0 baud rate 115200bps, miksi on 216 ja 11, voit tutustua CC2430 Kiinan käsikirjaan  
; U0UCR |= StopBits|Parity; //Setää StopBits ja Parity }/*UART0 lähettää dataa----------------------------------------.
- --------------*/void Uart0Send( unsigned char data) {while ( U0CSR&0x01 ); // Odotetaan, että UART on käyttämättömänä datan lähettämisen aikana &
nbsp;U0DBUF = data; }/*UART0SendString-------------------------------------------------------*/void Uart0SendString( unsigned char *s) { & nbsp;while (*s !
= 0 ) //Lähettää merkkijonon s jokaisen merkin vuorollaan Uart0Send(*s++); }/*UART0 hyväksyy datan-----------------------------------
- -------------------*/unsigned char Uart0Receive( void ) {unsigned char data;while (!
( U0CSR&0x04 )); //kysytään onko dataa vastaanotettu, muuten jatketaan odottelua data=U0DBUF;//otetaan vastaanotettu datareturn data;&
nbsp; }/* pääfunktio-------------------------------------------------------*/void main( void ) {
u nsigned char i,b; xtal_init(); Uart0Init(0x00, 0x00 ); //initialisoidaan UART0, asetetaan 1 stopbitti, ei pariteettia & nbsp;Uart0SendString("Syötä merkkijono, joka päättyy '@'!
& quot;); recv_count =0;while( 1 ) {while ( 1 ) &
nbsp; { b = Uart0Receive() ;UARTif (b== '@' ) break; //Jos '@' vastaanotetaan, hyppää ulos ohjelmasta.
s ilmukka, tulostetaan merkkijono recv_buf[recv_count] = b;//Jos ei '@', jatketaan merkkien lisäämistä merkkimäärään recv_buf[] &
nbsp; recv_count++; }for ( i=0; i<recv_count; i++)="" [color="rgb(0," 136,=&
q uot;" 0)] ="" output string[="" i][="" color] Uart0Send(recv_buf); Uart0SendString ( ""); recv_count=0; &
n bsp; //reset } }Määritä ensin USART0:ta vastaava I/O-portti: aseta UART0 valinnaiseen asentoon 1 tyhjentämällä PECFRG.0 nollaksi, eli RXD vastaa P0.2:ta ja TXD vastaa P0.3:ta. Määritä sitten P0.2 ja P0.3 ulkoisen laitteen I/O:ksi. Valitse sitten UART-tila ja ota vastaanotin käyttöön. Määritä sitten USART0:n parametrit: baudinopeus 115200, ei pariteettia, stopbitti 1. Lähetä sitten merkkijono PC:lle: Please Input string ended with '@'! , ja sitten se käyttää while(1) -ohjelmaa yrittäessään saada jokaisen vastaanottamansa merkin. Kun tämä merkki ei ole '@', se tarkoittaa, että syöttö ei ole vielä päättynyt, ja jatkaa tämän merkin lisäämistä merkkimäärään recv_buf; kun tämä merkki on täsmälleen '@', se tarkoittaa, että syöttö on päättynyt, ja siksi hyppää ulos silmukasta lähettääksesi jokaisen merkin recv_bufissa PC:lle järjestyksessä, ja samalla nollaa recv_count. (5) Kokeelliset tuloksetEnsiksi viimeistele laitteistokytkentä, ja avaa sarjaportti .
d ebugging-työkalu, konfiguroi parametrit seuraavasti:
Klikkaa "Open Serial Port", käynnistä sitten IAR debugging, anna ohjelman suorittaa , huomaat, että sarjaportin debuggeri toimii .
N äet odotetun merkkijonon ilmestyvän sarjavianmääritystyökalun vastaanottolaatikkoon:
Kirjoita sitten sarjavianmääritystyökalun alareunassa olevaan lähetystekstilaatikkoon "
H ello" seuraavasti:
Kun olet napsauttanut "Send", saatat ihmetellä, miksi CC2430 ei palauta viestiäsi . Kun olet napsauttanut "Lähetä", saatat ihmetellä, miksi CC2430 ei palauta kirjoittamaasi viestiä, se johtuu siitä, että et lopettanut viestiä @-merkillä. Kirjoitetaan uudelleen "Zigbee!@" ja napsautetaan "Lähetä", tulos on seuraava:
g
Just the expected contents "Hei Zigbee!" nyt! Tämän kokeilun loppuun ~ III. JohtopäätösTässä artikkelissa esitellään CC2430-kehitysalusta ja isäntätietokoneen viestintä. Sarjaviestinnän perusteella seuraavassa osassa tulemme yhteen oppimaan ADC (analogi-digitaalimuunnos) yhden näytteenoton. ADC: n avulla voimme kerätä lämpötila-anturin arvon kehityslevyllä ja lähettää lämpötila-arvon sarjaportin kautta tietokoneeseen sen näyttämiseksi.
|