|
1. Свързване на горния и долния етаж В безжична сензорна мрежа CC2430 трябва да изпрати събраните данни към хост компютъра (т.е. PC) за обработка, а хост компютърът трябва да изпраща контролна информация към CC2430. Всичко това е неразделно свързано с предаването на информация между двете. В този раздел ще научим как да реализираме серийна портова комуникация между компютъра и CC2430. CC2430 включва 2 серийни комуникационни интерфейсаUSART0иUSART1, всеки сериен порт включва два режима:UART(асинхронен) режим,SPI(синхронен) режим, този раздел се занимава само с UART режима). 2. Експеримент за серийна комуникация чрез портове(1) Въведение в експериментаОсъзнайте комуникацията между платката за разработка и компютъра: PC изпраща определен низ към CC2430, а CC2430 връща този низ към компютъра след получаването му. (2) Експериментална подготовкаПреди да започнете да пишете код, трябва да настроите хардуерните възможности: правилна връзка + инсталиране на USB сериен драйвер. Необходими са две хардуерни връзки: JTAG портът на платката за разработка CC2430 → дебъгера → USB порта на компютъра(За отстраняване на грешки и изтегляне на програми) Сериен порт на платката за разработка CC2430 → USB порт на компютъра(За комуникация на данни между PC и CC2430) След това трябва да инсталираш USB към сериен драйвер (Адрес за изтегляне) За да се изпратят данни към серийния порт, се използва инструмент за дебъгване на сериен порт (Адрес за изтегляне)。 (3) Схема на потока на програмата
(4) Експериментален изходен код и анализ/*
Експериментално описание: UART0, скорост на бауд 115200bps, PC изпраща низ към CC2430 (завършващ с @ символ), CC2430 връща низа след получаването му
*/
#include
без подпис Чарrecv_buf[300] = {0};
без подпис Чарrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
Празнотаxtal_init(Празнота)
{ СЪН &= ~0x04; //都上电
докато(! (СЪН &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Изберете кристален осцилатор с честота 32MHz СЪН |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
ПразнотаUart0Init(без подпис ЧарStopBits,без подпис ЧарПаритет)
{ PERCFG&= ~0x01; Изберете UART0 като първа опционална позиция, тоест RXD към P0.2 и TXD към P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Настроете на UART режим и активирайте приемника
U0GCR = 11; U0BAUD = 216; Задайте скоростта на UART0 на 115200bps, а защо е 216 и 11, моля, вижте китайското ръководство CC2430
U0UCR |= StopBits| Паритет; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
Празнота Uart0Send(без подпис Чарданни)
{
докато(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = данни;
}
/*UART0发送字符串
-------------------------------------------------------*/
ПразнотаUart0SendString(без подпис Чар*s)
{
докато(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
без подпис ЧарUart0Receive(Празнота)
{
без подпис Чарданни;
докато(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
Връщанеданни;
}
/*主函数
-------------------------------------------------------*/
Празнотаосновно(Празнота)
{
без подпис Чарi,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Моля, Въвеждащият низ завършваше с '@'!");
recv_count =0;
докато(1) {
докато(1) { b = Uart0Receive(); UART
ако(b=='@')Почивка; Ако се получи '@', той излиза от цикъла и излиза на низа
recv_buf[recv_count] = b; Ако не е '@', продължете да добавяте символи към масива на символите recv_buf[] recv_count++; }
за(i=0; i<recv_count; i++)="" [color="rgb(0," 136,="" 0)]="" изходен низ[="" i][="" цвят] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Първо, конфигурирайте I/O порта, съответстващ на USART0: предайте двойкатаPECFRG.0Задайте UART0 на опционална позиция 1, т.е. P0.2 за RXD и P0.3 за TXD. След това конфигурирай P0.2 и P0.3 като външни входно-изходни устройства (вход/изход). След това изберете режим UART и активирайте ресивъра. След това конфигурирайте параметрите на USART0: скорост на бауд 115200, без паритет и стоп бит на 1. След това изпратете низ към компютъра: Моля, Въвеждащ низ, завършващ с'@'! , и след това използвай while(1), за да продължиш да се опитваш да получиш всеки герой. Когато този герой не го прави'@', означава, че входът не е пълен и продължава да добавя този символ към масива на символите recv_buf; Този персонаж е точно както трябва'@', входът е пълен, така че цикълът се изпраща към компютъра, за да може всеки герой от recv_buf да бъде изпратен към компютъра, докато recv_count се нулира. (5) Експериментални резултатиПърво, завършете хардуерната връзка, отворете инструмента за дебъгване на серийния порт и конфигурирайте параметрите, както са показани по-долу:
Кликнете "Open Serial Port", след това започнете IAR дебъгване, оставете програмата да работи и ще намерите очаквания низ, който се появява в полето за приемане на инструмента за дебъгване на сериен порт:
След това въведете "Hello" в текстовото поле за изпращане под инструмента за дебъгване на сериен порт, както е показано по-долу:
След като натиснете "Изпрати", може да се чудите защо CC2430 не връща това, което сте написали, защото не сте завършили на @. Въвеждаме отново "Zigbee!@", натискаме "Изпрати" и резултатът изглежда така:
Очакваното съдържание "Здравей, Зигби!" ще се появи. Свърши! Това е краят на експеримента~ 3. ЗаключениеТази статия описва комуникацията между платката за разработка CC2430 и хост компютъра. Сега, когато имаме основите на серийната комуникация, нека научим за ADC (аналогово-цифрова конверсия) единично семплиране в следващия раздел. С ADC можем да съберем стойността на температурния сензор на разработващата платка и да изпратим стойността на температурата към компютъра през серийния порт, за да я покажем.
|