Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 7636|Ответ: 0

Zigbee Journey (5): Несколько важных базовых экспериментов CC2430 — последовательная связь

[Скопировать ссылку]
Опубликовано 30.10.2014 23:18:18 | | | |
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 (аналогово-цифровое преобразование). С помощью АЦП мы можем собрать значение температурного датчика на плате проявки и отправить его на ПК через последовательный порт для отображения.






Предыдущий:Zigbee Journey (4): Несколько важных базовых экспериментов CC2430 — прерывание таймера
Следующий:Zigbee Journey (6): Несколько важных базовых экспериментов CC2430 — одиночная дискретизация ADC
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com