|
1. Ylä- ja alakerrosten yhdistäminen Langattomassa tunnistusverkossa CC2430:n täytyy lähettää kerätty data isäntätietokoneelle (eli PC:lle) käsiteltäväksi, ja isäntätietokoneen täytyy lähettää ohjaustiedot CC2430:lle. Kaikki tämä on erottamatonta tiedonvälityksestä näiden kahden välillä. Tässä osiossa opimme, miten toteuttaa sarjaporttiviestintä PC:n ja CC2430:n välillä. CC2430 sisältää kaksi sarjaliitäntääUSART0jaUSART1, jokaisessa sarjaportissa on kaksi tilaa:UART(asynkroninen) tila,SPI(synkroninen) tila, tämä osio käsittelee vain UART-tilaa). 2. Sarjaporttiviestintäkokeilu(1) Johdanto kokeeseenYmmärrä viestintä kehityskortin ja PC:n välillä: PC lähettää tietyn merkkijonon CC2430:lle, ja CC2430 palauttaa tämän merkkijonon PC:lle vastaanotettuaan. (2) Kokeellinen valmisteluEnnen koodin kirjoittamisen aloittamista sinun täytyy asettaa laitteistotoiminnot: oikea yhteys + asenna USB-sarjaajuri. Tarvitaan kaksi laitteistoliitäntää: CC2430-kehityskortin JTAG-portti → debuggerin → PC:n USB-portin(Virheenkorjaukseen ja ohjelmien lataamiseen) CC2430-kehityskortin sarjaportti → PC:n USB-portti(Dataviestintään PC:n ja CC2430:n välillä) Sitten sinun täytyy asentaa USB-sarjaajuri (Lataa osoite) Datan lähettämiseksi sarjaportille käytetään sarjaportin virheenkorjaustyökalua (Lataa osoite)。 (3) Ohjelman kaavio
(4) Kokeellinen lähdekoodi ja analyysi/*
Kokeellinen kuvaus: UART0, baudinopeus 115200bps, PC lähettää merkkijonon CC2430:lle (päättyen @-merkkiin), CC2430 palauttaa merkkijonon vastaanotettuaan sen
*/
#include
Allekirjoittamaton charrecv_buf[300] = {0};
Allekirjoittamaton charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
voidxtal_init(void)
{ UNI &= ~0x04; //都上电
kun(! (UNI &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Valitse 32MHz:n kideoskillaattori UNI |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
voidUart0Init(Allekirjoittamaton charStopBits,Allekirjoittamaton charParity)
{ PERCFG&= ~0x01; Valitse UART0 ensimmäiseksi valinnaiseksi paikaksi, eli RXD:stä P0.2:een ja TXD:stä P0.3:een P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Aseta UART-tilaan ja ota vastaanotin käyttöön
U0GCR = 11; U0BAUD = 216; Aseta UART0:n baudinopeudeksi 115200 bps, ja miksi se on 216 ja 11, katso CC2430:n kiinalainen käsikirja
U0UCR |= StopBits| Tasavertaisuus; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
void Uart0Send(Allekirjoittamaton chardata)
{
kun(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = data;
}
/*UART0发送字符串
-------------------------------------------------------*/
voidUart0SendString(Allekirjoittamaton char*s)
{
kun(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
Allekirjoittamaton charUart0Receive(void)
{
Allekirjoittamaton chardataa;
kun(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
Paluudataa;
}
/*主函数
-------------------------------------------------------*/
voidpää(void)
{
Allekirjoittamaton chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Ole hyvä ja syötä merkkijono, joka päättyy '@'!");
recv_count =0;
kun(1) {
kun(1) { b = Uart0Receive(); UART
jos(b=='@')Tauko; Jos '@' vastaanotetaan, se hyppää silmukasta ulos ja tuottaa merkkijonon
recv_buf[recv_count] = b; Jos se ei ole '@', jatka merkkien lisäämistä merkkitaulukkoon recv_buf[] recv_count++; }
for(i=0; minä<recv_count; i++)="" [color="rgb(0," 136,="" 0)]="" ulostulomerkkijono[="" i][="" väri] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Ensiksi konfiguroi USART0:n mukainen I/O-portti: välitä pariPECFRG.0Aseta UART0 valinnaiseen paikkaan 1, eli P0.2 RXD:lle ja P0.3 TXD:lle. Sitten konfiguroi P0.2 ja P0.3 ulkoiseksi laitteen I/O:ksi. Valitse sitten UART-tila ja ota vastaanotin käyttöön. Sitten konfiguroi USART0:n parametrit: baudinopeus 115200, ei pariteettia ja stop-bitti 1. Lähetä sitten merkkijono PC:lle: Please Input -merkkijono, joka päättyy'@'! , ja käytä while(1):tä yrittääkseni saada jokaisen hahmon vastaanotettua. Kun tämä hahmo ei tee sitä'@', se tarkoittaa, että syöte ei ole täydellinen, ja jatkaa tämän merkin lisäämistä merkkitaulukkoon recv_buf; Tämä hahmo on juuri sopiva'@', syöte on valmis, joten silmukka lähetetään PC:lle, jotta jokainen recv_buf:n hahmo lähetetään PC:lle samalla kun recv_count nollataan. (5) Kokeelliset tuloksetEnsiksi viimeistele laitteistoliitäntä, avaa sarjaportin virheenkorjaustyökalu ja määritä parametrit alla esitetyn mukaisesti:
Klikkaa "Avaa sarjaportti", aloita IAR-virheenkorjaus, anna ohjelman toimia, ja näet odotetun merkkijonon vastaanottolaatikosta sarjaportin debuggaustyökalussa:
Sitten kirjoita "Hello" lähetä-tekstikenttään sarjaportin virheenkorjaustyökalun alapuolelle, kuten alla on esitetty:
Kun olet klikannut "Lähetä", saatat ihmetellä, miksi CC2430 ei palauta kirjoittamaasi tiedostoa, koska et päättänyt @-arvoon. Kirjoitamme "Zigbee!@" uudelleen, klikkaamme "Lähetä" ja tulos näyttää tältä:
Odotettu sisältö "Hello Zigbee!" ilmestyy. Se on ohi! Tämä on kokeen loppu~ 3. JohtopäätösTässä artikkelissa kuvataan viestintää CC2430-kehityskortin ja isäntätietokoneen välillä. Nyt kun meillä on sarjaviestinnän perusteet, opitaan seuraavassa osiossa ADC:stä (analogisesta digitaaliseksi muunnos) yksittäisnäytteenotteesta. ADC:n avulla voimme kerätä lämpötila-anturin arvon kehityskortilta ja lähettää sen PC:lle sarjaportin kautta näytettäväksi.
|