|
1. A felső és alsó szintek összekapcsolása Egy vezeték nélküli érzékelős hálózatban a CC2430-nak a gyűjtött adatokat a gazdagépnek (azaz PC-nek) kell továbbítania feldolgozásra, a host-számítógépnek pedig vezérlő információkat kell továbbítania a CC2430-nak. Mindez elválaszthatatlanul kapcsolódik az információátvitelhez a kettő között. Ebben a részben megtanuljuk, hogyan lehet megvalósítani a sorozatos port kommunikációt a PC és a CC2430 között. A CC2430 két soros kommunikációs interfészt tartalmazUSART0ésUSART1, minden soros port két módot tartalmaz:UART(aszinkron) mód,SPI(szinkron) mód, ez a rész csak UART móddal foglalkozik). 2. Soros port kommunikációs kísérlet(1) Bevezetés a kísérlethezIsmerd meg a fejlesztő panel és a PC közötti kommunikációt: a PC egy bizonyos láncsort küld a CC2430-nak, és a CC2430 ezt a sorozatot visszaadja a PC-nek, miután megkapta. (2) Kísérleti előkészítésMielőtt elkezdené a kódot írni, be kell állítanod a hardveres funkciókat: helyes kapcsolat + telepíteni az USB soros drivert. Két hardverkapcsolat szükséges: A CC2430 fejlesztőlap JTAG portja → a hibakereső → a PC USB portja(Hibakereséshez és programok letöltéséhez) A CC2430 fejlesztőlap soros portja → PC USB portja(Adatátvitel PC és CC2430 között) Ezután telepítened kell az USB-t a sorozatos meghajtóra (Letöltési cím) Az adat elküldéséhez a soros porthoz egy soros port hibakereső eszköz (Letöltési cím)。 (3) Programáramlási diagram
(4) Kísérleti forráskód és elemzés/*
Kísérleti leírás: UART0, baud sebesség 115200bps, PC egy stringet küld CC2430-nak (@ karakterrel végződik), CC2430 pedig visszaadja a láncsort a megérkezése után
*/
#include
Aláírás nélkül charrecv_buf[300] = {0};
Aláírás nélkül charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
Semmixtal_init(Semmi)
{ ALVÁS &= ~0x04; //都上电
miközben(! (ALVÁS &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Válassz egy 32 MHz-es kristályoscillátort ALVÁS |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
SemmiUart0Init(Aláírás nélkül charStopBits,Aláírás nélkül charParity)
{ PERCFG&= ~0x01; Válaszd az UART0-t az első opcionális pozíciónak, vagyis az RXD-től P0.2-ig, TXD-től P0.3-ig P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Állítsd UART módra, és engedélyezd a vevőt
U0GCR = 11; U0BAUD = 216; Állítsd be az UART0 baud sebességet 115200 bps-re, és hogy miért van 216 és 11, kérjük, lásd a CC2430 kínai kézikönyvet
U0UCR |= StopBits| Parititás; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
Semmi Uart0Send(Aláírás nélkül charadatok)
{
miközben(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = adat;
}
/*UART0发送字符串
-------------------------------------------------------*/
SemmiUart0SendString(Aláírás nélkül char*s)
{
miközben(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
Aláírás nélkül charUart0Receive(Semmi)
{
Aláírás nélkül charadatok;
miközben(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
Visszatérésadatok;
}
/*主函数
-------------------------------------------------------*/
Semmimain(Semmi)
{
Aláírás nélkül chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Kérlek, a bemeneti lánc '@'-vel végződött!");
recv_count =0;
miközben(1) {
miközben(1) { b = Uart0Receive(); UART
ha(b=='@')Szünet; Ha a '@' megérkezik, kiugrik a hurkokból, és kimenetelnek adja a húrt
recv_buf[recv_count] = b; Ha nem '@', folytasd a karakterek hozzáadását a karaktertömbbe recv_buf[] recv_count++; }
for(i=0; i<recv_count; i++)="" [color="rgb(0," 136,="" 0)]="" kimeneti string[="" i][="" szín] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Először konfiguráljuk az USART0-hoz tartozó I/O portot: add át a pártPECFRG.0Állítsd be az UART0-t opcionális 1-es pozícióra, azaz P0.2-t az RXD-hez és P0.3-at a TXD-hez. Ezután konfiguráld a P0.2-t és P0.3-at külső eszköz I/O-ként. Ezután válaszd az UART módot, és engedélyezd a vevőt. Ezután konfiguráld az USART0 paramétereit: baud sebesség 115200, nincs paritetus, és 1 megállító bit. Ezután küldj egy stringet a PC-nek: Please Input string véget ér a'@'! , majd a while(1)-et használva, hogy minden karaktert megkapjon. Amikor ez a karakter nem teszi meg'@', ez azt jelenti, hogy a bemenet nem teljes, és folytatjuk ezt a karaktert a karaktertömbbe való hozzáadással recv_buf; Ez a karakter pont tökéletes'@', a bemenet teljes, így a hurkot elküldik a PC-nek, hogy minden karakter a recv_buf része elküldje a PC-nek, miközben a recv_count visszaállítják. (5) Kísérleti eredményekElőször fejezze be a hardverkapcsolatot, nyissa meg a soros port hibakereső eszközt, és konfigurálja a paramétereket az alábbiak szerint:
Kattints a "Soros portot nyisd ki", majd kezdd el az IAR hibakeresést, hagyd futni a programot, és a sorozat megtalálható a sorozat hibakereső eszközének vevődobozában:
Ezután írja be a "Hello" betűt a soros port hibakereső eszköz alatti küldési szövegmezőbe, ahogy az alábbiakban látható:
Miután rákattintottál a "Küldés" gombra, talán azon tűnődsz, miért nem adja vissza a CC2430 azt, amit írtál, hiszen nem @ jelzéssel zártál. Újra beírjuk a "Zigbee!@"-t, rákattintunk a "Küldés" gombra, és az eredmény így néz ki:
Megjelenik a várt tartalom: "Hello Zigbee!" Vége! Ez a kísérlet vége~ 3. KövetkeztetésEz a cikk a CC2430 fejlesztő panel és a hostszámítógép közötti kommunikációt írja le. Most, hogy megvannak a soros kommunikáció alapjai, a következő szakaszban ismerjük meg az ADC (analóg-digitális átalakítás) egyetlen mintavételezést. Az ADC-vel összegyűjthetjük a hőmérséklet-érzékelő értékét a fejlesztő panelen, és elküldhetjük a hőmérséklet értékét a PC-nek a sorozatos porton keresztül, hogy megjelenítsük.
|