|
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, швидкість передачі 115200bps, ПК надсилає рядок CC2430 (закінчується на @ символ), CC2430 повертає рядок після отримання
*/
#include
Без підпису charrecv_buf[300] = {0};
Без підпису charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
Порожнечаxtal_init(Порожнеча)
{ SLEEP &= ~0x04; //都上电
поки(! (SLEEP &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Виберіть кристалічний осцилятор на 32 МГц СОН |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
ПорожнечаUart0Init(Без підпису charStopBits,Без підпису charПаритет)
{ 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 біт/с. Щодо причин 216 і 11, будь ласка, зверніться до китайського посібника CC2430
U0UCR |= StopBits| Паритет; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
Порожнеча Uart0Send(Без підпису charдані)
{
поки(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = дані;
}
/*UART0发送字符串
-------------------------------------------------------*/
ПорожнечаUart0SendString(Без підпису char*s)
{
поки(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
Без підпису charUart0Receive(Порожнеча)
{
Без підпису charдані;
поки(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
Поверненнядані;
}
/*主函数
-------------------------------------------------------*/
ПорожнечаГоловна(Порожнеча)
{
Без підпису chari,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 (аналогово-цифрове перетворення) у наступному розділі. З ADC ми можемо зібрати значення температурного датчика на платі розробки і надіслати його на ПК через послідовний порт для відображення.
|