|
1. Viršutinio ir apatinio lygių sujungimas Belaidžio jutimo tinkle CC2430 turi siųsti surinktus duomenis į pagrindinį kompiuterį (ty kompiuterį) apdoroti, o pagrindinis kompiuteris turi siųsti valdymo informaciją į CC2430. Visa tai neatsiejama nuo informacijos perdavimo tarp jų. Šiame skyriuje sužinosime, kaip įgyvendinti nuosekliojo prievado ryšį tarp kompiuterio ir CC2430. CC2430 turi 2 nuosekliojo ryšio sąsajasUSART0irUSART1, kiekvienas nuoseklusis prievadas apima du režimus:UART(asinchroninis) režimas,SPI(sinchroninis) režimas, šiame skyriuje kalbama tik apie UART režimą). 2. Nuosekliojo prievado ryšio eksperimentas(1) Įvadas į eksperimentąRealizuokite ryšį tarp kūrimo plokštės ir kompiuterio: kompiuteris siunčia tam tikrą eilutę į CC2430, o CC2430 grąžina šią eilutę į kompiuterį, kai ją gavo. (2) Eksperimentinis pasirengimasPrieš pradėdami rašyti kodą, turite nustatyti aparatūros priemones: teisingas prijungimas + įdiekite USB nuosekliąją tvarkyklę. Reikalingos dvi aparatūros jungtys: CC2430 kūrimo plokštės JTAG prievadas → derintuvas → kompiuterio USB prievadas(Programų derinimui ir atsisiuntimui) CC2430 kūrimo plokštės nuoseklusis prievadas → kompiuterio USB prievadas(Duomenų perdavimui tarp kompiuterio ir CC2430) Tada turite įdiegti USB į nuosekliąją tvarkyklę (Atsisiuntimo adresas) Norint siųsti duomenis į nuoseklųjį prievadą, nuosekliojo prievado derinimo įrankis (Atsisiuntimo adresas)。 (3) Programos schema
(4) Eksperimentinis šaltinio kodas ir analizė/*
Eksperimentinis aprašymas: UART0, perdavimo sparta 115200bps, kompiuteris siunčia eilutę į CC2430 (baigiasi @ simboliu), CC2430 grąžina eilutę ją gavus
*/
#include
nepasirašytas anglisrecv_buf[300] = {0};
nepasirašytas anglisrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
tuščiaxtal_init (tuščia)
{ MIEGAS &= ~0x04; //都上电
Nors(! (MIEGO IR0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Pasirinkite 32 MHz kristalinį osciliatorių MIEGO REŽIMAS |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
tuščiaUart0Init(nepasirašytas anglisStopBits,nepasirašytas anglisParitetas)
{ PERCFG&= ~0x01; Pasirinkite UART0 kaip pirmąją pasirenkamą padėtį, tai yra, RXD į P0.2 ir TXD į P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Nustatykite UART režimą ir įjunkite imtuvą
U0GCR = 11; U0BAUD = 216; Nustatykite UART0 perdavimo greitį į 115200 bps, kodėl jis yra 216 ir 11, skaitykite CC2430 kinų kalbos vadovą
U0UCR |= StopBits| Paritetas; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
tuščia Uart0Siųsti(nepasirašytas anglisduomenys)
{
Nors(U0CSR &0x01); //等待UART空闲时发送数据 U0DBUF = duomenys;
}
/*UART0发送字符串
-------------------------------------------------------*/
tuščiaUart0SendString(nepasirašytas anglis*s)
{
Nors(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
nepasirašytas anglisUart0Gauti(tuščia)
{
nepasirašytas anglisduomenys;
Nors(! (U0CSR &0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
grįžtiduomenys;
}
/*主函数
-------------------------------------------------------*/
tuščiapagrindinis(tuščia)
{
nepasirašytas anglisi, b;
xtal_init ();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Prašome įvesti eilutę baigėsi "@"!");
recv_count =0;
Nors(1) {
Nors(1) { b = Uart0Gauti(); UART
jei(b =='@')pertrauka; Jei gaunamas "@", jis iššoka iš ciklo ir išveda eilutę
recv_buf[recv_count] = b; Jei jis nėra '@', toliau įtraukite simbolius į simbolių masyvą recv_buf[] recv_count++; }
dėl(i =0; I<recv_count; i++)="" [color="rgb(0," 136,="" 0)]="" išvesties eilutė[="" i][="" spalva] Uart0Siųsti(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Pirmiausia sukonfigūruokite I/O prievadą, atitinkantį USART0: perduokite porąPECFRG.0Nustatykite UART0 į pasirenkamą 1 padėtį, ty P0.2 RXD ir P0.3 TXD. Tada sukonfigūruokite P0.2 ir P0.3 kaip išorinio įrenginio įvesties / išvesties. Tada pasirinkite UART režimą ir įjunkite imtuvą. Tada sukonfigūruokite USART0 parametrus: perdavimo sparta 115200, be pariteto ir 1 stabdymo bitas. Tada nusiųskite eilutę į kompiuterį: Įvesties eilutė baigėsi'@'! , o tada naudokite while(1), kad toliau bandytumėte gauti kiekvieną simbolį. Kai šis simbolis to nedaro'@', tai reiškia, kad įvestis nėra baigta, ir toliau pridėkite šį simbolį prie simbolių masyvo recv_buf; Šis simbolis yra teisingas'@', įvestis baigta, todėl ciklas siunčiamas į kompiuterį, kad kiekvienas recv_buf simbolis būtų siunčiamas į kompiuterį, iš naujo nustatant recv_count. (5) Eksperimento rezultataiPirmiausia užbaikite aparatūros ryšį, atidarykite nuosekliojo prievado derinimo įrankį ir sukonfigūruokite parametrus, kaip parodyta toliau:
Spustelėkite "Atidaryti nuoseklųjį prievadą", tada pradėkite IAR derinimą, leiskite programai paleisti ir rasite laukiamą eilutę, rodomą nuosekliojo prievado derinimo įrankio gavimo laukelyje:
Tada įveskite "Sveiki" siuntimo teksto laukelyje po nuosekliojo prievado derinimo įrankiu, kaip parodyta toliau:
Spustelėję "Siųsti", jums gali kilti klausimas, kodėl CC2430 negrąžina to, ką įvedėte, nes nesibaigėte @. Dar kartą įvedame "Zigbee!@", spustelėkite "Siųsti" ir rezultatas atrodo taip:
Pasirodys laukiamas turinys "Sveiki, Zigbee!". Viskas baigta! Tai eksperimento pabaiga~ 3. IšvadaŠiame straipsnyje aprašomas ryšys tarp CC2430 kūrimo plokštės ir pagrindinio kompiuterio. Dabar, kai turime nuosekliojo ryšio pagrindus, kitame skyriuje sužinokime apie ADC (analoginio skaitmeninio konvertavimo) vienkartinę atranką. Naudodami ADC galime surinkti temperatūros jutiklio vertę kūrimo plokštėje ir nusiųsti temperatūros vertę į kompiuterį per nuoseklųjį prievadą, kad ją parodytume.
|