|
1. Соединение верхнего и нижнего уровней В беспроводной сенсорной сети CC2430 должен отправлять собранные данные на хост-компьютер (то есть ПК) для обработки, а управляющую информацию — на CC2430. Всё это неразрывно связано с передачей информации между ними. В этом разделе мы узнаем, как реализовать последовательную связь между ПК и CC2430. CC2430 включает 2 последовательных коммуникационных интерфейсаUSART0иUSART1, каждый последовательный порт включает два режима:UART(асинхронный) режим,SPI(синхронный) режим, этот раздел посвящен только режиму UART). 2. Эксперимент по связи через последовательные порты(1) Введение в экспериментОсознайте связь между платой разработки и ПК: ПК отправляет определённую строку на CC2430, и CC2430 возвращает её обратно на ПК после её получения. (2) Экспериментальная подготовкаПрежде чем начать писать код, нужно настроить аппаратные функции: правильное подключение + установка USB-последовательного драйвера. Требуются два аппаратных соединения: Порт JTAG платы разработки CC2430 → отладчик → USB-порт ПК(Для отладки и скачивания программ) Последовательный порт платы разработки CC2430 → USB-порт ПК(Для передачи данных между ПК и CC2430) Затем нужно установить USB в последовательный драйвер (Адрес для скачивания) Для отправки данных на последовательный порт используется инструмент отладки последовательных портов (Адрес для скачивания)。 (3) Блок-схема программы
(4) Экспериментальный исходный код и анализ/*
Экспериментальное описание: UART0, скорость передачи передачи 115200 bps, PC отправляет строку в CC2430 (заканчивается на @ символ), CC2430 возвращает строку после её получения
*/
#include
Без подписания Чарrecv_buf[300] = {0};
Без подписания Чарrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
пустотаxtal_init(пустота)
{ SLEEP &= ~0x04; //都上电
в то время как(! (SLEEP &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Выберите кристаллический осциллятор на 32 МГц СОН |=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 на 115200 bps, почему это 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; //重置 }
}
Сначала настройте порт ввода-вывода, соответствующий 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) Экспериментальные результатыСначала завершите аппаратное подключение, откройте инструмент отладки последовательных портов и настройте параметры, как показано ниже:
Нажмите «Открыть последовательный порт», затем начните отладку IAR, дайте программе запуститься, и вы увидите ожидаемую строку в окне приёма на инструменте отладки последовательных портов:
Затем введите «Hello» в текстовое поле отправки под инструментом отладки последовательных портов, как показано ниже:
После нажатия «Отправить» вы можете задуматься, почему CC2430 не возвращает то, что вы ввели, ведь вы не закончили на @. Мы снова вводим «Zigbee!@», нажимаем «Отправить», и результат выглядит так:
Ожидаемый контент «Привет, Зигби!» появится. Всё кончено! Это конец эксперимента~ 3. ЗаключениеВ этой статье описывается взаимодействие между платой разработки CC2430 и хост-компьютером. Теперь, когда у нас есть основы последовательной связи, давайте в следующем разделе узнаем о одиночном сэмплировании ADC (аналогово-цифровое преобразование). С помощью АЦП мы можем собрать значение температурного датчика на плате проявки и отправить его на ПК через последовательный порт для отображения.
|