|
1. Propojení horní a dolní úrovně V bezdrátové snímací síti musí CC2430 odesílat shromážděná data hostitelskému počítači (tj. PC) k jejich zpracování, zatímco hostitelský počítač musí odeslat řídicí informace CC2430. To vše je neoddělitelné od přenosu informací mezi oběma. V této části se naučíme, jak implementovat komunikaci sériového portu mezi PC a CC2430. CC2430 obsahuje 2 sériová komunikační rozhraníUSART0aUSART1, každý sériový port obsahuje dva režimy:UART(asynchronní) mód,SPI(synchronní) režim, tato sekce se zabývá pouze režimem UART). 2. Experiment se sériovou portovou komunikací(1) Úvod do experimentuUvědomte si komunikaci mezi vývojovou descí a PC: PC odešle určitý řetězec CC2430 a CC2430 tento řetězec vrátí PC po jeho přijetí. (2) Experimentální přípravaNež začnete psát kód, musíte nastavit hardwarové vybavení: správné připojení + nainstalovat USB sériový ovladač. Jsou potřeba dvě hardwarová připojení: JTAG port vývojové desky CC2430 → debuggerem → USB portu PC(Pro ladění a stahování programů) Sériový port vývojové desky CC2430 → USB port PC(Pro datovou komunikaci mezi PC a CC2430) Pak je potřeba nainstalovat USB na sériový ovladač (Adresa ke stažení) Pro odeslání dat na sériový port je použit nástroj pro ladění sériových portů (Adresa ke stažení)。 (3) Programový diagram
(4) Experimentální zdrojový kód a analýza/*
Experimentální popis: UART0, rychlost přenosu 115200bps, PC odešle řetězec na CC2430 (končící znakem @), CC2430 řetězec vrátí po jeho přijetí
*/
#include
nepodepsáno charrecv_buf[300] = {0};
nepodepsáno charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
prázdnotaxtal_init(prázdnota)
{ SPÁT &= ~0x04; //都上电
zatímco(! (SPÁT &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Vyberte krystalový oscilátor s frekvencí 32 MHz SPÁT |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
prázdnotaUart0Init(nepodepsáno charStopBits,nepodepsáno charParita)
{ PERCFG&= ~0x01; Vyberte UART0 jako první volitelnou pozici, tedy RXD na P0.2 a TXD na P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Nastavte režim UART a povolte přijímač
U0GCR = 11; U0BAUD = 216; Nastavte rychlost UART0 na 115200 bps, proč je to 216 a 11, podívejte se prosím na čínský manuál CC2430
U0UCR |= StopBits| Parita; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
prázdnota Uart0Send(nepodepsáno chardata)
{
zatímco(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = data;
}
/*UART0发送字符串
-------------------------------------------------------*/
prázdnotaUart0SendString(nepodepsáno char*s)
{
zatímco(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
nepodepsáno charUart0Receive(prázdnota)
{
nepodepsáno chardata;
zatímco(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
návratdata;
}
/*主函数
-------------------------------------------------------*/
prázdnotamain(prázdnota)
{
nepodepsáno chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Prosím, zadejte řetězec končící na '@'!");
recv_count =0;
zatímco(1) {
zatímco(1) { b = Uart0Receive(); UART
pokud(b=='@')Pauza; Pokud je přijato '@', vyskočí ze smyčky a výstup řetězce
recv_buf[recv_count] = b; Pokud to není '@', pokračujte v přidávání znaků do pole znaků recv_buf[] recv_count++; }
pro(i=0; i<recv_count; i++)="" [color="rgb(0," 136,="" 0)]="" výstupní řetězec[="" i][="" barva] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Nejprve nakonfigurujte I/O port odpovídající USART0: předejte dvojiciPECFRG.0Nastavte UART0 na volitelnou pozici 1, tj. P0.2 pro RXD a P0.3 pro TXD. Pak nakonfigurujte P0.2 a P0.3 jako externí zařízení I/O. Pak zvolte režim UART a zapněte receiver. Poté nakonfigurujte parametry USART0: rychlost přenosu 115200, žádná parita a stop bit 1. Pak pošlete řetězec PC: Zadejte řetězec končící na'@'! , a pak použij while(1) k tomu, abys se snažil získat všechny znaky. Když to tato postava neudělá'@', to znamená, že vstup není kompletní, a pokračujte v přidávání tohoto znaku do znakového pole recv_buf; Tahle postava je přesně ta pravá'@', vstup je dokončen, takže smyčka je odeslána na PC, aby každý znak v recv_buf byl odeslán PC, přičemž recv_count se resetuje. (5) Experimentální výsledkyNejprve dokončit hardwarové připojení, otevřít nástroj pro ladění sériových portů a nastavit parametry podle níže:
Klikněte na "Open Serial Port", poté spusťte ladění IAR, nechte program běžet a očekávaný řetězec se objeví v přijímací krabici v nástroji pro ladění sériových portů:
Poté zadejte "Hello" do textového pole send pod nástrojem pro ladění sériových portů, jak je uvedeno níže:
Po kliknutí na "Odeslat" se možná budete ptát, proč CC2430 nevrátí to, co jste napsali, protože jste neskončili na @. Znovu napíšeme "Zigbee!@", klikneme na "Odeslat" a výsledek vypadá takto:
Očekávaný obsah "Hello Zigbee!" se objeví. Je konec! Tímto experiment končí~ 3. ZávěrTento článek popisuje komunikaci mezi vývojovou descí CC2430 a hostitelským počítačem. Nyní, když máme základy sériové komunikace, pojďme se v další části seznámit s ADC (analogovo-digitálním převodem) jedním vzorkováním. S ADC můžeme shromáždit hodnotu teplotního senzoru na vývojové desce a poslat ji PC přes sériový port, aby ji zobrazil.
|