|
1. Conectarea nivelurilor superioare și inferioare Într-o rețea wireless de detecție, CC2430 trebuie să trimită datele colectate către computerul gazdă (adică PC) pentru procesare, iar calculatorul gazdă trebuie să trimită informații de control către CC2430. Toate acestea sunt inseparabile de transmiterea informațiilor între cele două. În această secțiune, vom învăța cum să implementăm comunicarea prin port serial între PC și CC2430. CC2430 include 2 interfețe seriale de comunicareUSART0șiUSART1, fiecare port serial include două moduri:UART(asincron) mod,SPI(sincron), această secțiune tratează doar modul UART). 2. Experimentul de comunicare prin port serial(1) Introducere în experimentRealizează comunicarea dintre placa de dezvoltare și PC: PC-ul trimite un anumit șir către CC2430, iar CC2430 returnează acest șir către PC după ce îl primește. (2) Pregătirea experimentalăÎnainte să începi să scrii cod, trebuie să configurezi facilitățile hardware: conexiunea corectă + instalarea driverului USB serial. Sunt necesare două conexiuni hardware: Portul JTAG al plăcii de dezvoltare CC2430 → depanorul → portul USB al PC-ului(Pentru depanare și descărcare a programelor) Portul serial al plăcii de dezvoltare CC2430 → portul USB al PC-ului(Pentru comunicarea datelor între PC și CC2430) Apoi trebuie să instalezi driverul USB la serial (Adresă de descărcare) Pentru a trimite date către portul serial, un instrument de depanare a porturilor seriale (Adresă de descărcare)。 (3) Diagramă de flux a programului
(4) Cod sursă experimental și analiză/*
Descriere experimentală: UART0, rată de baud 115200bps, PC trimite un șir către CC2430 (care se termină cu caracterul @), CC2430 returnează șirul după ce îl primește
*/
#include
nesemnat Charrecv_buf[300] = {0};
nesemnat Charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
Voidxtal_init(Void)
{ SOMN &= ~0x04; //都上电
în timp ce(! (SOMN &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Alege un oscilator cu cristal de 32MHz SLEEP |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
VoidUart0Init(nesemnat CharStopBits,nesemnat CharParitate)
{ PERCFG&= ~0x01; Selectează UART0 ca prima poziție opțională, adică RXD către P0.2 și TXD către P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Setează pe modul UART și activează receptorul
U0GCR = 11; U0BAUD = 216; Setează rata UART0 baud la 115200bps, iar de ce este 216 și 11, te rugăm să consulți manualul chinezesc CC2430
U0UCR |= StopBits| Paritate; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
Void Uart0Send(nesemnat Chardate)
{
în timp ce(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = date;
}
/*UART0发送字符串
-------------------------------------------------------*/
VoidUart0SendString(nesemnat Char*s)
{
în timp ce(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
nesemnat CharUart0Receive(Void)
{
nesemnat Chardate;
în timp ce(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
Întoarcereadate;
}
/*主函数
-------------------------------------------------------*/
Voidmain(Void)
{
nesemnat Chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Vă rog, șirul de introducere s-a terminat cu '@'!");
recv_count =0;
în timp ce(1) {
în timp ce(1) { b = Uart0Receive(); UART
dacă(b=='@')Pauză; Dacă '@' este primit, acesta sare din buclă și produce șirul
recv_buf[recv_count] = b; Dacă nu este '@', continuați să adăugați caractere în tabloul de caractere recv_buf[] recv_count++; }
pentru(i=0; i<recv_count; i++)="" [color="rgb(0," 136,="" 0)]="" șirul de ieșire[="" i][="" culoare] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Mai întâi, configurează portul I/O corespunzător USART0: pasează perecheaPECFRG.0Setează UART0 pe poziția opțională 1, adică P0.2 pentru RXD și P0.3 pentru TXD. Apoi configurează P0.2 și P0.3 ca I/O extern al dispozitivelor. Apoi selectează modul UART și activează receptorul. Apoi configurează parametrii USART0: rată de baud 115200, fără paritate și bit de oprire de 1. Apoi trimite un șir către PC: Please Șirul de intrare s-a terminat cu'@'! , și apoi folosește while(1) pentru a încerca să obții fiecare caracter primit. Când acest personaj nu o face'@', înseamnă că intrarea nu este completă și continuă să adaugi acest caracter la tabloul de caractere recv_buf; Acest personaj este exact ce trebuie'@', intrarea este completă, astfel că bucla este trimisă către PC pentru ca fiecare caracter din recv_buf să fie trimis către PC, în timp ce resetează recv_count. (5) Rezultate experimentaleMai întâi, completați conexiunea hardware, deschideți unealta de depanare a porturilor seriale și configurați parametrii așa cum se arată mai jos:
Apasă pe "Open Serial Port", apoi începe depanarea IAR, lasă programul să ruleze, iar în caseta de recepție a instrumentului de depanare a porturilor seriale vei vedea șirul așteptat:
Apoi introduceți "Hello" în caseta de text send de sub instrumentul de depanare a porturilor seriale, așa cum se arată mai jos:
După ce ai dat click pe "Trimite", s-ar putea să te întrebi de ce CC2430 nu returnează ceea ce ai tastat, pentru că nu ai terminat cu @. Tastăm din nou "Zigbee!@", dăm click pe "Trimite" și rezultatul arată astfel:
Conținutul așteptat "Hello Zigbee!" va apărea. S-a terminat! Acesta este sfârșitul experimentului~ 3. ConcluzieAcest articol descrie comunicarea dintre placa de dezvoltare CC2430 și computerul gazdă. Acum că avem bazele comunicării seriale, să învățăm despre eșantionarea unică ADC (conversie analog-digitală) în secțiunea următoare. Cu ADC, putem colecta valoarea senzorului de temperatură de pe placa de dezvoltare și putem trimite valoarea de temperatură către PC prin portul serial pentru a o afișa.
|