| I. Prendersi cura dei problemi In una rete di sensori wireless, il CC2430 deve inviare i dati raccolti al computer host (cioè al PC) per l'elaborazione e allo stesso tempo il computer host deve inviare informazioni di controllo al CC2430. Tutto questo è inseparabile dal trasferimento di informazioni tra i due. In questa sezione, impareremo a implementare la comunicazione seriale tra il PC e il CC2430. CC2430 include due interfacce di comunicazione seriale USART0 e USART1; ogni porta seriale comprende due modalità: modalità UART (asincrona), modalità SPI (sincrona); questa sezione tratta solo la modalità UART). In secondo luogo, l'esperimento di comunicazione con la porta seriale(1) Introduzione all'esperimento Realizzare la comunicazione tra la scheda di sviluppo e il PC: il PC invia una determinata stringa al CC2430 e il CC2430 la restituisce al PC dopo averla ricevuta. (2) Preparazione dell'esperimento Prima di iniziare a scrivere il codice, è necessario impostare le strutture hardware: la connessione corretta + installare il driver USB-seriale. Le connessioni hardware devono essere due: porta JTAG della scheda di sviluppo CC2430 → debugger → porta USB del PC (per il debug e il download del programma) porta seriale della scheda di sviluppo CC2430 → porta USB del PC (per la comunicazione dei dati tra PC e CC2430) È quindi necessario installare il driver per la porta seriale USB ( indirizzo per il download ). Per inviare i dati alla porta seriale, è necessario anche uno strumento di debug della porta seriale ( indirizzo per il download ). (3) Diagramma di flusso del programma
(4) Codice sorgente dell'esperimento e analisi/* Descrizione dell' esperimento: UART0, baud rate 115200bps, il PC invia una stringa a CC2430 (termina con il carattere @), CC2430 riceve e restituisce la stringa*/#include unsigned char recv_buf[ 300 ] = {0};
u nsigned char recv_count = 0;/* inizializzazione dell'orologio di sistema-------------------------------------------------------*/void xtal_init( void ) { SLEEP & amp;= ~0x04; // entrambi si accendonowhile (! (SLEEP & 0x40 )); // oscillatore a cristalli acceso e stabile CLKCON &=~0x47; &
nbsp; //seleziona l'oscillatore a cristallo a 32 MHz SLEEP |=0x04; }/*Inizializzazione comunicazione UART0-------------------------------------------------------*/void Uart0Init(
u nsigned char StopBits, unsigned char Parity) { PERCFG&=~0x01;   / /Scelta UART0 come posizione opzionale uno, cioè RXD a P0.2, TXD a P0.3 P0SEL |=0x0C;  
nbsp; //Inizializza la porta UART0, imposta P0.2 e P0.3 come porte IO del dispositivo esterno U0CSR =0xC0; //Imposta la porta UART0.
nbsp; //Impostare la modalità UART e abilitare il ricevitore U0GCR = 11; U0BAUD = 216; & nbsp;//Impostare la porta UART0, impostare P0.2 e P0.3 come porta IO del dispositivo esterno. nbsp; //Impostare il baud rate di UART0 a 115200bps; per sapere perché è 216 e 11, si può fare riferimento al manuale cinese del CC2430.
U0UCR |= StopBits|Parity; //Impostare StopBits e Parità }/*UART0 invia dati----------------------------------------
- --------------*/void Uart0Send( unsigned char data) {while ( U0CSR&0x01 ); //attendere che l'UART sia inattiva durante l'invio dei dati &
nbsp;U0DBUF = dati; }/*UART0SendString-------------------------------------------------------*/void Uart0SendString( unsigned char *s) { & nbsp;while (*s !
= 0 ) //Invia ogni carattere della stringa s a turno Uart0Send(*s++); }/*UART0 accetta dati-----------------------------------
- -------------------*/unsigned char Uart0Receive( void ) {unsigned char data;while (!
( U0CSR&0x04 )); //chiedi se i dati sono stati ricevuti, altrimenti continua ad aspettare data=U0DBUF;//estrai i dati ricevutireturn data;&
nbsp; }/* funzione principale-------------------------------------------------------*/void main( void ) {
u nsigned char i,b; xtal_init(); Uart0Init(0x00, 0x00 ); //inizializza la UART0, imposta 1 bit di stop, nessuna parità & nbsp;Uart0SendString("Inserire stringa terminata con '@'!
& quot;); recv_count =0;while( 1 ) {while ( 1 ) &
nbsp; { b = Uart0Receive() Se b== '@' ) break; //Se viene ricevuto '@', uscire dal loop.
l oop, uscita stringa recv_buf[recv_count] = b;//se non è '@', continuare ad aggiungere caratteri all'array di caratteri recv_buf[] &
nbsp; recv_count++; }for ( i=0; i<recv_count; i++)="" [color="rgb(0," 136,=&
q uot;" 0)] ="" stringa di uscita[="" i][="" colore] Uart0Send(recv_buf); Uart0SendString ( ""); recv_count=0; &
n bsp; //reset } }Per prima cosa configurare la porta di I/O corrispondente a USART0: impostare UART0 sulla posizione opzionale 1 azzerando PECFRG.0, cioè RXD corrisponde a P0.2 e TXD a P0.3. Configurare quindi P0.2 e P0.3 come I/O del dispositivo esterno. Scegliere quindi la modalità UART e abilitare il ricevitore . modalità UART e abilitare il ricevitore. Configurare quindi i parametri di USART0: baud rate 115200, nessuna parità, bit di stop 1. Inviare quindi una stringa al PC: Please Input string ended with '@'! e poi utilizza while(1) per cercare di ottenere ogni carattere ricevuto. Quando questo carattere non è '@', significa che l'input non è ancora terminato, e continua ad aggiungere questo carattere all'array di caratteri recv_buf; quando questo carattere è esattamente '@', significa che l'input è terminato, e quindi salta fuori dal ciclo per inviare ogni carattere nel recv_buf al PC in ordine, e allo stesso tempo, azzera il recv_count. (5) Risultati sperimentaliInnanzitutto, completare la connessione hardware e aprire la porta seriale .
L o strumento di debug, configura i parametri come segue:
Fare clic su "Open Serial Port" (Apri porta seriale), quindi avviare il debug di IAR, lasciare che il programma venga eseguito , si vedrà che il debugger della porta seriale verrà eseguito .
N ella casella di ricezione dello strumento di debug seriale apparirà la stringa prevista:
Quindi, nella casella di testo di invio nella parte inferiore dello strumento di debug seriale, inserire "
H ello" come segue:
Dopo aver fatto clic su "Send", ci si potrebbe chiedere perché il CC2430 non restituisce il messaggio . Dopo aver fatto clic su "Invia", ci si può chiedere perché il CC2430 non restituisca ciò che si è digitato: è perché non si è terminato il messaggio con @. Digitiamo nuovamente "Zigbee!@" e facciamo clic su "Invia"; il risultato sarà il seguente:
g
Solo il contenuto previsto "Ciao Zigbee!" ora! Alla fine di questo esperimento ~ III. ConclusioneQuesto articolo presenta la scheda di sviluppo CC2430 e la comunicazione con il computer host. Con la base della comunicazione seriale, nella prossima sezione impariamo a conoscere il campionamento singolo ADC (conversione analogico-digitale). Utilizzando l'ADC, possiamo raccogliere il valore del sensore di temperatura sulla scheda di sviluppo e inviare il valore della temperatura attraverso la porta seriale al PC per visualizzarlo.
|