|
1. Połączenie górnego i dolnego poziomu W sieci bezprzewodowej CC2430 musi przesłać zebrane dane do komputera hosta (czyli PC) w celu ich przetwarzania, a komputer gospodarza musi przesłać informacje sterujące do CC2430. To wszystko jest nierozerwalne z przekazywaniem informacji między nimi. W tej sekcji nauczymy się, jak zaimplementować komunikację portową szeregową między komputerem PC a CC2430. CC2430 wyposażony jest w 2 interfejsy komunikacji szeregowejUSART0iUSART1, każdy port szeregowy zawiera dwa tryby:UART(tryb asynchroniczny),SPI(tryb synchroniczny), ta sekcja dotyczy tylko trybu UART). 2. Eksperyment komunikacji szeregowej z portem szeregowym(1) Wprowadzenie do eksperymentuZrozum komunikację między płytą deweloperską a komputerem: PC wysyła określony ciąg do CC2430, a CC2430 zwraca ten ciąg do komputera po jego otrzymaniu. (2) Przygotowanie eksperymentalneZanim zaczniesz pisać kod, musisz skonfigurować sprzęt: poprawne połączenie + zainstalować sterownik szeregowy USB. Wymagane są dwa połączenia sprzętowe: Port JTAG na płycie CC2430 → debugger → portu USB komputera(Do debugowania i pobierania programów) Port szeregowy płyty deweloperskiej CC2430 → port USB komputera(Do komunikacji danych między PC a CC2430) Następnie musisz zainstalować sterownik USB na szeregowy (Adres do pobrania) Aby przesłać dane na port szeregowy, stosuje się narzędzie do debugowania portów szeregowych (Adres do pobrania)。 (3) Schemat przepływu programu
(4) Kod źródłowy eksperymentalny i analiza/*
Opis eksperymentalny: UART0, przerzut 115200bps, PC wysyła ciąg do CC2430 (kończący się na znak @), CC2430 zwraca ciąg po jego otrzymaniu
*/
#include
Niepodpisany charrecv_buf[300] = {0};
Niepodpisany charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
pustkaxtal_init(pustka)
{ SEN &= ~0x04; //都上电
podczas gdy(! (SEN &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Wybierz oscylator kryształowy 32MHz SEN |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
pustkaUart0Init(Niepodpisany charStopBits,Niepodpisany charParytet)
{ PERCFG&= ~0x01; Wybierz UART0 jako pierwszą opcjonalną pozycję, czyli RXD do P0.2 i TXD do P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Ustaw tryb UART i włącz odbiornik
U0GCR = 11; U0BAUD = 216; Ustaw prędkość UART0 na 115200 bps, a dlaczego jest 216 i 11, zapoznaj się z chińską instrukcją CC2430
U0UCR |= StopBits| Równość; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
pustka Uart0Send(Niepodpisany chardane)
{
podczas gdy(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = dane;
}
/*UART0发送字符串
-------------------------------------------------------*/
pustkaUart0SendString(Niepodpisany char*s)
{
podczas gdy(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
Niepodpisany charUart0Receive(pustka)
{
Niepodpisany chardane;
podczas gdy(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
powrótdane;
}
/*主函数
-------------------------------------------------------*/
pustkamain(pustka)
{
Niepodpisany chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Proszę wprowadź ciąg zakończony na '@'!");
recv_count =0;
podczas gdy(1) {
podczas gdy(1) { b = Uart0Receive(); UART
jeśli(b=='@')przerwa; Jeśli otrzyma się '@', wyskakuje on z pętli i wychodzi ciąg znaków
recv_buf[recv_count] = b; Jeśli nie jest to '@', kontynuuj dodawanie znaków do tablicy znaków recv_buf[] recv_count++; }
dla(i=0; i<recv_count; i++)="" [color="rgb(0," 136,="" 0)]="" łańcuch wyjściowy[="" i][="" kolor] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Najpierw skonfiguruj port I/O odpowiadający USART0: przekaż paręPECFRG.0Ustaw UART0 na opcjonalną pozycję 1, czyli P0.2 dla RXD i P0.3 dla TXD. Następnie skonfiguruj P0.2 i P0.3 jako zewnętrzne I/O dla urządzeń. Następnie wybierz tryb UART i włącz amplituner. Następnie skonfiguruj parametry USART0: transmisja 115200, brak parzystości i bit stopu 1. Następnie wyślij ciąg do komputera: Proszę wpisać ciąg zakończony na'@'! , a następnie używam while(1), by dalej próbować otrzymać każdy znak. Gdy ta postać tego nie robi'@', oznacza to, że wejście nie jest kompletne, i nadal dodaj ten znak do tablicy znaków recv_buf; Ta postać jest idealna'@', wejście jest kompletne, więc pętla jest wysyłana do komputera, aby każdy znak z recv_buf został wysłany do komputera, podczas resetowania recv_count. (5) Wyniki eksperymentalneNajpierw zakończ połączenie sprzętowe, otwórz narzędzie do debugowania portów szeregowych i skonfiguruj parametry zgodnie z poniższymi parametrami:
Kliknij "Open Serial Port", następnie rozpocznij debugowanie IAR, pozwól programowi działać, a oczekiwany ciąg znaków pojawi się w polu odbioru w narzędziu do debugowania portów szeregowych:
Następnie wpisz "Hello" w polu tekstowym "Oślij" poniżej narzędzia do debugowania portów szeregowych, jak pokazano poniżej:
Po kliknięciu "Wyślij" możesz się zastanawiać, dlaczego CC2430 nie zwraca tego, co napisałeś, skoro nie skończyłeś na @. Ponownie wpisujemy "Zigbee!@", klikamy "Wyślij" i wynik wygląda tak:
Pojawi się oczekiwana treść "Hello Zigbee!". To koniec! To koniec eksperymentu~ 3. PodsumowanieTen artykuł opisuje komunikację między płytą deweloperską CC2430 a komputerem hostem. Teraz, gdy mamy już podstawy komunikacji szeregowej, poznajmy w kolejnej sekcji pojedyncze próbkowanie ADC (konwersja analogowo-cyfrowa). Dzięki ADC możemy zebrać wartość czujnika temperatury na płycie deweloperskiej i przesłać ją do komputera przez port szeregowy, aby ją wyświetlić.
|