首页资源分类嵌入式处理器其它 > CC2530_ZigBee_开发

CC2530_ZigBee_开发

已有 445110个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:zigbeecc2530

    分    享:

    文档简介

    CC2530_ZigBee_开发

    文档预览

    开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com CC2530 ZigBee 开发使用说明 Create by Es Technology Ver. 2.1 2013 年 2 月 12 日 淘宝店铺地址:http://es-tech.taobao.com 1 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com Contents 1. Zigbee 简介..................................................................................................- 1 2. ES ZigBee 模块介绍.....................................................................................- 2 - 2.1. ZigBee 模块介绍...............................................................................- 2 2.2. 配套模块和配件................................................................................- 4 2.3. CC2530 Zigbee 开发套件介绍........................................................- 4 2.4. 无线节点介绍....................................................................................- 5 2.5. 开发资料介绍....................................................................................- 6 3. 使用说明........................................................................................................- 8 3.1. 使用之前的准备................................................................................- 8 3.2. 上电说明............................................................................................- 8 3.3. 与 PC 进行串口通信..........................................................................- 9 4. 出厂测试程序................................................................................................- 9 5. 基础例程介绍............................................................................................. - 11 5.1 点亮第一个 LED.................................................................................. - 11 5.2 按键与蜂鸣器操作............................................................................. - 13 5.3 外部中断程序..................................................................................... - 14 5.4 定时器程序 (T3 中断方式)............................................................. - 16 5.5 定时器程序 (T1 查询方式)............................................................. - 18 5.6 与 PC 进行串口通信 (串口通信发送数据到电脑)..................... - 19 5.7 与 PC 进行串口通信 (接收电脑发送过来的数据)..................... - 22 5.8 与 PC 进行串口通信 (接收电脑数据并发送回电脑)................. - 25 5.9 JLX12864 液晶操作............................................................................ - 28 5.10 温度采集与液晶显示..................................................................... - 31 5.11 温度采集并发送到计算机............................................................. - 34 5.12 AD 采集与液晶显示........................................................................ - 37 5.13 AD 采样并发送到计算机................................................................ - 42 5.14 Watch Dog 看门狗.......................................................................... - 44 5.15 Power Modes................................................................................... - 46 5.16 AES................................................................................................... - 48 5.17 随机序列产生器 Random Sequence.............................................. - 51 5.18 DMA................................................................................................... - 52 5.19 模块通信实验................................................................................. - 55 6. 项目实践..................................................................................................... - 58 6.1. 一对一数据传输............................................................................. - 58 - II 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 6.2. 一对多(多对一)数据传输......................................................... - 59 6.3. 无线数据传输并显示在液晶上..................................................... - 60 6.4. AD 采样与无线数据通信并显示.................................................... - 62 6.5. 按键实现无线点灯......................................................................... - 63 6.6. 电脑控制实现无线点灯功能......................................................... - 64 6.7. 无线传输质量检测(PER RSSI)..................................................... - 66 6.8. ZigBee 智能家居方案实现........................................................... - 67 7. 官方协议栈实验......................................................................................... - 68 7.1. 协议栈中的串口实验..................................................................... - 68 7.2. 协议栈的无线数据传输................................................................. - 72 7.3. 协议栈网络通讯实验(单播、组播、广播)............................. - 79 7.4. .协议栈网络管理........................................................................... - 89 7.5. 分析仪实验..................................................................................... - 93 7.6. Zigbee Sensor 实验...................................................................... - 95 附件 1:开发环境安装与使用方法.................................................................... - 100 安装 IAR 7.60A 方法:............................................................................... - 100 工程文件的建立........................................................................................... - 102 附件 2:仿真器驱动安装与使用方法................................................................ - 108 XP 电脑驱动安装.......................................................................................... - 108 Win 7 电脑驱动的安装............................................................................... - 109 附件 3:USB 转串口驱动安装方法..................................................................... - 113 - III 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 1. Zigbee 简介 ZigBee是一种低速短距离传输的无线网络协议。ZigBee协议从下到上分别为物理层 (PHY)、媒体访问控制层(MAC)、传输层(TL)、网络层(NWK)、应用层(APL)等。其中物理 层和媒体访问控制层遵循IEEE 802.15.4标准的规定。简单的说,ZigBee是一种高可靠 的无线数传网络,类似于CDMA和GSM网络。ZigBee数传模块类似于移动网络基站。通讯 距离从标准的75m到几百米、几公里,并且支持无限扩展。 ZigBee网络主要特点是低功耗、低成本、低速率、支持大量节点、支持多种网络拓 扑、低复杂度、快速、可靠、安全。ZigBee网络中设备的可分为协调器(Coordinator)、 汇聚节点(Router)、传感器节点(EndDevice)等三种角色。 ZigBee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,在整 个网络范围内,每一个ZigBee网络数传模块之间可以相互通信,每个网络节点间的距离 可以从标准的75m无限扩展。 ZigBee的组网方式如下图所示。 图 1 ZigBee 的组网方式 目前ZigBee的应用领域主要有:  工业、农业无线监测系统  智能家居物联网  个人监控、医院病人定位  城市智能交通  户外作业及地下矿场安全监护 -1- 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 2. ES ZigBee 模块介绍 ES technology 开 发 了 一 套 基 于 CC2530 SOC 的 zigbee 开 发 平 台 , 完 全 满 足 IEEE802.15.4-2006标准和ZigBee 2010技术标准的无线网络技术设计开发要求,该平台 包含了构建多种ZigBee无线网络所需的全部硬件、软件专业开发工具,文档和各种展示, 表演软件,是ZigBee初学者理想的选择。 CC2530无线节点采用德州仪器(TI)ZigBee SoC射频芯片CC2530F256,片上集成高 性能8051内核、ADC、USART等,支持ZigBee协议栈。该模块引出20个可用I/O,用户可 使用片上所有资源。节点集成了电池盒,直接安装两节5号干电池即可以工作。方便用 户实现高性价比、高集成度的ZigBee解决方案。 CC2530开发平台可以由CC2530仿真器/调试器(SmarRF04EB)通过USB接口直接连接 到你的电脑,具有代码高速下载,在线调试DEBUG,硬件断点,单步,变量观察,寄存 器观察等全部C51源水平调试的功能,实现对CC2530 系列无线单片机实时在线仿真/调 试/测试。 2.1.ZigBee 模块介绍 模块名称 图片 描述 CC2530无线节 点 Zigbee无线节点,板载USB转串口通 信,调试按键和3色调试LED,蜂鸣 器,2.4G天线,编程接口等,所有 IO口引出并在板上详细标注,使用 方便,质量可靠,稳定数据传输距 离为80米左右。 CC2530 最小 节点 Zigbee最小无线节点,使用标准的 2.54间距排针设置,方便使用。板 载优化电源滤波设计和SMA天线接 口,连接天线后数据传输距离可达 200米到300米左右。 -2- 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com ZigBee智能家 居无线插座 (CC2530) 易思独立开发的ZigBee智能家居无 线插座,里面包含ZigBee模块和控 制电路,可由另外一个无线模块控 制开关的开启和断开,实现简便的 家用智能家居管理方案。插座可以 承受900W的用电器。 CC2430无线节 点 Zigbee无线节点,板载USB转串口通 信,调试按键和3色调试LED,蜂鸣 器,2.4G天线接口,编程接口等, 所有IO口引出并在板上详细标注, 使用方便,质量可靠,稳定数据传 输距离为100米左右。 CC2530 / CC2430 多功 能开发板 SmartRF04EB 仿真器 包含各种传感器接口(光敏,温度, 湿度,热释电红外传感器等,包含 USB转串口模块,EEPROM模块,实时 时钟模块,可以设定任意时间控制 其他无线模块。包含SD卡读写模块, 可以接收储存大量数据。包含12864 液晶,可以显示各种参数和模块的 连接状态,是ZigBee开发不可缺少 的好开发板。 Zigbee仿真器工业版,支持CC11xx、 CC24xx、CC25xx等多个系列,支持 常用多种调试手段如下载、仿真、 调试、断点、单步、全速、擦除、 读取、加密等 开发资料 包含所有Zigbee开发所需要的使用 说明,例程介绍,开发软件与驱动, 项目开发介绍等。丰富详细的使用 说明和多达40多个的例程让即使是 没有任何ZigBee开发基础的你也可 以容易掌握ZigBee的使用 -3- 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 2.2.配套模块和配件 JLX12864液晶 JLX12864液晶,带中文字库,附 带使用例程,可以显示各种图 片,数字和文字,可以实现实时 画图和参数显示 DS18B20 温度 传感器 RC522 RFID 开发模块 热释电红外传 感模块 DHT11 数字温 湿度传感器 单总线温度传感器,具有线路简 单,体积小,温度精度高的特点, 在一根通信线,可以挂很多这样 的数字温度计,十分方便。 采用Philips MFRC522原装芯片 设计读卡电路,使用方便,成本 低廉,支持多种射频卡 进口探头LHI778,高灵敏度,用 于检测人体,门禁系统,灯光控 制等。 湿度测量范围:20%~90%RH 温度测量范围:0~+50℃; 湿度测量精度:±5.0%RH 温度测量精度:±2.0℃ 2.3.CC2530 Zigbee 开发套件介绍 CC2530 ZigBee套件内容:  两个 CC2530 ZigBee 无线节点模块;  两个 5 号电池盒;  一个工业版 ZigBee 仿真器;  开发资料一份(包含丰富例程和说明文档)。 -4- 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 可进行的实验包括但不限于(全部有具体的例程): 1. CC2530 内部资源操作(包括 IO 口控制,定时器控制,AD 模块,内部温度传 感器,中断处理,看门口,高级加密 AES,硬件随机序列产生器,DMA 操作, 时钟操作,电源模式管理(低功耗,定时唤醒等),串口通信等; 2. 板载资源操作(包括 LED 灯,按键操作,蜂鸣器操作,液晶操作,USB 转串 口与电脑通信,无线通信等; 3. ZigBee 通信学习(包括各种组网方式,数据传输质量检测,数据无线传输, 无线点灯控制,数据无线采样与显示,电脑无线操作 ZigBee 模块,数据无线 采样并发送到电脑等; 4. ZigBee 协议栈的学习。 2.4.无线节点介绍 CC2530节点属于zigbee节点模块,它采用德州仪器(TI)ZigBeeSOC射频芯片 CC2530-F256,片上集成高性能8051内核、ADC、USART等,支持ZigBee协议栈。 模块特点: 1. 板材使用军工级 KB 板材并镀金,全采用高质量元器件和接插件,质量可靠, 性能稳定; 2. 代码丰富,使用说明详细,即使是从来没有接触过 ZigBee 开发的技术人员, 按照我们的例程和使用说明,都可以完成基本的 ZigBee 模块操作和通信实验。 3. 板载 USB 转串口芯片,直接插上 USB 就可以实现和电脑通信,无需外加 USB 转串口线; 4. 板载 3 个 LED 和 3 个按键,并清楚标明所用到的 IO 口,方便用户调试; 5. 板载一个蜂鸣器,可以实现声音控制欲操作; 6. 两组 IO 口全部引出,并在板子上清楚标明,使用非常方便; 7. 集成 12864 的液晶接口,插上液晶后,可以实现各种参数的显示; 8. 板载高性能天线,开阔空间稳定传输距离 60 米到 100 米左右; 9. 可以选择 USB 供电或者电池供电,使用方便; -5- 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 图 2 CC2530 节点介绍 2.5.开发资料介绍 开发资料如下图所示。其中示例程序包含 4 个文件夹,包含丰富详细的使用 说明和多达 40 多个的例程让即使是没有任何 ZigBee 开发基础的你也可以容易掌 握 ZigBee 的使用。 -6- 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 开发环境和驱动包括以下文件 -7- 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 3. 使用说明 3.1. 使用之前的准备 1. 安装 IAR7.60 编译软件(IAR-EW8051-760A)。ZigBee 项目提供的例程和开发都 是基于 IAR 编译软件生成的,用户需要自己学习 ZigBee,必须要实现安装 IAR 编译软件。如果你电脑安装的 IAR 编译软件和我们提供的不一样,建议先卸 载你原来的 IAR 软件,然后安装我们提供给您的这个版本。因为版本不一样, 可能会导致工程文件不兼容而打开发生错误。具体的安装方法参考附件 1. 注 意:这个必须安装,而且要首先安装。 2. 安装仿真器驱动 SmartRF04EB,请参考附件 2 仿真器的安装方法,如果仿真器安 装不成功,则无法下载程序。 3. 如果要使用串口与电脑进行通信,则需要安装 PL2303 驱动。驱动的安装方法 见附件 3. 4. 其他(可以选择安装 TI ZStack-CC2530,SmartRF Flash Programmer, Packet_Sniffer 等) 3.2. 上电说明 模块可以使用两节 5 号电池供电或者使用 USB 电源供电。默认是使用电池 供电。电池供电接口位于板子的左上角,如下图所示。注意电池输入正负不要接 错,电源电压范围为 2-3.3V 之间。 如果不用电池供电,可以选择 USB 电源供电,需要连接 USB 线和将 USB 电 源使能跳线使用短路帽连通,如下图所示。注意不使用 USB 电源供电的时候跳 线帽要拔去,不然会造成 USB 和电池同时对模块进行供电,而两者电源电压不 一致,会导致电池损坏。 -8- 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com USB 接口 USB 电源使能跳线 (V USB) 所有模块在出厂的时候均对模块进行测试,所以你收到的模块里面已经下载 有测试程序。模块上点之后,黄色 LED 不亮,蓝色 LED 不亮。当有按键按下时, 蓝色 LED 闪亮一下,并且蜂鸣器会响一声,同时通过板载的 USB 转串口模块向电 脑发送一个数据 0x88(需要安装 USB 转串口驱动,详细参考下面的说明)。当检 测到附近有其他 CC2530 模块时,黄色 LED 一秒闪亮一次,表示已经和其他模块 通信成功。 3.3. 与 PC 进行串口通信 易思开发工作室制作的 CC2530 模块集成了 USB 转串口模块,所以 CC2530 可以直接通过 USB 与 PC 进行通信(需要安装 USB 转串口驱动,详细参考下面的 说明)。 板载 PL2303 USB 转串口模块 测试模块与 PC 进行通信可以参考下面的例程介绍。 4. 出厂测试程序 说明:所有模块在出厂的时候均会使用出厂测试程序进行测试,以测试板子 上所有模块的功能与模块无线通信是否正常。用户在任何时间如果怀疑某一个模 块工作不正常的话,可以使用出厂测试程序来考证是否硬件有损坏。用户也可以 参考出厂测试程序来学习 ZigBee 的开发。  实验目的:测试板子所有模块是否工作正常,检查板子的硬件有没有损坏。 主要测试的硬件有: 1 三个 LED 显示 2 三个按键操作 3 蜂鸣器操作 4 液晶显示 5 串口与电脑进行通信 6 无线通信  实验步骤:把出厂测试程序分别下载到每一个模块中;连接 USB 线,液晶 -9- 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 等模块,然后上电运行。  实验结果:模块一上电,两个黄色 LED 每隔 0.5 秒闪亮一次,LCD 显示"Wecome to ES";模块每隔一段时间向电脑发送字符串“Waiting for Key”;当检测到按 键,蜂鸣器响一下,并向 PC 发送一段代码”Key Detect“;当检测到附近有 其他模块,自动进行连接并实现通信,蓝色 LED 闪亮。 注意: 1. 液晶显示需要在本店铺购买液晶模块 JLX12864; 2. 使用串口调试助手请将波特率设定为 115200,并选择合适串口号,不 要勾选 HEX 显示。测试本程序首先需要在电脑安装 PL2302 USB 转串口驱动, 并使用 USB 线连接模块和电脑。 测试效果如下图所示: 使用 USB 线连接模块与计算机,串口接收到的数据如下图所示: - 10 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 5. 基础例程介绍 5.1 点亮第一个 LED  实验目的:学习怎样使用 IAR 编译软件下载程序,熟悉使用环境,并点亮第 一个 LED。  实验步骤:把程序通过仿真器下载到无线模块并运行。  实验结果:蓝色 LED 被点亮。 具体实验: 电路板的连接原理如下: - 11 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 关键代码: 1. 定义 LED 接到的引脚口 2. IO 初始化 void IO_Init(void) 3. 主函数 初始化 IO,点亮 LED #include #define Blue_LED P1_4 #define Yellow_LED1 P1_5 #define Yellow_LED2 P1_6 //P14 连接蓝色 LED //P15 连接黄色 LED //P16 连接黄色 LED void IO_Init(void) { P1DIR |= 0xff; } //P1_4 定义为输出 void main(void) { IO_Init(); P1=0x00; Blue_LED=1; while(1); } //调用初始化程序 //P1 口输出为低 //点亮蓝色 LED - 12 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 5.2 按键与蜂鸣器操作  实验目的:学习如何进行按键检测和控制蜂鸣器。  实验步骤:把程序通过仿真器下载到无线模块并运行。  实验结果:模块一共有 3 个按键,每一次按其中一个按键,相应的 LED 显示 状态改变一次,并且蜂鸣器会响一下。 具体实验: 电路板连接原理如下图: 按键与蜂鸣器连接原理 关键代码: 1. 定义 LED 和按键接到的引脚口 2. IO 初始化 void IO_Init(void) 3. 按键检测函数 void KeyScan(void) 4. 主函数 检测按键,点亮相应的 LED 和蜂鸣器 按键检测函数 *****************************/ void KeyScan(void) { if(KEY1==0) { Key_detect=1; Delayms(100); //按键去抖 } if(KEY2==0) { - 13 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com Key_detect=2; Delayms(100); } if(KEY3==0) { Key_detect=3; Delayms(100); } } //按键去抖 //按键去抖 // 主函数 ***************************/ void main(void) { IO_initial(); Bell=0; //蜂鸣器禁止 P1=0x0f; while(1) { KeyScan(); if(Key_detect) //按键改变 LED 状态 { Bell=1; if(Key_detect==1) Blue_LED=!Blue_LED; if(Key_detect==2) Yellow_LED1=!Yellow_LED1; if(Key_detect==3) Yellow_LED2=!Yellow_LED2; Delayms(50); Key_detect=0; Bell=0; } } } 5.3 外部中断程序  实验目的:学习外部中断的设置,使用按键 S1 作为外部中断输入,改变蓝 色的 LED 的显示状态。  实验步骤:把程序通过仿真器下载到无线模块并运行。 - 14 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com  实验结果:当检测到按键 S1 按下,触发芯片产生中断,进入中断程序,蓝 色的 LED 的显示状态改变一次。 具体实验: 电路板连接原理如下图: 程序功能:使用按键 S1 作为外部中断输入,改变蓝色的 LED 的显示状态。 关键代码: 1. 中断设置 void InitKey() 2. 中断处理函数__interrupt void P1_ISR(void) 改变蓝色 LED 的状态 3. 主函数 初始化中断和 IO 口 // 中断设置 *****************************/ void InitKey() { P1IEN |= 0X02; // P11 设置为中断方式 PICTL &=~ 0X02; // 下降沿触发 IEN2 |= 0Xff; // 允许 P1 口中断; P1 |= 0X0f; P1IFG = 0x00; // 初始化中断标志位 EA = 1; } // 中断处理函数 *****************************/ #pragma vector = P1INT_VECTOR 断处理程序 //格式:#pragma vector = 中断向量,紧接着是中 __interrupt void P1_ISR(void) - 15 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com { Delayms(10); Blue_LED=~Blue_LED; P1IFG = 0; //去除抖动 //改变 LED1 状态 //清中断标志 P1IF = 0; //清中断标志 } // 主函数 ***************************/ void main(void) { Initial_IO(); //调用初始化函数 InitKey(); while(1) { } } 5.4 定时器程序 (T3 中断方式)  实验目的:使用定时器 T3 中断,在设定时间到了以后改变蓝色的 LED 的显 示状态。  实验步骤:把程序通过仿真器下载到无线模块并运行。  实验结果:蓝色 LED 被周期性点亮。 具体实验: 电路板连接原理如下图: - 16 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 关键代码: 1. IO 初始化 void Initial_IO(void) 2. 定时器初始化 void InitT3() 设定定时时间 3. 定时器中断函数__interrupt void T3_ISR(void) 4. 主函数 初始化定时器和 IO 口 改变蓝色 LED 的状态。 //初始化程序 *****************************/ void Initial_IO(void) { P1DIR |= 0x10; //P1_4 定义为输出 P1DIR |= 0xff; //P1 定义为输出 P2DIR |= 0x01; //P2_0 为输出 P1=0x00; //P1 口为低,禁止所有 LED Bell=0; //禁止蜂鸣器 } //定时器初始化 void InitT3() { T3CTL |= 0x08 ; //开溢出中断 T3IE = 1; //开总中断和 T3 中断 T3CTL|=0XE0; //128 分频,128/16000000*N=0.5S,N=65200 T3CTL &= ~0X03; //自动重装 00->0xff 65200/256=254(次) T3CTL |=0X10;//启动 EA = 1; } /*************************** //主函数 ***************************/ void main(void) { Initial_IO(); //调用初始化函数 InitT3(); while(1){} } - 17 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com #pragma vector = T3_VECTOR //定时器 T3 __interrupt void T3_ISR(void) { IRCON = 0x00; if(++count>254) (约为 0.5 秒时间) { count = 0; Blue_LED=~Blue_LED; } } //清中断标志, 也可由硬件自动完成 //254 次中断后 LED 取反,闪烁一轮 // 计数清零 5.5 定时器程序 (T1 查询方式)  实验目的:使用设定定时器 T1,并查询其状态,在设定时间到了以后改变 蓝色的 LED 的显示状态。  实验步骤:把程序通过仿真器下载到无线模块并运行。  实验结果:蓝色 LED 被周期性点亮。 关键代码: 1. IO 初始化 void Initial_IO(void) 2. 定时器初始化 void InitT1() 设定定时时间 3. 主函数 初始化定时器和 IO 口,查询 T1 寄存器,判断定时时间是否到,如果 是,改变蓝色 LED 的显示状态。 //定时器初始化 void InitT1() //系统不配置工作时钟时默认是 2 分频,即 16MHz { T1CTL = 0x0d; //128 分频,自动重装 0X0000-0XFFFF T1STAT= 0x21; //通道 0, 中断有效 } //主函数 ***************************/ void main(void) { uchar count; Initial_IO(); //调用初始化函数 - 18 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com InitT1(); while(1) { if(IRCON>0) { IRCON=0; if(++count>=1) //约 1s 周期性闪烁 { count=0; Blue_LED = !Blue_LED; //LED1 闪烁 } } } } 5.6 与 PC 进行串口通信 (串口通信发送数据到电脑)  实验目的:学习串口参数的设置,并向计算机发送一个数据。使用串口 0, 波特率设定为 115200。  实验步骤:使用 USB 线连接计算机和 ZigBee 模块,打开串口调试助手,设 置好参数,把程序通过仿真器下载到无线模块并运行。  实验结果: 模块一上电向电脑发送一个数据(0x88) 当检测到按键 S1 按下时,向电脑发送数据 0x01; 当检测到按键 S2 按下时,向电脑发送数据 0x02; 当检测到按键 S3 按下时,向电脑发送数据 0x03; - 19 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 注意:使用串口调试助手请将波特率设定为 115200,并选择合适 串口号,勾选 HEX 显示。测试本程序首先需要在电脑安装 PL2302 USB 转串口驱动,并使用 USB 线连接模块和电脑 在 CC2530 中,USART0 和 USART1 是串行通信接口,它们能够分别运行于异 步 USART 模式或者同步 SPI 模式。两个 USART 的功能是一样的,可以通过设置 在单独的 IO 引脚上。电路板连接原理如下图: 程序功能:使用串口 0(USART0)向电脑发送数据,波特率设定为 115200,模块 通电首先通过串口向 PC 发送一个数据(0x88)。当检测到按键按下时,向电脑发 送数据相应按键数据。 - 20 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 关键代码: 1. 串口初始化 void InitUart() 设定时钟,波特率等 2. 发送数据函数 void Send_char(uchar c) 发送一个字节的数据 3. 主函数 初始化 IO 口和串口,检测按键,如果有按键按下,向电脑发送一个字 节的数据 /**************************************************************** 串口初始化函数 ***********************************************************/ void InitUart() { CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ 晶振 while(CLKCONSTA & 0x40); // 等待晶振稳定 CLKCONCMD &= ~0x47; // 设置系统主时钟频率为 32MHZ PERCFG = 0x00; P0SEL = 0x3c; P2DIR &= ~0XC0; //位置 1 P0 口 //P0_2,P0_3 用作串口,第二功能 //P0 优先作为 UART0 ,优先级 U0CSR |= 0x80; U0GCR |= 11; U0BAUD |= 216; UTX0IF = 0; } //UART 方式 //U0GCR 与 U0BAUD 配合 // 波特率设为 115200 //UART0 TX 中断标志初始置位 1 (收发时候) /**************************************************************** 串口发送函数 ****************************************************************/ void Send_char(uchar c) { U0DBUF = c; while(UTX0IF == 0); //发送完成标志位 UTX0IF = 0; } /*************************** //主函数 - 21 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com ***************************/ void main(void) { uchar temp=0x88; Initial_IO(); //调用初始化函数 InitUart(); //调用初始化函数 Send_char(temp); while(1) { if(KEY1==0) { temp=1; Send_char(temp); //发送数据 Delayms(300); //按键去抖 } if(KEY2==0) { temp=2; Send_char(temp); //发送数据 Delayms(300); //按键去抖 } if(KEY3==0) { temp=3; Send_char(temp); //发送数据 Delayms(300); //按键去抖 } } } 5.7 与 PC 进行串口通信 (接收电脑发送过来的数据)  实验目的:学习串口参数的设置,并使用串口中断接收计算机发送过来的数 据。使用串口 0,波特率设定为 115200。  实验步骤:使用 USB 线连接计算机和 ZigBee 模块,打开串口调试助手,设 置好参数,把程序通过仿真器下载到无线模块并运行。  实验结果: 当检接收到电脑发送的数据为 0x01,改变第一个黄色 LED 的显示状态; - 22 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 当检接收到电脑发送的数据为 0x02,改变第二个黄色 LED 的显示状态; 当检接收到电脑发送的数据为 0x03,改变第蓝色 LED 的显示状态; 注意:使用串口调试助手请将波特率设定为 115200,并选择合适,串口号, 勾选 HEX 显示。测试本程序首先需要在电脑安装 PL2302 USB 转串口驱动,并使 用 USB 线连接模块和电脑 串口的设置如下图所示: 关键代码: 1. 串口初始化 void InitUart() 设定时钟,波特率等 2. 主函数 初始化 IO 口和串口 3. 串口中断函数__interrupt void UART0_ISR(void) 接收到数据时,产生中断,判 断数据值,点亮相应的 LED。 /**************************************************************** 串口初始化函数 ***********************************************************/ void InitUart() { CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ 晶振 - 23 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com while(CLKCONSTA & 0x40); CLKCONCMD &= ~0x47; 率为 32MHZ // 等待晶振稳定 // 设置系统主时钟频 PERCFG = 0x00; P0SEL = 0x3c; P2DIR &= ~0XC0; //位置 1 P0 口 //P0_2,P0_3 用作串口,第二功能 //P0 优先作为 UART0 ,优先级 U0CSR |= 0x80; U0GCR |= 11; U0BAUD |= 216; UTX0IF = 0; U0CSR |= 0X40; IEN0 |= 0x84; } //UART 方式 //U0GCR 与 U0BAUD 配合 // 波特率设为 115200 //UART0 TX 中断标志初始置位 1 //允许接收 // 开总中断,接收中断 (收发时候) /*************************** //主函数 ***************************/ void main(void) { Initial_IO(); //调用初始化函数 InitUart(); while(1) { } } /**************************************************************** 串口接收一个字符: 一旦有数据从串口传至 CC2530, 则进入中断,将接收到的数 据赋值给变量 temp. ****************************************************************/ #pragma vector = URX0_VECTOR __interrupt void UART0_ISR(void) { URX0IF = 0; // 清中断标志 - 24 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com temp = U0DBUF; if(temp==3) Blue_LED=!Blue_LED; if(temp==2) Yellow_LED1=!Yellow_LED1; if(temp==1) Yellow_LED2=!Yellow_LED2; } 5.8 与 PC 进行串口通信 (接收电脑数据并发送回电脑)  实验目的:学习串口参数的设置,并使用串口发送数据和用中断接收计算机 发送过来的数据。使用串口 0,波特率设定为 115200。  实验步骤:使用 USB 线连接计算机和 ZigBee 模块,打开串口调试助手,设 置好参数,把程序通过仿真器下载到无线模块并运行。  实验结果: 模块一上电向电脑发送 Hello,Welcome to ES,当接收到电脑的数据(abc# 方式发送,#为结束符),把接收到的数据发回电脑。 注意:使用串口调试助手请将波特率设定为 115200,并选择合适,串口号, 勾选 HEX 显示。测试本程序首先需要在电脑安装 PL2302 USB 转串口驱动,并使 用 USB 线连接模块和电脑 串口的设置如下图所示: 关键代码: 1. 串口初始化 void InitUart() 设定时钟,波特率等 2. 发送字符串函数 void Uart_Send_String(char *Data,int len) - 25 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 3. 主函数 初始化 IO 口和串口,检测时候接收到数据,如果时,则把数据发回计 算机。 4. 串口中断函数__interrupt void UART0_ISR(void) 接收到数据时,产生中断,把 数据存到寄存器中。 /**************************************************************** 串口初始化函数 ***********************************************************/ void InitUart() { CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ 晶振 while(CLKCONSTA & 0x40); // 等待晶振稳定 CLKCONCMD &= ~0x47; // 设置系统主时钟频 率为 32MHZ PERCFG = 0x00; P0SEL = 0x3c; P2DIR &= ~0XC0; //位置 1 P0 口 //P0_2,P0_3,P0_4,P0_5 用作串口,第二功能 //P0 优先作为 UART0 ,优先级 U0CSR |= 0x80; U0GCR |= 11; U0BAUD |= 216; UTX0IF = 0; U0CSR |= 0X40; IEN0 |= 0x84; } //UART 方式 //U0GCR 与 U0BAUD 配合 // 波特率设为 115200 //UART0 TX 中断标志初始置位 1 //允许接收 // 开总中断,接收中断 (收发时候) /**************************************************************** 串口发送字符串函数 ****************************************************************/ void Uart_Send_String(char *Data,int len) { { int j; for(j=0;j> 4; value |= (((uint)ADCH) << 4); return (value-1367.5)/4.5-5; 错,温度系数应该是 4.5 /℃ 片根据具体情况校正) } //选择 1.25V 为参考电压;14 位分辨 //选择 ADC 的启动模式为手动 //启动 AD 转化 //等待 AD 转换完成 //ADCL 寄存器低 2 位无效 //根据 AD 值,计算出实际的温度,芯片手册有 //进行温度校正,这里减去 5℃(不同芯 /**************************************************************** 主函数 ****************************************************************/ void main(void) { char i; float AvgTemp; Initial_IO(); initial_lcd(); clear_screen(); //clear all dots LCD_write_english_string(1,1," Welcome to ES "); //显示英文字符串 LCD_write_english_string(2,1," es-tech.taobao.com"); LCD_write_english_string(6,1,"Temperature:"); //显示英文字符串 LCD_write_english_string(4,1,"Data count :"); //显示英文字符串 initTempSensor(); //初始化 ADC while(1) { AvgTemp = 0; for(i = 0 ; i < 4 ; i++) - 33 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com { AvgTemp += getTemperature(); AvgTemp=AvgTemp/2; } //每次累加后除 2 Delayms(2000); //使用 32M 晶振,故这里 2000 约等于 1S LCD_disp_char(4,75,data_count); LCD_write_english_string(5,75," "); //显示英文字符串 LCD_disp_Float(6,75,AvgTemp,2); data_count++; Blue_LED=!Blue_LED; } } 5.11 温度采集并发送到计算机  实验目的:设置芯片内部的温度传感器,学习使用 AD 采样其数值并转化成 温度值,并发送到电脑中显示出来。  实验步骤:使用 USB 线连接计算机和 ZigBee 模块,打开串口调试助手,设 置好参数,把程序通过仿真器下载到无线模块并运行。  实验结果:每隔一段时间采样芯片内部的温度传感器的数据值,把数据转换 成温度值并显发送到电脑,每采样一次数据,蓝色 LED 状态改变一次 注意:使用串口调试助手请将波特率设定为 115200,并选择合适,串口号, 不要勾选 HEX 显示。测试本程序首先需要在电脑安装 PL2302 USB 转串口驱动, 并使用 USB 线连接模块和电脑 串口的设置如下图所示: - 34 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 关键代码: 1. 温度传感器初始化函数 void initTempSensor(void) 2. 读取温度传感器 AD 值函数 float getTemperature(void) 3. 主函数 初始化 IO 口和串口,温度传感器,读取温度传感器的温度值,并发送 给计算机。 /**************************************************************** 温度传感器初始化函数 ****************************************************************/ void initTempSensor(void) { DISABLE_ALL_INTERRUPTS(); //关闭所有中断 InitClock(); //设置系统主时钟为 32M TR0=0X01; //set '1' to connectthe temperature sensorto the SOC_ADC. ATEST=0X01; // Enablesthe temperature sensor } /**************************************************************** 读取温度传感器 AD 值函数 ****************************************************************/ float getTemperature(void){ - 35 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com uint value; ADCCON3 = (0x3E); 率;对片内温度传感器采样 ADCCON1 |= 0x30; ADCCON1 |= 0x40; while(!(ADCCON1 & 0x80)); value = ADCL >> 4; value |= (((uint)ADCH) << 4); return (value-1367.5)/4.5-5; 错,温度系数应该是 4.5 /℃ 片根据具体情况校正) } //选择 1.25V 为参考电压;14 位分辨 //选择 ADC 的启动模式为手动 //启动 AD 转化 //等待 AD 转换完成 //ADCL 寄存器低 2 位无效 //根据 AD 值,计算出实际的温度,芯片手册有 //进行温度校正,这里减去 5℃(不同芯 /**************************************************************** 主函数 ****************************************************************/ void main(void) { char i; char TempValue[6]; float AvgTemp; Initial_IO(); InitUART0(); initTempSensor(); //初始化串口 //初始化 ADC while(1) { AvgTemp = 0; for(i = 0 ; i < 64 ; i++) { AvgTemp += getTemperature(); AvgTemp=AvgTemp/2; //每次累加后除 2 } /****温度转换成 ascii 码发送****/ TempValue[0] = (unsigned char)(AvgTemp)/10 + 48; //十位 TempValue[1] = (unsigned char)(AvgTemp)%10 + 48; //个位 TempValue[2] = '.'; //小 - 36 - 数点 位 位 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com TempValue[3] = (unsigned char)(AvgTemp*10)%10+48; TempValue[4] = (unsigned char)(AvgTemp*100)%10+48; TempValue[5] = '\0'; //十分 //百分 UartTX_Send_String(" Temperature: ",14); //字符串结束符 UartTX_Send_String( TempValue,6); Delayms(2000); //使用 32M 晶振,故这里 2000 约等于 1S } } 5.12 AD 采集与液晶显示  实验目的:学习如何设置芯片内部的 ADC,并把采样的数值转化成电压值,, 显示在液晶上。设定 P00 为 AD 输入口,单次转换,参考电压为电源电压, 14 位分辨率  实验步骤:连接液晶模块,把程序通过仿真器下载到无线模块并运行。  实验结果:采样 P00 引脚的电压值,显示在液晶上。 效果图: - 37 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 关键代码: 1. AD 值读取函数 uint16 HalAdcRead (uint8 channel, uint8 resolution) 选择 AD 通 道口和 AD 的精度 2. AD 基准电压设定函数 HalAdcSetReference(HAL_ADC_REF_125V)使用内部基准 1.25V 3. 主函数 初始化 IO,液晶和 AD,读取 AD 的值,并显示在液晶上。 uint16 HalAdcRead (uint8 channel, uint8 resolution) { int16 reading = 0; #if (HAL_ADC == TRUE) uint8 i, resbits; uint8 adctemp; volatile uint8 tmp; uint8 adcChannel = 1; uint8 reference; - 38 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com /* store the previously set reference voltage selection */ reference = ADCCON3 & HAL_ADC_REF_BITS; /* * If Analog input channel is AIN0..AIN7, make sure corresponing P0 I/O pin is enabled. The code * does NOT disable the pin at the end of this function. I think it is better to leave the pin * enabled because the results will be more accurate. Because of the inherent capacitance on the * pin, it takes time for the voltage on the pin to charge up to its steady-state level. If * HalAdcRead() has to turn on the pin for every conversion, the results may show a lower voltage * than actuality because the pin did not have time to fully charge. */ if (channel < 8) { for (i=0; i < channel; i++) { adcChannel <<= 1; } } /* Enable channel */ ADCCFG |= adcChannel; /* Convert resolution to decimation rate */ switch (resolution) { case HAL_ADC_RESOLUTION_8: resbits = HAL_ADC_DEC_064; break; case HAL_ADC_RESOLUTION_10: resbits = HAL_ADC_DEC_128; break; - 39 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com case HAL_ADC_RESOLUTION_12: resbits = HAL_ADC_DEC_256; break; case HAL_ADC_RESOLUTION_14: default: resbits = HAL_ADC_DEC_512; break; } /* read ADCL,ADCH to clear EOC */ tmp = ADCL; tmp = ADCH; /* Setup Sample */ adctemp = ADCCON3; adctemp &= ~(HAL_ADC_CHN_BITS | HAL_ADC_DEC_BITS | HAL_ADC_REF_BITS); adctemp |= channel | resbits | (reference); /* writing to this register starts the extra conversion */ ADCCON3 = adctemp; /* Wait for the conversion to be done */ while (!(ADCCON1 & HAL_ADC_EOC)); /* Disable channel after done conversion */ ADCCFG &= (adcChannel ^ 0xFF); /* Read the result */ reading = (int16) (ADCL); reading |= (int16) (ADCH << 8); /* Treat small negative as 0 */ if (reading < 0) reading = 0; switch (resolution) { - 40 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com case HAL_ADC_RESOLUTION_8: reading >>= 8; break; case HAL_ADC_RESOLUTION_10: reading >>= 6; break; case HAL_ADC_RESOLUTION_12: reading >>= 4; break; case HAL_ADC_RESOLUTION_14: default: reading >>= 2; break; } #else // unused arguments (void) channel; (void) resolution; #endif return ((uint16)reading); } /**************************************************************** 主函数 ****************************************************************/ void main(void) { Initial_IO(); initial_lcd(); HalAdcSetReference(HAL_ADC_REF_125V); /* Internal Reference (1.25V-CC2430)(1.15V-CC2530) */ clear_screen(); //clear all dots LCD_write_english_string(1,1," Welcome to ES "); //显示英文字符串 LCD_write_english_string(2,1," es-tech.taobao.com"); LCD_write_english_string(7,1,"Sample Voltage at P00"); - 41 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com LCD_write_english_string(4,1,"AD Value: V"); //显示字符串 while(1) { AD_data = HalAdcRead(HAL_ADC_CHANNEL_0,HAL_ADC_RESOLUTION_14); //P00 num = (float)(AD_data)*1.15/8096.0; //定参考电压为 1.15V。14 位精确度 LCD_disp_Float(4,62, num,2); //显示数据 Delay(30000); Blue_LED=!Blue_LED; //完成数据处理 } } 5.13 AD 采样并发送到计算机  实验目的:学习如何设置芯片内部的 ADC,并把采样的数值转化成电压值, 并通过串口发送到计算机。设定 P00 为 AD 输入口,单次转换,参考电压为 电源电压, 14 位分辨率  实验步骤:使用 USB 线连接计算机和 ZigBee 模块,打开串口调试助手,设 置好参数,把程序通过仿真器下载到无线模块并运行。  实验结果:串口调试助手显示 P00 引脚的电压值。 注意:使用串口调试助手请将波特率设定为 115200,并选择合适,串口号, 不要勾选 HEX 显示。测试本程序首先需要在电脑安装 PL2302 USB 转串口驱动, 并使用 USB 线连接模块和电脑 串口的设置如下图所示: - 42 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 关键代码: 1. AD 值读取函数 uint16 HalAdcRead (uint8 channel, uint8 resolution) 选择 AD 通 道口和 AD 的精度 2. AD 基准电压设定函数 HalAdcSetReference(HAL_ADC_REF_125V)使用内部基准 1.25V 3. 主函数 初始化 IO,串口(InitUART0)和 AD,读取 AD 的值,并显示在液晶上。 ADC 设定函数参考上一节的 HalAdcRead()函数。 /**************************************************************** 主函数 ****************************************************************/ void main(void) { uint AD_data; float num; Initial_IO(); HalAdcSetReference(HAL_ADC_REF_125V); /* Internal Reference (1.25V-CC2430)(1.15V-CC2530) */ - 43 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com InitUART0(); //初始化串口 UartTX_Send_String("AD sample on P00" ,17); while(1) { AD_data = HalAdcRead(HAL_ADC_CHANNEL_0,HAL_ADC_RESOLUTION_14); //P00 num = (float)(AD_data)*1.15/8096.0; //定参考电压为 1.15V。14 位精确度 adcdata[1] = (char)(num)%10+48; adcdata[2] = '.'; adcdata[3] = (char)(num*10)%10+48; UartTX_Send_String("Temperature:",12); UartTX_Send_String(adcdata,6); //串口送数 Delay(60000); Blue_LED=!Blue_LED; //完成数据处理 } } 5.14 Watch Dog 看门狗 实验内容:设定看门狗  实验目的:设置看门狗  实验步骤:连接液晶,把程序通过仿真器下载到无线模块并运行。  实验结果:模块运行,开始显示 Watch Dog!,然后 0.5 秒以内,运行 FeetDog(void)函数,成功之后,液晶显示 Feet Dog!,否则芯片复位。 关键代码: 1. 看门狗初始化函数 void Init_Watchdog(void) 2. 时钟初始化函数 void Init_Clock(void) 3. 喂狗函数 void FeetDog(void) 4. 主函数 初始化时钟,液晶和看门狗,然后延时一段时间后进行喂狗。 void Init_Watchdog(void) - 44 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com { WDCTL = 0x00; //时间间隔一秒,看门狗模式 WDCTL |= 0x08; //启动看门狗 } void Init_Clock(void) { CLKCONCMD = 0X00; } void FeetDog(void) { WDCTL = 0xa0; WDCTL = 0x50; } void main(void) { Init_Clock(); Initial_IO(); Init_Watchdog(); initial_lcd(); clear_screen(); //clear all dots LCD_write_english_string(1,1," Welcome to ES "); LCD_write_english_string(2,1," es-tech.taobao.com"); LCD_write_english_string(4,1,"Watch Dog Program"); LCD_write_english_string(5,1,"Watch Dog! "); Blue_LED=1; Delay(); Blue_LED=0; //显示英文字符串 while(1) { FeetDog(); LCD_write_english_string(5,1,"Feet Dog! "); - 45 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com } //喂狗指令(加入后系统不复位,小灯不闪烁) } 5.15 Power Modes 实验内容:设定不同的 Power Modes  实验目的:设置电源模式 Power Modes  实验步骤:连接液晶,把程序通过仿真器下载到无线模块并运行。  实验结果:模块运行,.首先把模块 Power Mode 设定为 0,2.经过一定时间 后,把模块 Power Mode 设定为 1,3.经过一定时间后,把模块 Power Mode 设定为 2,4.经过一定时间后,把模块 Power Mode 设定为 3。同时液晶有 相应的显示,最后完成后,显示 Finish。 关键代码: 1. 初始化函数 initPowerModes(void) 初始化液晶,IO 口等 2. 休眠时间设定 void addToSleepTimer(uint sec) 设定休眠时间 3. 设定电源模式函数 SET_POWER_MODE(uchar mode) 4. 退出休眠中断函数 __interrupt void powermodes_ST_IRQ 5. 主函数 初始化 IO,液晶,设定相应进入的电源模式并显示在液晶上。 //初始化 ********************************************************************* *********/ void initPowerModes(void) { Initial_IO(); initial_lcd(); clear_screen(); //clear all dots LCD_write_english_string(1,1," Welcome to ES "); //显示字符串 } void main(void){ //Powermode 0 initPowerModes(); LCD_write_english_string(3,1,"Powermode 0"); Blue_LED=1; Delayms(2000); - 46 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com //Powermode 1 Blue_LED=0; LCD_write_english_string(3,1,"Powermode 1, wait"); addToSleepTimer(1); INT_SETFLAG(INUM_ST, INT_CLR); INT_ENABLE(INUM_ST, INT_ON); INT_GLOBAL_ENABLE(TRUE); SET_POWER_MODE(1); LCD_write_english_string(3,1,"Powermode 0 "); Yellow_LED1=1; Delayms(2000); //Powermode 2 Yellow_LED1=0; LCD_write_english_string(3,1,"Powermode 2, wait"); Delayms(2000); addToSleepTimer(1); LCD_write_english_string(3,1,"Powermode 0 "); Yellow_LED2=1; Delayms(2000); //Powermode 3 Yellow_LED2=0; LCD_write_english_string(3,1,"Powermode 3 "); LCD_write_english_string(5,1," Finish "); SET_POWER_MODE(3); while(1){}; } - 47 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com /******************************************************************** ********** * 休眠时间设定 ********************************************************************* *********/ void addToSleepTimer(uint sec) { UINT32 sleepTimer = 0; sleepTimer |= ST0; sleepTimer |= (UINT32)ST1 << 8; sleepTimer |= (UINT32)ST2 << 16; sleepTimer += ((UINT32)sec * (UINT32)32768); ST2 = (UINT8)(sleepTimer >> 16); ST1 = (UINT8)(sleepTimer >> 8); ST0 = (UINT8) sleepTimer; } /******************************************************************** ********** * powermodes_ST_IRQ * Interrupt handler for Sleep Timer. ********************************************************************* *********/ #pragma vector=ST_VECTOR __interrupt void powermodes_ST_IRQ(void){ INT_SETFLAG(INUM_ST, INT_CLR); } 5.16 AES  实验目的:学习设置和使用 AES  实验步骤:连接液晶,把程序通过仿真器下载到无线模块并运行。  实验结果:模块运行,模块上电自动进入 AES 加密程序,2.检测到按键 S1 时,进行 加密,显示加密的字符串 3.再次检测按键 S1,显示加密结果。 - 48 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 关键代码: 1. AES 初始化函数 void initAes(void) 初始化液晶,IO 口和时钟等 2. AES 加密函数 void aes(void) 设定 AES 加密方法,检测时候有按键,当有按键 按下时,进入 AES 加密函数,并进行加密,再次有按键按下时,显示加密结 果。 3. 主函数 初始化也液晶显示,如果加密完成,显示 Finish void initAes(void) { Initial_IO(); initial_lcd(); clear_screen(); //clear all dots LCD_write_english_string(1,1," Welcome to ES "); LCD_write_english_string(2,1," es-tech.taobao.com"); //显示英文字符串 SET_MAIN_CLOCK_SOURCE(CRYSTAL); } void main(void){ initAes(); Blue_LED=0; LCD_write_english_string(3,0," aes(); AES Testing"); LCD_write_english_string(7,0," Finish "); while(1){} } void aes(void) { char plainText[STRING_LENGTH]; // char cipherText[STRING_LENGTH]; // // Clearing both strings memset(plainText, ' ', STRING_LENGTH); - 49 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com memset(cipherText, ' ', STRING_LENGTH); Blue_LED=1; // Inserting, printing plaintext and waiting for input strcpy(plainText, (char*)"Chipcon AS"); LCD_disp_char(5,1,plainText[0]);LCD_disp_char(5,19,plainText[1]); LCD_disp_char(5,37,plainText[2]);LCD_disp_char(5,55,plainText[3]); LCD_disp_char(5,73,plainText[4]);LCD_disp_char(5,91,plainText[5]); LCD_disp_char(5,109,plainText[6]); LCD_write_english_string(7,0," Please push S1"); while(Key1); LCD_write_english_string(7,0," "); Delayms(1000); // Setting the correct mode for AES and loading the key AES_SETMODE(CTR); halAesLoadKeyOrInitVector(key, TRUE); Blue_LED=0; // encrypt text and clearing plain text halAesEncrDecr((BYTE *)plainText, STRING_LENGTH, (BYTE *)cipherText, IV, ENCRYPT); memset(plainText, ' ', STRING_LENGTH); // printing ciphertext and waiting for user LCD_disp_char(5,1,cipherText[0]);LCD_disp_char(5,19,cipherText[1]); LCD_disp_char(5,37,cipherText[2]);LCD_disp_char(5,55,cipherText[3]); LCD_disp_char(5,73,cipherText[4]);LCD_disp_char(5,91,cipherText[5]); LCD_disp_char(5,109,cipherText[6]); LCD_write_english_string(7,0," Please push S1"); while(Key1); LCD_write_english_string(7,0," "); Delayms(1000); Blue_LED=1; - 50 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com // decrypt text, printing result and waiting for user halAesEncrDecr((BYTE *)cipherText, STRING_LENGTH, (BYTE *)plainText, IV, DECRYPT); LCD_disp_char(5,1,plainText[0]); LCD_write_english_string(7,0," Please push S1"); while(Key1); LCD_write_english_string(7,0," "); Delayms(1000); Blue_LED=0; } 5.17 随机序列产生器 Random Sequence  实验目的:学习设置和使用芯片内部的硬件随机序列产生器  实验步骤:连接液晶,把程序通过仿真器下载到无线模块并运行。  实验结果:每隔固定时间产生一组随机序列,并显示在液晶上,同时更新液 晶并改变蓝色 LED 的显示状态 关键代码: 1. Random Sequence 初始化函数 void initRandom(void) 初始化液晶,IO 口和时 钟等 2. 随机序列产生函数 halInitRandomGenerator() 3. 主函数 调用随机序列产生函数 halInitRandomGenerator(),每隔一段时间产生 一随机序列,并显示在液晶上。 void initRandom(void) { DISABLE_ALL_INTERRUPTS(); Initial_IO(); initial_lcd(); clear_screen(); //clear all dots LCD_write_english_string(1,1," Welcome to ES "); //显示英文字符串 LCD_write_english_string(2,1," es-tech.taobao.com"); LCD_write_english_string(4,1," Random Sequence "); //显示字符串 } - 51 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com void main(void){ BYTE randomChar; UINT8 i,rand; // Random Sequence initRandom(); Blue_LED=1; halInitRandomGenerator(); while( 1 ){ lcd_cs1=0; lcd_address(6,20); lcd_cs1=1; // Read random register for(i = 0; i < 14; i++) { GET_RANDOM_BYTE(rand); // randChar is equal a random value between 'a' and 'z' // in the ascii table randomChar = 'a' + (rand % ('z' - 'a')) ; LCD_write_char(randomChar); halWait(1); } halWait(255);halWait(255); halWait(255);halWait(255); Blue_LED=!Blue_LED; } } // End of main() 5.18 DMA  实验目的:学习设定和使用 DMA  实验步骤:连接液晶,把程序通过仿真器下载到无线模块并运行。  实验结果:当检测到按键 S1 时,设定 DMA 从 RAM 里转出数据,如果成功, - 52 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 则点亮蓝色 LED 并在液晶上提示 Correct, 否则提示 Error 关键代码: 1. DMA 初始化函数 void initDma(void) 初始化液晶,IO 口和时钟等 2. 主函数 初始化 DMA,设定 DMA 转换的参数,检测按键,当有按键按下时, 使用 DMA 从 RAM 里转出数据,如果成功,则点亮蓝色 LED 并在液晶上提示 Correct, 否则提示 Error。 void initDma(void) { SET_MAIN_CLOCK_SOURCE(CRYSTAL); Initial_IO(); initial_lcd(); clear_screen(); //clear all dots LCD_write_english_string(1,1," Welcome to ES "); //显示英文字符串 LCD_write_english_string(2,1," es-tech.taobao.com"); LCD_write_english_string(3,1," DMA Testing "); //显示字符串 } void main(void){ DMA_DESC dmaChannel; char sourceString[] = "This is a test string used to demonstrate DMA transfer."; char destString[ sizeof(sourceString) ]; INT8 i; INT8 errors = 0; initDma(); //Clearing the destination memset(destString, 0, sizeof(destString) ); // Setting up the DMA channel. SET_WORD(dmaChannel.SRCADDRH, dmaChannel.SRCADDRL, &sourceString); // The start address of the data to be transmitted SET_WORD(dmaChannel.DESTADDRH, dmaChannel.DESTADDRL, &destString); // The start address of the destination. - 53 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com SET_WORD(dmaChannel.LENH, dmaChannel.LENL, sizeof(sourceString)); // Setting the number of bytes to transfer. dmaChannel.VLEN = VLEN_USE_LEN; // Using the length field to determine how many bytes to transfer. dmaChannel.PRIORITY = PRI_HIGH; // High priority. dmaChannel.M8 = M8_USE_8_BITS; // Irrelevant since length is determined by the LENH and LENL. dmaChannel.IRQMASK = FALSE; // The DMA shall not issue an IRQ upon completion. dmaChannel.DESTINC = DESTINC_1; // The destination address is to be incremented by 1 after each transfer. dmaChannel.SRCINC = SRCINC_1; // The source address inremented by 1 byte after each transfer. dmaChannel.TRIG = DMATRIG_NONE; // The DMA channel will be started manually. dmaChannel.TMODE = TMODE_BLOCK; // The number of bytes specified by LENH and LENL is transferred. dmaChannel.WORDSIZE = WORDSIZE_BYTE; // One byte is transferred each time. // Using DMA channel 0. // Setting where the DMA channel is to read the desciptor and arming the DMA channel. DMA_SET_ADDR_DESC0(&dmaChannel); DMA_ABORT_CHANNEL(0); DMA_ARM_CHANNEL(0); //Waiting for the user to start the transfer. LCD_write_english_string(5,1," Please push S1 "); while(Key1); halWait(255); //显示字符串 // Clearing all DMA complete flags and starting the transfer. DMAIRQ = 0x00; DMA_START_CHANNEL(0); - 54 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com // Waiting for the DMA to finish. while(!(DMAIRQ & DMA_CHANNEL_0)); // Verifying that data is transferred correctly for(i=0;i254) //时间到 { count = 0; pTxData[0] = 0; // Load data basicRfSendPacket(ADDR, pTxData, APP_PAYLOAD_LENGTH); // sent data halIntOff(); // Put MCU to sleep. halMcuSetLowPowerMode(HAL_MCU_LPM_3); // Will turn on global halIntOn(); // interrupt enable Yellow_LED1=~Yellow_LED1; } if (basicRfPacketIsReady()){ // receive data if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)>0) { if(pRxData[0] == 0) { // if the data is 0 Blue_LED=!Blue_LED; pRxData[0] = 2; // change data } } } halMcuWaitMs(1); // 延时 1 毫秒 } } - 57 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 6. 项目实践 6.1. 一对一数据传输 文件包含发送程序和接收程序两个文件,工程文件在 ide 文件夹里 测试本程序需要两个无线模块。 实验步骤: 分别把两个程序下载到两个模块中 ********************************************************************* 发送模块程序 实验操作: 把本程序下载到其中一个模块中,模块上电每隔一段时间向地址为 RECEIVE_ADDR = 0x1515 的模块发送数据 pTxData[APP_PAYLOAD_LENGTH],数据 - 58 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 长度通过修改 APP_PAYLOAD_LENGTH 值来改变,数据值通过修改 pTxData 数组 里的数据实现,发送时间间隔通过改变延时时间来实现。 模块每发送一个数据,黄色 LED 显示状态改变一次。 ********************************************************************* /******************************************************************** 接收模块程序 实验操作: 把本程序下载到其中一个模块中,模块上电设定本机地址为 RECEIVE_ADDR = 0x1515,当检测到 有其他模块向本地址发送数据,进入到数据接收函数,把数据保存在寄存器 Receive_Data_buffer 中,并改变蓝色 LED 的显示状态。 ********************************************************************* 6.2. 一对多(多对一)数据传输 文件包含发送程序和接收程序,工程文件在 ide 文件夹里 测试本程序需要三个或以上无线模块。 实验步骤:分别把两个程序下载到相应的模块中 - 59 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com /******************************************************************** 发送模块程序 实验操作: 把本程序下载到其中一个模块中,模块上电每隔一段时间向地址为 RECEIVE_ADDR1 = 0x1515, RECEIVE_ADDR2 = 0x1516, RECEIVE_ADDR3 = 0x1517 的 三个模块发送数据。发送数据的数据为 pTxData[APP_PAYLOAD_LENGTH],数据长 度通过修改 APP_PAYLOAD_LENGTH 值来改变,数据值通过修改 pTxData 数组里 的数据实现,发送时间间隔通过改变延时时间来实现。 模块每发送一个数据,黄色 LED 显示状态改变一次。 ********************************************************************* /******************************************************************** 接收模块程序 实验操作: 首先修改模块的地址 RECEIVE_ADDR,分别设定地址为 0x1515,0x1516,0x1517, 然后分别把程序下载到每一个模块中并运行。模块上电自动会设置好设定本机地 址,basicRfConfig.myAddr = RECEIVE_ADDR; 当检测到 有其他模块向本地址发送数据,进入到数据接收函数,把数据保存在寄存器 Receive_Data_buffer 中,并改变蓝色 LED 的显示状态。 ********************************************************************* 6.3. 无线数据传输并显示在液晶上 文件包含发送程序和接收程序两个文件,工程文件在 ide 文件夹里 测试本程序需要两个无线模块。 需要在本店铺购买 JLX12864 液晶模块 实验步骤:分别把两个程序下载到相应的模块中 - 60 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com /******************************************************************** 发送模块程序 实验操作: 把本程序下载到其中一个模块中,模块上电每隔一段时间向地址为 RECEIVE_ADDR = 0x1515 的模块发送数据 pTxData[APP_PAYLOAD_LENGTH],数据 长度通过修改 APP_PAYLOAD_LENGTH 值来改变,数据值通过修改 pTxData 数组 里的数据实现,发送时间间隔通过改变延时时间来实现。 液晶显示本机的状态,发送的地址和发送的数据 模块每发送一个数据,黄色 LED 显示状态改变一次。 ********************************************************************* /******************************************************************** 接收模块程序 实验操作: 把本程序下载到其中一个模块中,模块上电每隔一段时间向地址为 RECEIVE_ADDR = 0x1515 的模块发送数据 pTxData[APP_PAYLOAD_LENGTH],数据 长度通过修改 APP_PAYLOAD_LENGTH 值来改变,数据值通过修改 pTxData 数组 里的数据实现,发送时间间隔通过改变延时时间来实现。 - 61 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 液晶显示本机的状态,发送的地址和发送的数据 模块每发送一个数据,黄色 LED 显示状态改变一次。 ********************************************************************* 6.4. AD 采样与无线数据通信并显示 文件包含 AD 采样发送和无线数据接收显示两个文件夹,工程文件在 ide 文件夹 里,需要在本店铺购买 JLX12864 液晶模块 实验步骤:分别把两个程序下载到两个模块中 /******************************************************************** 接收显示程序 实验操作: 把本程序下载到模块中并运行,模块上电后检测是否接收到数据,如果接收到数 据,把数据储存到 Data_receive_buffer 数组里,并转换成温度值,显示在液晶 上,同时改变蓝色 LED 的显示状态。 注意:需要在本店铺购买 JLX12864 液晶模块 ********************************************************************* /******************************************************************** AD 采样程序 实验操作: - 62 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 把本程序下载到模块中并运行,模块上电后每隔一段时间使用 AD 采样内部的温 度芯片的电压值并转化成温度值,显示在液晶上。同时,温度值储存在 pTxData 数组里,通过 Zigbee 协议发送到地址为 ADDR 0xBEEF 的模块中 当接收模块接收到数据以后,把接收到的数据转化成温度值,并显示在液晶上 注意:需要在本店铺购买 JLX12864 液晶模块 ********************************************************************* 6.5. 按键实现无线点灯 文件包含 LED 控制和按键发送两个文件夹,工程文件在 ide 文件夹里 测试本程序需要两个无线模块。 实验步骤:分别把两个程序下载到两个模块中 /******************************************************************** LED 接收模块程序 实验操作: - 63 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 把本程序下载到模块中并运行,模块上电自动检测是否接收到数据,如果接收到 数据,判断数据的值,并控制相应的 LED 点亮或熄灭。 按键 S1 对应蓝色 LED,按键 S2 对应黄色 LED1,按键 S3 对应黄色 LED2 ********************************************************************* /******************************************************************** 按键发送模块程序 实验操作: 把本程序下载到模块中并运行,模块上电自动检测是否有按键,如果有按键按下, 则发送相应的数据到指定地址的无线模块中,地址设定为 LIGHT_ADDR 0xBEEF 当接收模块接收到数据以后,判断数据的值,并控制相应的 LED 点亮或熄灭。 按键 S1 对应蓝色 LED,按键 S2 对应黄色 LED1,按键 S3 对应黄色 LED2 ********************************************************************* 6.6. 电脑控制实现无线点灯功能 文件包含 LED 控制和接收电脑发送过来的数据并把数据无线发射出去两个文件 夹,工程文件在 ide 文件夹里 测试本程序需要两个无线模块。使用串口调试助手请将波特率设定为 115200, 并选择合适串口号,勾选 HEX 发送。 测试本程序首先需要在电脑安装 PL2302 USB 转串口驱动,并使用 USB 线连接模 块和电脑 实验步骤:分别把两个程序下载到两个模块中 电脑端串口调试助手设置为: - 64 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com /******************************************************************** LED 接收模块程序 实验操作: 把本程序下载到模块中并运行,模块上电自动检测是否接收到数据,如果接收到 数据,判断数据的值,并控制相应的 LED 点亮或熄灭。 数据 0x01 对应蓝色 LED,数据 0x02 对应黄色 LED1,数据 0x03 对应黄色 LED2 ********************************************************************* /******************************************************************** 接收电脑发送过来的数据并把数据无线发射出去程序 实验操作: 把本程序下载到模块中并运行,模块上电自动检测是否有按接收到电脑发送过来 的数据,如果检测到数据,则发送相应的数据到指定地址的无线模块中,地址设 定为 LIGHT_ADDR 0xBEEF 当接收模块接收到数据以后,判断数据的值,并控制相应的 LED 点亮或熄灭。 数据 0x01 对应蓝色 LED,数据 0x02 对应黄色 LED1,数据 0x03 对应黄色 LED2 - 65 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com ********************************************************************* 6.7. 无线传输质量检测(PER RSSI) 本文件包含数据发送和信号质量检测两个文件夹,工程文件在 iar 文件夹里 实验步骤: 1.安装 PL2302 USB 转串口驱动; 2.分别把两个程序下载到两个模块中; 3.用 USB 线连接信号检测模块和电脑; 4.打开两个模块的电源; 5.打开串口调试助手,并选择正确的串口号和设置好波特率; 6.改变发送模块与接收模块的距离,观察 PER 和 RSSI 值得变化。 测试的无线数据传输质量如下图所示: /******************************************************************** 此程序为信号质量检测程序 实验操作: 把本程序下载到模块中并运行,模块上电自动检测发送模块发送过来的数据包, - 66 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 并检测 无线传输质量,包裹漏包率 PER 和 信号强度 RSSI 值,并发送到电脑。 注意:使用串口调试助手请将波特率设定为 115200,并选择合适串口号,勾选 HEX 发送。 测试本程序首先需要在电脑安装 PL2302 USB 转串口驱动,并使用 USB 线连接模 块和电脑 如果接收到的数据不正常,请复位一下发送模块即可。 ********************************************************************* /******************************************************************** 此程序为信号发送程序 实验操作: 把本程序下载到模块中并运行,模块上电每隔一段时间发送一个数据包,接收到 模块接收到数据包后检测数据传输的质量。每发送一次数据,蓝色 LED 闪亮一次。 注意:如果接收模块接收到的数据不正常,请复位一下发送模块即可。 本模块不需要连接电脑和液晶 ********************************************************************* 6.8. ZigBee 智能家居方案实现 - 67 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 7. 官方协议栈实验 7.1. 协议栈中的串口实验 注意: 1. 先安装好 PL2302 USB 转串口驱动,转备好 USB 线,连接计算机与接收模块。 2. 设置波特率为 115200,不要勾选 HEX 显示,选择正确的串口号 3. 只需要一个模块。  实验目的:学习如何使用 TI 提供的协议栈,进行串口实验  实验步骤: - 68 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 1. 打开工程文件: \Projects\zstack\Samples\SampleApp\CC2530DB\ SampleApp,选择,选择 CoordinatorEB-Pro, 更改 option 的设置,加入预编 译条件, ZIGBEEPRO ZTOOL_P1 xMT_TASK xMT_SYS_FUNC xMT_ZDO_FUNC 如下图所示: 2. 全速运行,可以看到串口助手收到信息。 - 69 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 3. 如果想显示 Z-stack MT 层定义的数据,可以更改预编译条件为: ZIGBEEPRO ZTOOL_P1 MT_TASK MT_SYS_FUNC MT_ZDO_FUNC 如下图所示: - 70 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 具体实验: 1. 串口初始化函数 void MT_UartInit () { halUARTCfg_t uartConfig; /* Initialize APP ID */ App_TaskID = 0; /* UART Configuration */ uartConfig.configured = TRUE; uartConfig.baudRate = MT_UART_DEFAULT_BAUDRATE; uartConfig.flowControl = MT_UART_DEFAULT_OVERFLOW; uartConfig.flowControlThreshold = MT_UART_DEFAULT_THRESHOLD; uartConfig.rx.maxBufSize = MT_UART_DEFAULT_MAX_RX_BUFF; uartConfig.tx.maxBufSize = MT_UART_DEFAULT_MAX_TX_BUFF; uartConfig.idleTimeout = MT_UART_DEFAULT_IDLE_TIMEOUT; uartConfig.intEnable = TRUE; #if defined (ZTOOL_P1) || defined (ZTOOL_P2) - 71 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com uartConfig.callBackFunc = MT_UartProcessZToolData; #elif defined (ZAPP_P1) || defined (ZAPP_P2) uartConfig.callBackFunc = MT_UartProcessZAppData; #else uartConfig.callBackFunc = NULL; #endif /* Start UART */ #if defined (MT_UART_DEFAULT_PORT) HalUARTOpen (MT_UART_DEFAULT_PORT, &uartConfig); #else /* Silence IAR compiler warning */ (void)uartConfig; #endif /* Initialize for ZApp */ #if defined (ZAPP_P1) || defined (ZAPP_P2) /* Default max bytes that ZAPP can take */ MT_UartMaxZAppBufLen = 1; MT_UartZAppRxStatus = MT_UART_ZAPP_RX_READY; #endif } 其中 uartConfig.baudRate = MT_UART_DEFAULT_BAUDRATE;是配置波特率 uartConfig.flowControl = MT_UART_DEFAULT_OVERFLOW; 语句是配置流控 的, 预编译是根据预先定义的 ZTOOL 或者 ZAPP 选择不同的数据处理函数。后面的 P1 和 P2 则是串口 0 和串口 1。我们用 ZTOOL,串口 0。我们可以在 option——C/C++ 的 CompilerPreprocessor 地方加入,如上述步骤描述所示。 7.2. 协议栈的无线数据传输 注意: 1. 先安装好 PL2302 USB 转串口驱动,转备好 USB 线,连接计算机与接收模块。 2. 需要两个模块。 - 72 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com  实验目的:学习如何使用 TI 提供的协议栈,进行无线数据传输。其中一个 模块为协调器,一个模块为无线终端。  实验步骤: 1. 打开工程文件:协议栈的无线数据传输 \Projects\zstack\Samples\SampleApp\CC2530DB\ SampleApp,选择 EndDeviceEB-Pro, 下载到其中一个无线模块中;(作为终端设备无线发送数 据给协调器),如下图所示。 2. 选择 CoodinatorEB-Pro, 下载到另外一个模块;(作为协调器串口跟电脑连 接),并连接 USB 线。如下图所示。 3. 运行两个模块,串口调试助手每隔 5 秒便收到一次数据,如下图所示: - 73 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com  实验结果:一个模块为协调器,一个模块为无线终端,当无线终端没有连接 到协调器时,无线终端的蓝色 LED 每秒闪亮一次,当连接上协调器之后蓝色 LED 常亮,代表已经连接成功。然后无线终端每隔 5 秒向协调器发送一次数 据。协调器上电以后,先进行配置,蓝色 LED 会闪亮几次,然后常亮,协调 器初始化成功先向电脑发送 Hello world,然后接收到无线终端数据后通过串 口发送给电脑。 具体实验:(发送部分) 1. 周期性发送数据函数 void SampleApp_SendPeriodicMessage( void ) { uint8 data[10]={0,1,2,3,4,5,6,7,8,9}; if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc, SAMPLEAPP_PERIODIC_CLUSTERID, 10, data, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { } } - 74 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 2. 登记事件,设置编号、发送时间等 uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ) { afIncomingMSGPacket_t *MSGpkt; (void)task_id; // Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) { MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); while ( MSGpkt ) { switch ( MSGpkt->hdr.event ) { case CMD_SERIAL_MSG: SampleApp_SerialCMD((mtOSALSerialData_t *)MSGpkt); break; // Received when a key is pressed case KEY_CHANGE: SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys ); break; // Received when a messages is received (OTA) for this endpoint case AF_INCOMING_MSG_CMD: SampleApp_MessageMSGCB( MSGpkt ); break; // Received whenever the device changes state in the network case ZDO_STATE_CHANGE: SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status); if ( (SampleApp_NwkState == DEV_ZB_COORD) || (SampleApp_NwkState == DEV_ROUTER) || (SampleApp_NwkState == DEV_END_DEVICE) ) { // Start sending the periodic message in a regular interval. - 75 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); } else { // Device is no longer in the network } break; default: break; } // Release the memory osal_msg_deallocate( (uint8 *)MSGpkt ); // Next - if one is available MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } // Send a message out - This event is generated by a timer // (setup in SampleApp_Init()). if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) { // Send the periodic message SampleApp_SendPeriodicMessage(); // Setup to send message again in normal period (+ a little jitter) osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) ); - 76 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com // return unprocessed events return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT); } // Discard unknown events return 0; } 解释: 1. SampleApp_TaskID 为任务 ID,函数开头定义了 SampleApp_TaskID = task_id;也就 是 SampleApp 初始化的任务 ID 号。 2. SAMPLEAPP_AA_PERIODIC_MSG_EVT 为登记任务事件,同一个任务下可以有多 个事件,这个是事件的号码。我们可以定义自己的事件,但是编号不能重复。文 件定义了#define SAMPLEAPP_SEND_PERIODIC_MSG_EVT 0x0001 3. SAMPLEAPP_AA_PERIODIC_MSG_TIMEOUT 为事件重复执行的时间。这里可以你 需要发送数据的时间间隔。文件中定义了#define SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT 5000,这里以毫秒为单位,所以是 5s,也就是刚刚实验为什么隔约 5s 收到数据的原因。 具体实验:(接收部分) 1. 读取数据并把发送到电脑函数 void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) { uint8 asc_16[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'},i; uint16 flashTime; switch ( pkt->clusterId ) { case SAMPLEAPP_PERIODIC_CLUSTERID: HalUARTWrite(0,"Receive data: \n",14); //receive data // HalUARTWrite(0, &pkt->cmd.Data[0],10); //sent data to PC (HEX format) for(i=0;i<10;i++) HalUARTWrite(0,&asc_16[pkt->cmd.Data[i]],1);//sent data to PC (ASCII format) - 77 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com HalUARTWrite(0,"\n",1); break; // line break case SAMPLEAPP_FLASH_CLUSTERID: flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] ); HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) ); break; } } 解释: 所有的数据和信息都在函数传入来的 afIncomingMSGPacket_t *pkt 里面,进 入 afIncomingMSGPacket_t 的定义,它是一个结构体,内容如下: typedef struct { osal_event_hdr_t hdr; /* OSAL Message header */ uint16 groupId; /* Message's group ID - 0 if not set */ uint16 clusterId; /* Message's cluster ID */ afAddrType_t srcAddr; /* Source Address, if endpoint is STUBAPS_INTER_PAN_EP, it's an InterPAN message */ uint16 macDestAddr; /* MAC header destination short address */ uint8 endPoint; /* destination endpoint */ uint8 wasBroadcast; /* TRUE if network destination was a broadcast address */ uint8 LinkQuality; /* The link quality of the received data frame */ uint8 correlation; /* The raw correlation value of the received data frame */ int8 rssi; /* The received RF power in units dBm */ uint8 SecurityUse; /* deprecated */ uint32 timestamp; /* receipt timestamp from MAC */ afMSGCommandFormat_t cmd; /* Application Data */ } afIncomingMSGPacket_t; 里面包含了数据包的所有东西,长地址、短地址、RSSI 等。其中洪湖数据在 afMSGCommandFormat_t cmd 里面。 typedef struct { - 78 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com byte TransSeqNumber; uint16 DataLength; byte *Data; } afMSGCommandFormat_t; // Number of bytes in TransData 7.3. 协议栈网络通讯实验(单播、组播、广播) 文件名:协议栈网络通信实验(单播) Zigbee 的通讯方式主要有三种点播、组播、广播。点播,顾名思义就是点对 点通信,也就是 2 个设备之间的通讯,不容许有第三个设备收到信息;组播,就 是把网络中的节点分组,每一个组员发出的信息只有相同组号的组员才能收到。 广播,最广泛的也就是 1 个设备上发出的信息所有设备都能接收到。 这也是 ZigBee 通信的基本方式。 注意: 1. 先安装好 PL2302 USB 转串口驱动,转备好 USB 线,连接计算机与接收模块。 2. 需要两个或者两个以上模块,分别用于协调器、路由器、终端。  实验目的:学习如何使用 TI 提供的协议栈,进行组网和无线数据通信。其 中一个模块为协调器,一个模块为无线终端,一个模块为路由器。  实验步骤: 1. 打开工程文件:协议栈的无线数据传输 \Projects\zstack\Samples\SampleApp\CC2530DB\ SampleApp,分别选择 EndDeviceEB-Pro, RouterEB-Pro,CoordintorEB-Pro,分别下载到三个模块中, 如下图所示。 - 79 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 2. 连接计算机与协调器模块,可以看到协调器接收到数据。  实验结果:将修改后的程序分别以协调器、路由器、终端的方式下载到 3 个节点设备中,连接串口。可以看到只有协调器在一个周期内收到信息。也 就是说路由器和终端均与地址为 0x00(协调器)的设备通信,不语其他设 备通信。实现点对点传输。 具体实验: 1. 发送部分 - 80 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 点播描述的就是网络中 2 个节点相互通信的过程。确定通信对象的就是节点 的短地址。下面我们在 SampleApp 例程完通过简单的修改完成单播实验。 终端的描述文件在 AF.h 文件里,找到下面代码: * Endpoint Descriptions typedef enum { afAddrNotPresent = AddrNotPresent, afAddr16Bit = Addr16Bit, afAddr64Bit = Addr64Bit, afAddrGroup = AddrGroup, afAddrBroadcast = AddrBroadcast } afAddrMode_t; 当 addrMode= Addr16Bit 时,对应点播方式; 当 addrMode= AddrGroup 时, 对应组播方式; 当 addrMode= AddrBroadcast 时,对应广播方式; 在 SampleApp.c 文件里设定 afAddrType_t Point_To_Point_DstAddr;其中 Point_To_Point_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;//点播 Point_To_Point_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; Point_To_Point_DstAddr.addr.shortAddr = 0x0000; //发给协调器 第三行的意思是点播的发送对象是 0x0000,也就是协调器的地址。节点和 协调器点对点通讯。 点对点发送函数 void SampleApp_SendPointToPointMessage( void ) { uint8 data[10]={0,1,2,3,4,5,6,7,8,9}; if ( AF_DataRequest( &Point_To_Point_DstAddr, &SampleApp_epDesc, SAMPLEAPP_POINT_TO_POINT_CLUSTERID, 10, data, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { } } - 81 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 其中 Point_To_Point_DstAddr 我们之前已经定义,我们在 SampleApp.h 中加入 SAMPLEAPP_POINT_TO_POINT_CLUSTERID 的定义如下: #define SAMPLEAPP_POINT_TO_POINT_CLUSTERID 4 //传输编号 2. 接收部分 接收数据函数 void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) { uint8 asc_16[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'},i; uint16 flashTime; switch ( pkt->clusterId ) { case SAMPLEAPP_POINT_TO_POINT_CLUSTERID: HalUARTWrite(0,"Reveiver data: \n",14); //reveive data for(i=0;i<10;i++) HalUARTWrite(0,&asc_16[pkt->cmd.Data[i]],1);//sent data to PC HalUARTWrite(0,"\n",1); break; case SAMPLEAPP_FLASH_CLUSTERID: flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] ); HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) ); break; } } 其中接收 ID 我们在原来基础上改成我们刚定义的 SAMPLEAPP_POINT_TO_POINT_CLUSTERID. 将修改后的程序分别以协调器、路由器、终端的方式下载到 3 个节点设备中, 连接串口。可以看到只有协调器在一个周期内收到信息。也就是说路由器和终端 均与地址为 0x00(协调器)的设备通信,不语其他设备通信。实现点对点传输。 文件名:协议栈网络通信实验(组播) Zigbee 的通讯方式主要有三种点播、组播、广播。点播,顾名思义就是点对 - 82 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 点通信,也就是 2 个设备之间的通讯,不容许有第三个设备收到信息;组播,就 是把网络中的节点分组,每一个组员发出的信息只有相同组号的组员才能收到。 广播,最广泛的也就是 1 个设备上发出的信息所有设备都能接收到。 这也是 ZigBee 通信的基本方式。 注意: 1. 先安装好 PL2302 USB 转串口驱动,转备好 USB 线,连接计算机与接收模块。 2. 需要两个或者两个以上模块,分别用于协调器、路由器、终端。  实验目的:学习如何使用 TI 提供的协议栈,进行组网和无线数据通信。其 中一个模块为协调器,一个模块为无线终端,一个模块为路由器。  实验步骤: 1. 打开工程文件:协议栈的无线数据传输 \Projects\zstack\Samples\SampleApp\CC2530DB\ SampleApp,分别选择 EndDeviceEB-Pro, RouterEB-Pro,CoordintorEB-Pro,分别下载到三个模块中, 如下图所示。 2. 连接计算机与协调器模块,可以看到协调器接收到数据。 - 83 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com  实验结果:将修改后的程序分别以协调器、路由器、终端的方式下载到 3 个设备,把协调器和路由器组号设置成 0x0002,终端设备组号设成 0x0003。 连接串口,可以观察到只有 0x0002 的两个设备相互发送信息。 具体实验: 1. 发送部分 组播描述的就是网络中所有节点设备被分组后组内相互通信的过程。确定通 信对象的就是节点的组号。下面我们在 SampleApp 例程完通过简单的修改完成 组播实验。 终端的描述文件在 AF.h 文件里,找到下面代码: 1. 在SampleApp.c中加入2项内容: 组播afAddrType_t的类型变量 afAddrType_t Group_DstAddr 组播内容的结构体: 2. 加入组播参数的配置。 Group_DstAddr.addrMode = (afAddrMode_t)afAddrGroup; Group_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; Group_DstAddr.addr.shortAddr = Test_GROUP; 其中 Test_GROUP 在 SampleApp.h 里面定义组号为 2: #define Test_GROUP 0x0002 // 组播号 2 - 84 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com { afAddrNotPresent = AddrNotPresent, afAddr16Bit = Addr16Bit, afAddr64Bit = Addr64Bit, afAddrGroup = AddrGroup, afAddrBroadcast = AddrBroadcast } afAddrMode_t; 发送函数 void SampleApp_SendGroupMessage( void ) { uint8 data[10]={0,1,2,3,4,5,6,7,8,9}; if ( AF_DataRequest( &Group_DstAddr, &SampleApp_epDesc, Test_GROUP_CLUSTERID, 10, data, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { } } 其中 Group_DstAddr 我们之前已经定义,我们在 SampleApp.h 中加入 Test _GROUP_CLUSTERID 的定义如下: #define Test _GROUP_CLUSTERID 4 // 传输编号 4 2. 接收部分 接收数据函数 void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) { uint8 asc_16[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'},i; uint16 flashTime; switch ( pkt->clusterId ) { case Test_GROUP_CLUSTERID: HalUARTWrite(0,"Receive data: \n",14); // - 85 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com for(i=0;i<10;i++) HalUARTWrite(0,&asc_16[pkt->cmd.Data[i]],1);// sent data to PC HalUARTWrite(0,"\n",1); // break; case SAMPLEAPP_FLASH_CLUSTERID: flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] ); HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) ); break; } } 其中接收 ID 我们在原来基础上改成我们刚定义 Test_GROUP_CLUSTERID。 将修改后的程序分别以协调器、路由器、终端的方式下载到 3 个设备,把协 调器和路由器组号设置成 0x0002,终端设备组号设成 0x0003。连接串口,可以 观察到只有 0x0002 的两个设备相互发送信息。 文件名:协议栈网络通信实验(广播) Zigbee 的通讯方式主要有三种点播、组播、广播。点播,顾名思义就是点对 点通信,也就是 2 个设备之间的通讯,不容许有第三个设备收到信息;组播,就 是把网络中的节点分组,每一个组员发出的信息只有相同组号的组员才能收到。 广播,最广泛的也就是 1 个设备上发出的信息所有设备都能接收到。 这也是 ZigBee 通信的基本方式。 注意: 3. 先安装好 PL2302 USB 转串口驱动,转备好 USB 线,连接计算机与接收模块。 4. 需要两个或者两个以上模块,分别用于协调器、路由器、终端。  实验目的:学习如何使用 TI 提供的协议栈,进行组网和无线数据通信。其 中一个模块为协调器,一个模块为无线终端,一个模块为路由器。  实验步骤: 1. 打开工程文件:协议栈的无线数据传输 \Projects\zstack\Samples\SampleApp\CC2530DB\ SampleApp,分别选择 EndDeviceEB-Pro, RouterEB-Pro,CoordintorEB-Pro,分别下载到三个模块中, 如下图所示。 - 86 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 2. 连接计算机与协调器模块,可以看到各个设备都在广播发送信息,同时 也接收广播信息。 实验结果:将修改后的程序分别以协调器、路由器、终端的方式下载到 3 个设备,可以看到各个设备都在广播发送信息,同时也接收广播信息  具体实验: 1. 发送部分 - 87 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 广播就是任何一个节点设备发出广播数据,网络中的任何设备都能收到。广 播的定义都是协议栈预先定义好的。所以我们直接来运用就可以了。 在 SampleApp.c 中找到广播参数的配置。代码如下。 SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast; SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_Periodic_DstAddr.addr.shortAddr = 0xFFFF; 其中 0xFFFF 是广播地址。 发送函数 void SampleApp_SendPeriodicMessage( void ) { uint8 data[10]={0,1,2,3,4,5,6,7,8,9}; if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc, SAMPLEAPP_PERIODIC_CLUSTERID, 10, data, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { } } 其中 #define SAMPLEAPP_PERIODIC_CLUSTERID 1 // 广播传输编号 1 2. 接收部分 接收数据函数 void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) { uint8 asc_16[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'},i; uint16 flashTime; switch ( pkt->clusterId ) { case SAMPLEAPP_PERIODIC_CLUSTERID: HalUARTWrite(0,"Receive data: \n",14); for(i=0;i<10;i++) HalUARTWrite(0,&asc_16[pkt->cmd.Data[i]],1);//sent data to PC - 88 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com HalUARTWrite(0,"\n",1); break; case SAMPLEAPP_FLASH_CLUSTERID: flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] ); HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) ); break; } } 其中默认接收 ID 就是刚定义的周期性广播发送 ID。 将修改后的程序分别以协调器、路由器、终端的方式下载到 3 个设备,可以 看到各个设备都在广播发送信息,同时也接收广播信息 7.4. .协议栈网络管理 ZigBee 协议栈网络管理这章内容主要是对新加入的设备节点的设备管。我 们都知道每个 CC2530 芯片出厂时候都有一个全球唯一的 32 位 MAC 地址。当 时当设备连入网络中的时候,每个设备都能获得由协调器分配的 16 位短地址, 协调器默认地址(0x0000)。很多时候网络就是通过短地址进行管理。 注意: 1. 先安装好 PL2302 USB 转串口驱动,转备好 USB 线,连接计算机与接收模块。 2. 需要两个或者两个以上模块,分别用于协调器、路由器、终端。  实验目的:学习如何使用 TI 提供的协议栈,进行网络管理。  实验步骤: - 89 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 1. 打开工程文件:协议栈的无线数据传输 \Projects\zstack\Samples\SampleApp\CC2530DB\ SampleApp,分别选择 EndDeviceEB-Pro, RouterEB-Pro,CoordintorEB-Pro,分别下载到三个模块中, 如下图所示。 2. 连接计算机与协调器模块,可以看到协调器接收到数据。  实验结果:将修改后的程序分别以协调器、路由器、终端的方式下载到 3 个 或以上设备,协调器连接到 PC 机。上电后每个设备往协调器发送自身编 - 90 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 号,协调器通过串口显示出来。 具体实验: 要实现协调器收集数据的功能,可以使用点播方式传输数据,点播地址为协 调器地址(0x0000),避免了路由器和终端之间的互传,减少网络数据拥塞。 在 samplApp.c 中修改发送数据函数为: void SampleApp_SendPointToPointMessage( void ) { uint8 device;//设备类型变量 if ( SampleApp_NwkState == DEV_ROUTER ) device=0x01; //编号 1 表示路由器 else if (SampleApp_NwkState == DEV_END_DEVICE) device=0x02;//编号 2 表示终端 else device=0x03;//编号 3 表示出错 if ( AF_DataRequest( &Point_To_Point_DstAddr, //发送设备类型编号 &SampleApp_epDesc, SAMPLEAPP_POINT_TO_POINT_CLUSTERID, 1, &device, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { } - 91 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com } 修改完成后系统设备自动检测自己烧写的类型,然后发送对应的编号。路由 器编号为 1,终端编号为 2。 接收方面 数据接收方面,我们对接收到的数据进行判断,区分路由器和终端设备。然 后在数据包中取出 16 位短地址。通过串口显示出来。 我们先看看短地址在数据 包里的存放位置(在 AF.h 文件里)。依次是 pkt--- srcAddr--- shortAddr。 我们可以在接收函数中点播 ID 加入下面代码: void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) { uint8 asc_16[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; uint16 flashTime,temp; switch ( pkt->clusterId ) { case SAMPLEAPP_POINT_TO_POINT_CLUSTERID: temp=pkt->srcAddr.addr.shortAddr; //读出数据包的 16 位短地址 if( pkt->cmd.Data[0]==1 ) //路由器 HalUARTWrite(0,"ROUTER ShortAddr:0x",19); //提示接收到数据 if( pkt->cmd.Data[0]==2 ) //终端 HalUARTWrite(0,"ENDDEVICE ShortAddr:0x",22); //提示接收到数据 /****将短地址分解,ASC 码打印*****/ HalUARTWrite(0,&asc_16[temp/4096],1); HalUARTWrite(0,&asc_16[temp%4096/256],1); - 92 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com HalUARTWrite(0,&asc_16[temp%256/16],1); HalUARTWrite(0,&asc_16[temp%16],1); HalUARTWrite(0,"\n",1); break; // 回车换行 case SAMPLEAPP_FLASH_CLUSTERID: flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] ); HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) ); break; } } 将修改后的程序分别以协调器、路由器、终端的方式下载到 3 个 或以上设 备,协调器连接到 PC 机。上电后每个设备往协调器发送自身编号,协调器通过 串口打印出来。利用同样的方法可以将 MAC 地址、PANID、读取出来。或者自行 设定预定义编号进行网络管理。 7.5. 分析仪实验  实验目的: 使用 cc2530 模块做分析仪使用。  实验步骤: 1. 安装分析仪抓包软件, \软件工具\Setup_Packet_Sniffer_2.10.1 目 录里有抓包软件安装源文件,请双击源文件,一路 next 默认路径安装即可。 2. 让另外一个模块处于发送无线数据状态,下载无线任意一个无线数据发送 程序(如点播中的 EndDevice 代码),并运行。 3. 将仿真器和模块连接好并连接到电脑。 4. 打开抓包软件,如下图选择 IEEE802.15.4/ZigBee - 93 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 5. 点击“Start”按钮继续下一步会出现如下画面, 6. 然后点击上图中左上角处的向右的蓝色箭头(也就是运行键)。 - 94 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 7. 最后就可以收到抓包数据,实现分析仪的功能了。 7.6. Zigbee Sensor 实验  实验目的: 使用 cc2530 模块做分析仪使用。  实验步骤: 1,安装 ZigBee Sensor Monitor 1.2.0。进入光盘根目录下的 --------软件工具\ZigBee Sensor Monitor 1.2.0\文件夹下, 双击里面的文件,一路默认安装即可完成安装。 2,先 安 装 光 盘 根 目 录 下 的 ------------ 软 件 工 具 \Flash Programmer 1.11.1 里面的软件,双击它,一路默认安装即 可完成安装。 3,在程序菜单打开该软件。如下图: - 95 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 4, 以上画面中有 2530,是因为我已经把 2530 模块通过仿真器连接到电脑。 5,在 smartrf 软件中的上边,把标签切换到 择如下 ,flashimage 处选 6,点击右边有三个小点的按钮,定位到资料光盘目录下的 CollectorEB.hex 文 件。 \软件工具\CC2530ZDK Sensor Demo Examples\SensorDemo\CC2530DB\CollectorEB\Exe - 96 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 7,然后 Actions 处选择如图: 8,然后点击软件下面的 按钮,过一会会显示: 请记住这个模块就是采集器模块。 9,另外一个模块也如法炮制,只不过在选择 hex 文件的 时候是定位到如下文件 夹 : \ 软 件 工 具 \CC2530ZDK Sensor Demo Examples\SensorDemo\CC2530DB\SensorEB\Exe 10, 然后点击软件下面的 按钮,过一会会显示: - 97 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 完成之后,请记住这个模块就是传感器模块。 11,先将采集器模块通过 usb 转串口板连接到电脑。 12,在程序菜单里打开 ZigBee Sensor Monitor 软件, 这里我的 usb 专串口板占用的是 COM1 按钮,点击软件左上角上的绿色向右箭 头。之后,变化如下图 - 98 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 13,再打开传感器模块的电源开关,,那么 Zigbee Sensor 软件变化如下图: 至此这个实验就做到这里就完成了。 - 99 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 附件 1:开发环境安装与使用方法 安装 IAR 7.60A 方法: 首先打开安装文件,选择 IAR 安装,官方推荐默认安装在系统盘: 提示要求输入License,由IAR 7.60注册机生成(如下图),选项正确后生成License, 复制到License#处: - 100 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 输入注册码后按提示一步步进行安装,直至完成程序安装。程序安装完成后默 认路径为: 安装完成软件界面如下: - 101 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 工程文件的建立 打开我们上次已经安装好的 IAR 软件,新建一个 Project-Create New Project, 选择默认选项可以了,点击 OK。保存在自己希望的路径。 - 102 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 新建文件,输入#include,我们基础实验需要用到的也只有这个 头文件。然后保存为.c 格式到工程文件路径下。 弄好后就可以继续敲代码了,这是基础实验里点亮第一个点亮 LED 代码大家 看懂没问题(具体参考基础实验)。打完后保存,记得要在左边工程里单击右键 ---add---刚保存的 C 文件,成功添加后如图所示。 - 103 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 我们还需要在 IAR 里配置一下几个选项。打开 Project---Options,General Options 配置如下图,单击圆圈所示按钮,先向上返回上一级目录,然后打开 Texas Instruments 文件夹,选择 CC2530F256 芯片。 选择 Linker—Config—Linker command file 选项。单击下图所示按钮,导 出配置文件,先向上返回上一级目录,然后打开 Texas Instruments 文件夹,选 择 lnk51ew_cc2530F256.xcl(这里是使用 CC2530F256 芯片)。 - 104 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 然后在 Debugger 选项的 Driver 里选择 Texas Instruments(使用编程器仿真),下 - 105 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 面选择 io8051.ddf 文件,如下图所示。至此,基本配置已经完成。其它配置以后需 要用到时我们会提及。 Project-Make 编译后显示 0 错误和 0 警告。将仿真器和开发板连接好,然后点 击:Project-Download and Debug (下载与仿真)。快捷键如下图所示: 下 载 下载完成,进入仿真调试界面,常用按钮如下图所示。 - 106 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 点击 GO(全速运行),程序执行。使仿真器可以直接在 IAR 中下载程序并调试。结 束后程序仍然保留在芯片 flash 内,相当于烧写工具。非常方便。 至此,我们已经完成了 Zigbee CC2530 基于 IAR 开发环境的操作流程。无论是基 础实验还是协议栈编程,其方法大同小异。通过本章学习希望你能掌握开发流程。 为接下来的实验内容铺好路。 - 107 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 附件 2:仿真器驱动安装与使用方法 XP 电脑驱动安装 我们将SmartRF04EB 仿真器插进电脑,提示找到新硬件,选择列表安装。 驱动的路径如下图所示,前提是已经安装 IAR 7.60。 - 108 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 安装完成后,重新拔插仿真器,在设备管理器里找到 Chipcon SRF04EB,说明驱 动安装完成,如下图所示。 连接 CC2530 开发板,按下 SmartRF04EB 仿真器复位键,则完成连接工作。 Win 7 电脑驱动的安装 可以右击我的电脑,选择属性,选择设备管理器,找到相应的没有识别到的硬 件,然后选择更新程序,然后选择相应的驱动即可,驱动的地址在安装的 IAR 软件 的目录下,如 C:\Program Files (x86)\IAR Systems\Embedded Workbench 5.4\8051\drivers\Texas Instruments\SRF04eb 安装如下图所示: - 109 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com - 110 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com - 111 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com - 112 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com 附件 3:USB 转串口驱动安装方法 模块板子已经集成 USB 转串口模块 PL2303,只要在电脑端安装 PL2303 驱动, 即可以实现板子与 PC 进行串口通信。安装的驱动非常简单,只要双击 PL2303_driver.exe,然后点确定,安装到底就可以。驱动文件如下图所示。 本驱动适合 Xp 系统和 win7 系统。 安装完驱动就可以在设备管理器,硬件里看到新增加的串口(Com port), 如下图所示 使用串口调试助手可以观察电脑的串口数据,串口调试助手的界面如下图所 示。 - 113 - 开发工作室 CC2530 ZigBee 开发 http://es-tech.taobao.com - 114 -

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。