|
1. Povezava zgornje in spodnje ravni V brezžičnem senzorskem omrežju mora CC2430 poslati zbrane podatke gostiteljskemu računalniku (tj. PC) za obdelavo, gostiteljski računalnik pa mora poslati kontrolne informacije CC2430. Vse to je neločljivo povezano s prenosom informacij med obema. V tem razdelku se bomo naučili, kako implementirati serijsko komunikacijo med računalnikom in CC2430. CC2430 vključuje 2 serijska komunikacijska vmesnikaUSART0inUSART1, vsak serijski port vključuje dva načina:UART(asinhroni) način,SPI(sinhroni) način, ta razdelek obravnava le UART način). 2. Eksperiment s serijsko portno komunikacijo(1) Uvod v eksperimentZavedajte se komunikacije med razvojno ploščo in računalnikom: Računalnik pošlje določen niz CC2430, CC2430 pa ta niz vrne računalniku po prejemu računalnika. (2) Eksperimentalna pripravaPreden začneš pisati kodo, moraš nastaviti strojno opremo: pravilno povezavo + namestiti USB serijski gonilnik. Potrebni sta dve strojni povezavi: JTAG port razvojne plošče CC2430 → razhroščevalnik → USB priključku računalnika(Za odpravljanje napak in prenos programov) Serijski priključek razvojne plošče CC2430 → USB priključka PC-ja(Za podatkovno komunikacijo med PC in CC2430) Nato moraš namestiti USB na serijski gonilnik (Naslov za prenos) Za pošiljanje podatkov na serijski priključek je uporabljeno orodje za razhroščevanje serijskih vrat (Naslov za prenos)。 (3) Shema poteka programa
(4) Eksperimentalna izvorna koda in analiza/*
Eksperimentalni opis: UART0, hitrost prenosa 115200bps, PC pošlje niz na CC2430 (konča se z @ znakom), CC2430 vrne niz po prejemu
*/
#include
nepodpisano charrecv_buf[300] = {0};
nepodpisano charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
prazninaxtal_init(praznina)
{ SPANJE &= ~0x04; //都上电
medtem ko(! (SPANJE &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Izberite 32MHz kristalni oscilator SPANJE |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
prazninaUart0Init(nepodpisano charStopBits,nepodpisano charPariteta)
{ PERCFG&= ~0x01; Izberite UART0 kot prvo opcijsko pozicijo, torej RXD na P0.2 in TXD na P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Nastavite na način UART in omogočite sprejemnik
U0GCR = 11; U0BAUD = 216; Nastavite hitrost prenosa UART0 na 115200 bps, za razlog za 216 in 11 prosim glejte kitajski priročnik CC2430
U0UCR |= StopBits| Enakost; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
praznina Uart0Send(nepodpisano charpodatki)
{
medtem ko(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = podatki;
}
/*UART0发送字符串
-------------------------------------------------------*/
prazninaUart0SendString(nepodpisano char*s)
{
medtem ko(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
nepodpisano charUart0Receive(praznina)
{
nepodpisano charpodatke;
medtem ko(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
Vrnitevpodatke;
}
/*主函数
-------------------------------------------------------*/
prazninamain(praznina)
{
nepodpisano chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Prosim, vnesite niz, ki se konča z '@'!");
recv_count =0;
medtem ko(1) {
medtem ko(1) { b = Uart0Receive(); UART
če(b=='@')prekinitev; Če prejme '@', skoči iz zanke in izhodi niz
recv_buf[recv_count] = b; Če ni '@', nadaljujte z dodajanjem znakov v polje znakov recv_buf[] recv_count++; }
za(i=0; i<recv_count; i++)="" [color="rgb(0," 136,="" 0)]="" izhodni niz[="" i][="" barva] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Najprej konfigurirajte vhodno/izhodni priključek, ki ustreza USART0: prenesite parPECFRG.0Nastavite UART0 na opcijski položaj 1, tj. P0.2 za RXD in P0.3 za TXD. Nato konfiguriraj P0.2 in P0.3 kot zunanji vhodno/izhodni sistem naprav. Nato izberi način UART in omogoči sprejemnik. Nato konfigurirajte parametre USART0: hitrost prenosa 115200, brez paritete in stop bit 1. Nato pošlji niz računalniku: Please Input string, ki se konča z'@'! , in nato uporabim while(1), da poskušam pridobiti vse znake. Ko ta lik tega ne počne'@', to pomeni, da vhod ni popoln, in nadaljujte z dodajanjem tega znaka v polje znakov recv_buf; Ta lik je ravno pravi'@', vhod je zaključen, zato se zanka pošlje PC-ju, da se vsak znak v recv_buf pošlje PC-ju, medtem ko se recv_count ponastavi. (5) Eksperimentalni rezultatiNajprej dokončajte strojno povezavo, odprite orodje za razhroščevanje serijskih vrat in nastavite parametre, kot je prikazano spodaj:
Kliknite "Odpri serijski port", nato začnite z IAR odpravljanjem napak, pustite, da program teče, in pričakovani niz se bo pojavil v sprejemnem polju orodja za razhroščevanje serijskih vrat:
Nato vpišite "Hello" v polje za pošiljanje pod orodjem za razhroščevanje serijskih portov, kot je prikazano spodaj:
Po kliku "Pošlji" se boste morda spraševali, zakaj CC2430 ne vrne tistega, kar ste vpisali, saj niste končali z @. Ponovno vpišemo "Zigbee!@", kliknemo "Pošlji" in rezultat izgleda takole:
Pričakovana vsebina "Hello Zigbee!" se bo pojavila. Konec je! To je konec eksperimenta~ 3. ZaključekTa članek opisuje komunikacijo med razvojno ploščo CC2430 in gostiteljskim računalnikom. Zdaj, ko imamo osnove serijske komunikacije, se v naslednjem razdelku poglejmo o ADC (analogno-digitalno pretvorbo) enojnem vzorčenju. Z ADC lahko zbiramo vrednost temperaturnega senzorja na razvojni plošči in jo pošljemo računalniku preko serijskega priključka, da jo prikaže.
|