|
1. Collegamento tra i livelli superiori e inferiori In una rete di rilevamento wireless, il CC2430 deve inviare i dati raccolti al computer host (cioè PC) per l'elaborazione, mentre il computer host deve inviare le informazioni di controllo al CC2430. Tutto ciò è inseparabile dalla trasmissione di informazioni tra i due. In questa sezione impareremo come implementare la comunicazione tra porte seriali tra il PC e il CC2430. Il CC2430 include 2 interfacce di comunicazione serialiUSART0eUSART1, ogni porta seriale include due modalità:UART(asincrono) modalità,SPI(sincrona), questa sezione riguarda solo la modalità UART). 2. Esperimento di comunicazione con porte seriali(1) Introduzione all'esperimentoRiconosci la comunicazione tra la scheda di sviluppo e il PC: il PC invia una certa stringa al CC2430, e il CC2430 restituisce questa stringa al PC dopo averla ricevuta. (2) Preparazione sperimentalePrima di iniziare a scrivere codice, devi configurare le funzionalità hardware: connessione corretta + installare il driver seriale USB. Sono necessarie due connessioni hardware: La porta JTAG della scheda di sviluppo CC2430 → il debugger → porta USB del PC(Per il debug e il download di programmi) Porta seriale della scheda di sviluppo CC2430 → porta USB del PC(Per la comunicazione dati tra PC e CC2430) Poi devi installare il driver da USB a serial (Indirizzo di download) Per inviare dati alla porta seriale, uno strumento di debug della porta seriale (Indirizzo di download)。 (3) Diagramma di flusso del programma
(4) Codice sorgente sperimentale e analisi/*
Descrizione sperimentale: UART0, velocità di trasmissione 115200bps, PC invia una stringa a CC2430 (che termina con il carattere @), CC2430 restituisce la stringa dopo averla ricevuta
*/
#include
senza firmatura Charrecv_buf[300] = {0};
senza firmatura Charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
Voidxtal_init(Void)
{ SONNO &= ~0x04; //都上电
mentre(! (SONNO &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Scegli un oscillatore a cristallo a 32MHz SONNO |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
VoidUart0Init(senza firmatura CharStopBits,senza firmatura CharParità)
{ PERCFG&= ~0x01; Seleziona UART0 come prima posizione opzionale, cioè da RXD a P0.2 e da TXD a P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Imposta la modalità UART e attiva il ricevitore
U0GCR = 11; U0BAUD = 216; Imposta la velocità di baud UART0 a 115200bps, per quanto riguarda il motivo di 216 e 11, si prega di consultare il manuale cinese CC2430
U0UCR |= StopBits| Parità; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
Void Uart0Send(senza firmatura Chardati)
{
mentre(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = dati;
}
/*UART0发送字符串
-------------------------------------------------------*/
VoidUart0SendString(senza firmatura Char*s)
{
mentre(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
senza firmatura CharUart0Receive(Void)
{
senza firmatura Chardati;
mentre(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
Ritornodati;
}
/*主函数
-------------------------------------------------------*/
Voidmain(Void)
{
senza firmatura Chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Per favore, stringa di input terminava con '@'!");
recv_count =0;
mentre(1) {
mentre(1) { b = Uart0Ricevuto(); UART
se(b=='@')Pausa; Se viene ricevuto '@', esce dal loop e invia la stringa
recv_buf[recv_count] = b; Se non è '@', continua ad aggiungere caratteri all'array di caratteri recv_buf[] recv_count++; }
per(i=0; i<recv_count; i++)="" [color="rgb(0," 136,="" 0)]="" stringa di output[="" i][="" colore] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Per prima cosa, configura la porta I/O corrispondente a USART0: passa la coppiaPECFRG.0Imposta UART0 su posizione opzionale 1, cioè P0.2 per RXD e P0.3 per TXD. Poi configura P0.2 e P0.3 come I/O esterni dei dispositivi. Poi seleziona la modalità UART e attiva il ricevitore. Poi configura i parametri di USART0: baud rate 115200, nessuna parità e stop bit di 1. Poi invia una stringa al PC: Please Input string terminata con'@'! , e poi usa while(1) per continuare a cercare di ottenere ogni personaggio ricevuto. Quando questo personaggio non lo fa'@', significa che l'input non è completo, e si continua ad aggiungere questo carattere all'array di caratteri recv_buf; Questo personaggio è perfetto'@', l'input è completo, quindi il loop viene inviato al PC affinché ogni carattere del recv_buf venga inviato al PC, mentre il recv_count viene resettato. (5) Risultati sperimentaliPer prima cosa, completare la connessione hardware, aprire lo strumento di debug delle porte seriali e configurare i parametri come mostrato di seguito:
Clicca su "Apri porta seriale", poi avvia il debug IAR, lascia che il programma si segua e troverai la stringa attesa che appare nella casella di ricezione dello strumento di debug della porta seriale:
Poi inserisci "Hello" nella casella di testo invio sotto lo strumento di debug della porta seriale, come mostrato di seguito:
Dopo aver cliccato su "Invia", potresti chiederti perché il CC2430 non restituisca ciò che hai digitato, perché non sei finito in @. Digitiamo di nuovo "Zigbee!@", clicchiamo su "Invia" e il risultato è questo:
Il contenuto atteso "Ciao Zigbee!" apparirà. È finita! Questa è la fine dell'esperimento~ 3. ConclusioneQuesto articolo descrive la comunicazione tra la scheda di sviluppo CC2430 e il computer host. Ora che abbiamo le basi della comunicazione seriale, impariamo nel prossimo articolo del campionamento singolo ADC (conversione analogico-digitale). Con l'ADC, possiamo raccogliere il valore del sensore di temperatura sulla scheda di sviluppo e inviare il valore della temperatura al PC tramite la porta seriale per visualizzarlo.
|