从Zigbee协议栈底层添加自己的按键配置

合集下载

从Zigbee协议栈底层添加自己的按键配置精编版

从Zigbee协议栈底层添加自己的按键配置精编版

本实验是基于ZStack-CC2530-2.5.1a版本的协议栈来进行实验的,整个实验需要改动hal_board_cfg.h、hal_board_cfg.h、hal_key.c、hal_key.h和自己定义的Coordinator.c这5个文件。

注意:添加自己的按键时尽量不要修改协议栈里面的按键程序,自己另行添加即可。

1、hal_key.h在/* Switches (keys) */下面添加自己的按键定义#define HAL_KEY_SW_8 0x80图1:----------------------------------------------------------------------------------------2、hal_board_cfg.h在/* S6 */#define PUSH1_BV BV(1)#define PUSH1_SBIT P0_1#if defined (HAL_BOARD_CC2530EB_REV17)#define PUSH1_POLARITY ACTIVE_LOW#elif defined (HAL_BOARD_CC2530EB_REV13)#define PUSH1_POLARITY ACTIVE_LOW#else#error Unknown Board Indentifier#endif下面模仿/* S6 */下的程序定义自己的按键值:/* S8 */#define PUSH8_BV BV(4)//修改#define PUSH8_SBIT P0_4//修改#if defined (HAL_BOARD_CC2530EB_REV17)#define PUSH8_POLARITY ACTIVE_HIGH#elif defined (HAL_BOARD_CC2530EB_REV13)#define PUSH8_POLARITY ACTIVE_LOW#else#error Unknown Board Indentifier#endif图2:------------------------------------------------------------------------------------------------------------- 在/* ----------- Push Buttons ---------- */#define HAL_PUSH_BUTTON1() (PUSH1_POLARITY (PUSH1_SBIT))#define HAL_PUSH_BUTTON2() (PUSH2_POLARITY (PUSH2_SBIT))#define HAL_PUSH_BUTTON3() (0)#define HAL_PUSH_BUTTON4() (0)#define HAL_PUSH_BUTTON5() (0)#define HAL_PUSH_BUTTON6() (0)下定义自己的按键函数#define HAL_PUSH_BUTTON8() (PUSH8_POLARITY (PUSH8_SBIT))图3:---------------------------------------------------------------------------------------------------------------- hal_key.c在/* SW_6 is at P0.1 */#define HAL_KEY_SW_6_PORT P0#define HAL_KEY_SW_6_BIT BV(1)#define HAL_KEY_SW_6_SEL P0SEL#define HAL_KEY_SW_6_DIR P0DIR/* edge interrupt */#define HAL_KEY_SW_6_EDGEBIT BV(0)#define HAL_KEY_SW_6_EDGE HAL_KEY_FALLING_EDGE/* SW_6 interrupts */#define HAL_KEY_SW_6_IEN IEN1 /* CPU interrupt mask register */#define HAL_KEY_SW_6_IENBIT BV(5) /* Mask bit for all of Port_0 */#define HAL_KEY_SW_6_ICTL P0IEN /* Port Interrupt Control register */#define HAL_KEY_SW_6_ICTLBIT BV(1) /* P0IEN - P0.1 enable/disable bit */#define HAL_KEY_SW_6_PXIFG P0IFG /* Interrupt flag at source */下模仿/* SW_6 is at P0.1 */建立自己的按键函数#define HAL_KEY_SW_8_PORT P0#define HAL_KEY_SW_8_BIT BV(4) //修改#define HAL_KEY_SW_8_SEL P0SEL#define HAL_KEY_SW_8_DIR P0DIR/* edge interrupt */#define HAL_KEY_SW_8_EDGEBIT BV(0)#define HAL_KEY_SW_8_EDGE HAL_KEY_FALLING_EDGE/* SW_8 interrupts */#define HAL_KEY_SW_8_IEN IEN1 /* CPU interrupt mask register */#define HAL_KEY_SW_8_IENBIT BV(5) /* Mask bit for all of Port_0 */#define HAL_KEY_SW_8_ICTL P0IEN /* Port Interrupt Control register */#define HAL_KEY_SW_8_ICTLBIT BV(4) //修改#define HAL_KEY_SW_8_PXIFG P0IFG /* Interrupt flag at source */图4:-------------------------------------------------------------------------------------------------------------注意:将void HalKeyPoll (void)中的// if ((HAL_KEY_JOY_MOVE_PORT & HAL_KEY_JOY_MOVE_BIT)) /* Key is active HIGH */// {// keys = halGetJoyKeyInput();// }/* If interrupts are not enabled, previous key status and current key status* are compared to find out if a key has changed status.*/// if (!Hal_KeyIntEnable)// {// if (keys == halKeySavedKeys)// {/* Exit - since no keys have changed */// return;// }/* Store the current keys for comparation next time */// halKeySavedKeys = keys;// }// else// {/* Key interrupt handled here */// }图5:全部注释掉,因为它会对我们设定的按键产生干扰,具体情况我也不知道... 然后再在内模仿:if (HAL_PUSH_BUTTON1()){keys |= HAL_KEY_SW_6;}添加:if (HAL_PUSH_BUTTON8()){keys |= HAL_KEY_SW_8;}图6:------------------------------------------------------------------------------------------------------------- OnBard.c将void InitBoard( uint8 level ){if ( level == OB_COLD ){// IAR does not zero-out this byte below the XSTACK.*(uint8 *)0x0 = 0;// Interrupts offosal_int_disable( INTS_ALL );// Check for Brown-Out resetChkReset();}else // !OB_COLD{/* Initialize Key stuff */HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback); //修改此处}}改为:HalKeyConfig(HAL_KEY_INTERRUPT_ENABLE, OnBoard_KeyCallback);记得在任务初始化函数中加入RegisterForKeys( GenericApp_TaskID ); //注册按键事件图7:最后再在Coordinator.c中的uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )添加事件及其处理函数case KEY_CHANGE:GenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );再在static void GenericApp_HandleKeys( uint8 shift, uint8 keys ){zAddrType_t dstAddr;if ( keys & HAL_KEY_SW_1 ){}if ( keys & HAL_KEY_SW_2 ){}if ( keys & HAL_KEY_SW_3 ){}if ( keys & HAL_KEY_SW_4 ){}if ( keys & HAL_KEY_SW_8 ) //添加自己的按键及其处理函数{HalLedSet(HAL_LED_1, HAL_LED_MODE_FLASH);}}。

Zigbee操作说明

Zigbee操作说明

一.Android软件安装配置,导入项目安装pad驱动测试对应源码是否成功使用无线路由器组建局域网,并将摄像头配置进来ZIGBEE用万用表测出2,3,5口:具体使用:将万用表的开关拨到箭头的地方,然后测线路是否通,如果有响声,即是联通的。

串口线和ZIGBEE连接时对应的点:2口:tx; 3口:rx 5口:GND继电器Vin1连接12伏电源GND2连接地D+5连接智能终端的RS485的左边D-6连接智能终端的RS485的右边使用智能终端的使用:1) 连接电源:PWR:左黑右红,红为5伏电源,黑为底线2)串口线连接PC,进行配置查询: AT+AA_BASE_ADDRESS=1返回结果,0,硬件地址设置地址: AT+AA_BASE_ADDRESS=0,A1108 注意:1108为自己设定的硬件地址(0——F)查询:AT+R_AA_Z_NODE返回结果AT+AA_Z_NODE=C 注:C为协调器设置信道:AT+AA_Z_CHANNEL=11 注:11为自行设定的信道(值为11-26)设组网地址:AT+AA_Z_PAN_ID=1105 注:1105为自行设定的组网地址自此,智能终端设置完成设置ZIGBEE连接电源连接串口线,设置235,黑的是5,黄的是2,绿的是3通过串口线连接PC,进行设置:查询硬件地址:AT+AZ_BASE_ADDRESS=1返回结果0,Z硬件地址设置硬件地址:AT+AZ_BASE_ADDRESS=0,Z1109 注:1109为自行设定的硬件地址(这个地址必须区别于智能终端的硬件地址)设置工作模式:AT+AZ_BASE_WORKMODE=0,2设置为路由器:AT+AZ_Z_NODE=R设置信道:AT+AZ_Z_CHANNEL=11 注:11为上述设置的信道AT+AZ_Z_PAN_ID=1105 注:1105为上述设置的组网地址设置工作模式:AT+AZ_BASE_WORKMODE=0,2将门磁连上:门磁的两头分别连接ZIGBEE的GND和IN两口关于继电器1)继电器就是一个开关2)一个继电器有四对:第一队:AG,A1,A2,;第二队:10,11,12;第三队:13,14,15;第四对:16,17,18。

Zigbee设置

Zigbee设置

ZigBee模块设置1.ZigBee模块F8913D插入配置基板F8913-EVB(注:基板排针接口与模块插针序号正确对应,不可反插。

否则,模块可能烧坏。

)2.用USB连接线,连接配置基板与电脑。

配置基板通过USB口供电。

电脑端打开ZigBeeConfig.exe3.查看端口号,,,(如何查看端口号,详见备注2)4.参数设置,配置步骤如图。

串口波特率:9600校验:无校验停止位:1个停止位是否启用硬件控制流:不勾选调试等级:0AT命令是否回显:不勾选网络号:自行设置(同一网络内模块和网关的网络号必须相同)节点类型:路由 分节点网络地址:自行设置(同一网络内的设备不能有相同网络地址) 透传地址:0 重新自52A8加入网络:勾选 物理信道:26 应用模式: 透传模块设置关键参数说明:网络号:网络号是ZigBee 判断是否在同一个网络的标志,只有网络号相同的设备才会互相组网,互相通信。

节点类型:同一网络,有且仅有一个协调器。

路由具备转发其他模块数据功能,终端不具有该功能。

1 92 34 5 67 8分节点网络地址:即ZigBee 设备本机在网络内的地址标志,协调器不能修改,默认固定为0,路由或终端可设置为非0 的其它数值,一个ZigBee 设备设置完网络地址后这个地址在本网络内就是唯一的,不可再重复加入这个地址的设备。

透传地址:即本ZigBee 设备串口收到的数据要发送的目标ZigBee 设备的分节点网络地址,在透传模式下,只要指定了透传地址,那么本设备发出的数据都会发送给那个分节点网络地址的zibgee 设备。

例如:ZigBee1(分节点网络地址为10)---ZigBee2(分节点网络地址为13)ZigBee1 要把串口收到的数据发给ZigBee2,ZigBee1 的透传地址就要指定为13,ZigBee2 把串口收到的数据发给ZigBee1,那ZigBee2 的透传地址就要设置为10。

物理信道:要互相通信的设备必须设置为一样的信道,推荐使用15,20,25,26 信道,可减少WIFI的干扰。

ZigBee实验——按键控制开关

ZigBee实验——按键控制开关

此实验的功能是通过实验班上的按键控制 LED 的亮灭。本实验用于熟悉 CC2430的 I/O 端口相 关的寄存器,熟悉寄存器的赋值操作。 无线龙 C51RF-3-PK 实验板的 LED1与 P1.0相连,LED2与 P1.1口相连。按键 S5与 P0.5相连, S6同 P0.6相连。我以前对 PIC 的单片机比较熟悉,CC2430的一些操作同 PIC 相比有些不同, 两者对比下学习,效率比较高。先把实验板附带的代码贴上来。 //CD WXL 电池板开关控制小灯 #include <ioCC2430.h>
#define GLED P1_1
/* 根据原理图,LD2(红)为 P1_1口控制;主扩展板为 GLED;从扩展板为 D3(黄) */
#define K1 P0_4
//K1为扩展板的 CANCEL 键,在 P0_4口
#define K2 P0_5
//K2为扩展板的 OK 键,在 P0_5口
//函数声明
#define uint unsigned int
#define uchar unsigned char
#define ON 0
//定义 LED 状态,ON 为亮,OFF 为灭
#define OFF 1
//定义控制灯的端口
#define RLED P1_0
/* 根据原理图,LD1(黄)为 P1_0口控制;主扩展板为 RLED;从扩展板为 D2(红) */
//延时函数
*****************************/
void Delay(uint n)
{ uint tt; for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); } /***************************************** //按键初始化函数,原理图中按键连在 P0_4和 P0_5,所以进行了修改 void InitKey(void) { P1SEL &= ~0X0C;//作用是将 P12 P13设为普通 I/O 口,但默认就是,不知道为什么还要加此语句 P1DIR &= ~0X0C; //按键在 P12 P13 P1INP |= 0x0c; //上、下拉 } *****************************************/ void InitKey(void) { //P0SEL &= ~0X30; P0DIR &= ~0x30; //将连接按键的 P0_4、P0_5口设置为输入 P0INP |= 0x30; //将 P0_4、P0_5口的输入状态设置为三态,以读取按键的状态 } /**************************** //初始化程序 *****************************/ void Initial(void)

zigbee模块设置使用说明

zigbee模块设置使用说明

Zigbee简介:Zigbee网络通常由三种节点构成:z协调器(Coordinator):用来创建一个Zigbee网络,并为最初加入网络的节点分配地址,每个Zigbee网络需要且只需要一个Coordinator.z路由器(Router):也称为Zigbee全功能节点,可以转发数据,起到路由的作用,也可以收发数据,当成一个数据节点,还能保持网络,为后加入的节点分配地址.z终端节点(End Device):通常定义为电池供电的低功耗设备,通常只周期性发送数据。

或者通过休眠按键控制节点的休眠或工作。

注意:三种Zigbee节点的P ANID在相同的情况下,可以组网并且互相通讯(上电即组网,不需要人为干预)。

这样可以通过P ANID区分zigbee网络,在同一个区域内,可以同时并存多个zigbee网络,互相不会干扰。

Panid设置见下。

管脚定义:z P1.5:休眠键,输入脚,p1.5拉高时,休眠有效。

模块如果是Cornidator、Router 时此脚无效,只有模块是Enddevice时,此脚才有效,如果不需要休眠功能,则此脚与GND连接。

z p1.7:Set键,输入脚,p1.7拉高时候,设置功能有效,平时模块处于数据收发状态时,此引脚应为低电平,具体设置功能见下节z p2.0 网络连接状态灯,输出脚,模块如果是Router或Enddevice时,此按键表明当前模块是否入网,高电平表明入网,低电平表明没有入网。

z p0.2:Rx,与外置MCU的Tx连接z P0.3:Tx,与外置MCU的Rx连接z GND:电源地z VCC:电源3.3V用户在使用时候,可以根据自己需要选择引脚。

最简单的情况是只使用Rx、Tx.、GND、VCC四个脚,但需要将P1.5(休眠键)、P1.7(设置键)接地。

P2.0(网络连接状态)悬空。

当P1.7为高,通过串口对模块进行设置,数据格式如下(以下数据均为16进制):说明:模块处于设置状态时,波特率固定为38400.即P1.7为高时,模块波特率为38400;P1.7为低时,波特率为设置的波特率,波特率设置见下面命令。

zigbee协议栈的使用流程

zigbee协议栈的使用流程

Zigbee协议栈的使用流程1. 什么是Zigbee协议栈Zigbee协议栈是一种基于IEEE 802.15.4标准的低功耗、自组织的无线通信协议。

它被广泛应用于物联网设备、智能家居、工业自动化等领域。

Zigbee协议栈提供了一套完整的网络协议和通信机制,方便开发者在无线传感器网络中进行通信和数据交换。

2. Zigbee协议栈的使用流程Zigbee协议栈的使用流程可以分为以下几个步骤:步骤一:选择Zigbee协议栈在开始使用Zigbee协议栈之前,首先需要选择合适的Zigbee协议栈。

目前市面上有许多不同的Zigbee协议栈提供商,可以根据自己的需求选择适合的协议栈。

步骤二:准备开发环境在开始使用Zigbee协议栈之前,需要准备好相应的开发环境。

这包括硬件设备、开发工具以及相应的驱动程序。

一般来说,开发者需要购买Zigbee芯片和开发板,并安装相应的开发工具和驱动程序。

步骤三:编写应用程序一旦准备好开发环境,就可以开始编写Zigbee应用程序了。

首先,需要了解Zigbee协议栈的API和接口,理解Zigbee网络的特点和通信机制。

然后,根据具体需求,设计和实现相应的功能模块,例如网络配置、数据传输和安全性等。

步骤四:测试和调试编写完应用程序后,需要进行测试和调试,以确保程序的正确性和稳定性。

可以通过模拟器或者实际的Zigbee设备进行测试。

测试过程中需要注意检查网络连接、数据传输和异常情况处理等方面的功能。

步骤五:部署和运行在完成测试和调试后,就可以将应用程序部署到真实的Zigbee设备上了。

根据具体的部署场景,可能需要进行设备安装、网络配置和数据监控等工作。

一旦部署完成,就可以正式运行Zigbee协议栈,并进行数据交换和通信了。

3. 使用Zigbee协议栈的注意事项在使用Zigbee协议栈的过程中,需要注意以下几个方面:•理解Zigbee网络的拓扑结构和层次关系,合理设计网络拓扑和路由规划。

•注意设备之间的信号强度和信号干扰的问题,确保通信质量和稳定性。

zigbee 自动绑定的实现

zigbee 自动绑定的实现近来事情比较多,忙着答辩,忙着去应酬,尤其是同学之间的感情需要喝酒来加深,以至于没什么时间看书写码。

所以就没什么空看书写码了。

今天把绑定的实验重新做了一遍,但是觉得通过按键来绑定是手动实现的,过程很麻烦。

所以就琢磨着用自动的方式实现。

下面就讲讲实现自动绑定的过程了。

BTW,把我在这次实验的过程中失败经验也介绍一下,希望大家一下。

在开始的过程中,我在初始化中添加了自己的事件MY_EVENT,然后在事件中读取设备的类型,如果是协调器就允许绑定,绑定时间无限制,如果是终端就发送绑定请求。

但是始终失败了,而且设备在不断的重启。

甚是烦恼,不知道什么原因。

希望遇到类似问题的童鞋们可以和我讲解一下。

ok,如正题吧。

估计大家已经不赖烦了要喷我了。

1、要保证设备的自动启动。

在原来的程序中,设备的类型是依据不同按键进行设置的,也就是说按下不同的按键,其将该节点按照特定的设备进行启动。

首先屏蔽掉在初始化程序中的按键部分。

因为这部分关闭了自动启动模式。

/*#if (defined HAL_KEY) && (HAL_KEY == TRUE)if ( HalKeyRead () == HAL_KEY_SW_1){// If SW1 is pressed and held while powerup, force auto-start and nv-restore off and resetstartOptions = 0;zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );zb_SystemReset();}#endif // HAL_KEY*/初始化函数的结束部分添加如下代码:startOptions = ZCD_STARTOPT_AUTO_START;zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions ); ZDOInitDevice(0);设备自动启动以后,会向任务发送一个设备状态改变的消息,在任务处理函数中对应如下的部分:case ZDO_STATE_CHANGE:// If the device has started up, notify the applicationif (pMsg->status == DEV_END_DEVICE ||pMsg->status == DEV_ROUTER ||pMsg->status == DEV_ZB_COORD ){SAPI_StartConfirm( ZB_SUCCESS );}break;当设备进行确认状态发生变化的时候,这个时候我们开始来允许设备进行绑定,或是发送绑定请求。

12Zigbee实验报告《协议栈按键控制led》

实验步骤:
添加自己的按键驱动步骤:
第一步:修改hal ey.c
1、修改SW6所在10口,对应自己开发板上的按键
2、修改触发方式
3、修改对应的中断一些相关标志位
4、不需要用到TI的摇杆J-STICK,所以把代码注释掉·
第二步:修改halboardcfg.h文件
5、修改SW-6所在10口
第三步:修改OnBoard.C文件。
实验内容与步骤
按键驱动,主要有两种方法。一种是普通的轮询,不断查询是否按下按键。另一种是通过中断来产生事件中断与轮询的区别按键
中断和轮询的主要区别是轮询需要CPU定期的检查按键状态,当检测到按键按下则发出HAL KEY EVENT消息到HAL层来执行处理,中断则是当有按键按下立刻向HAL KEY EVENT发出消息,不需要CPU的检查。轮询的实时性比中断要差点,推荐用中断方式。
在ZMain.C目录树下:6、是否使能中断
第四部: SampleApp ProcessEvent中
7、添加case KEY CHANGE,修改按键服务程序
第二页
实验内容与步骤
第三页
实验内容与步骤
实验总结
教师评定
签字: 年 月 日
2019——2020学年第二学期
专业
班级
学号
姓名
日期
2019——2020学年第二学期
专业
班级
学号
姓名
日期
第一页
实验题目
实验目的
本实验是基于ZStack-CC2530-2.5.1a版本的协议栈来进行实验的,整个实验需要改动. hal board-cfg.h. hal board-cfg.h, halkey.c. halkey.h和自己定义的Coordinator.c这5

zigbee模块使用手册

2.4G无线模块WLT2408NZ产品数据手册编号:DSWLT01003 更新日期:2012/04/26 版本:V1.03产品概述WLT2408NZ模块是广州晓网电子出品的WLT系列ZigBee数据传输模块,具备最大8dBm 输出功率,视距传输距离可达500米(@5dbi天线),工作频段2.380GHz~2.500Ghz,除标准ZigBee的16个通道外,还有9个扩展频段,可以有效避开WIFI、蓝牙等其他2.4G信号干扰。

广州晓网电子为WLT2408NZ用户提供mesh对等无线路由协议,无组网延时,采用时间空间权值均衡原则,路由时间短,通讯稳定可靠。

基本参数产品图片输出功率:供电电压:天线接口:数字接口:视距传输距离:功耗:休眠电流工作温度:存储温度:尺寸:-50~+8dBm1.9~3.3VSMA,U.FLUART,GPIO,AD500米@5dbi天线发送峰值电流46.3mA,接收时36.4mA <1uA-40℃至+85℃-40℃至+105℃16×23mm公司简介广州晓网电子科技有限公司是一家专门从事无线通讯方案设计、生产及服务的公司,公司拥有一流的设计团队,运用先进的工作方法,集合无线设计经验,公司拥有业界实用的各种模块,也为客户提供客制化服务。

订货信息WLT2408NZ-S SMA形式天线接头WLT2408NZ-U U.FL形式天线接头WLT2408NZ SDK 无线模块评估板套件,包含两个评估板,搭载的模块为WLT2408NZ-S。

数据手册版权声明本文档提供有关晓网电子产品的信息,并未授予任何知识产权的许可,并未以明示或暗示,或以禁止发言或其它方式授予任何知识产权许可,任何单位和个人未经版权所有者授权不得在任何形式的出版物中摘抄本手册内容。

产品命名规则图1-1 产品命名规则例如:WLT2408NZ-S表示晓网电子模块类的产品,频段为2.4GHz,理论输出功率为﹢8dBm(实际输出为﹢7.7dBm),超小封装,调制方式为ZigBee,外置SMA头的模块。

物联网ZigBee协议栈解析(加入网络)

软件清单
开发平台:AR EW8051 7.51A 驱动软件: CP210x驱动包 例 程:文件包GenericApp
GenericApp
• “..\Samples CC2530\GenericApp\SX2530
不可更改或者移出 任务
代码分析2
不可移出任 务
• OS信息处理。 • 异常任务处理。
查看函数
组装系统
修改通道
• 为了方便大家集中学习,我们已经在每 套学习系统中标明了相关的通道与PanId 请各位严格使用自己的通道与PanId
修改PanId
• 为了方便大家集中学习,我们已经在每 套学习系统中标明了相关的通道与PanId 请各位严格使用自己的通道与PanId
GenericApp 形成或者加入一个网络
本章利用简单应用程序 GenericApp 实现ZigBee相关功能例程的讲解 在指定通道和pan上形成一个网络 设备加入指定特定参数的网络
实验准备
硬件清单
C51FF-PS-F V21仿真器一块 SMBD-V1.2 底板一块 SMBD-V11-1底板两块 RF-2530无线模块三块 Mini USB线2条 AAA电池8只
ZigBee工程
子工程
配置文件
链接配置文件
全局配置文

• ZigBee的大部分配置都放在相关的配置
节点设备文的件中
配置文件
协调器的配置 文件
路由器配置 文件
配置通道
通道选择
通道全 局变量
f8wConfig.cfg中配置PAN ID
• 如果 PAN_ID = 0xFFFF 设备类型是协调者
• 设备将使用物理地址最后两个字节作为PAN_ID
zigbee工程子工程配置文件zigbee的大部分配置都放在相关的配置文件中链接配置文件全局配置文协调器的配置文件节点设备的配置文件路由器配置文件配置通道通道全局变量通道选择f8wconfigcfg中配置panid0xffff设备类型是协调者0xffff设备类型是路由器或者终端节点设备0xffff设备类型是协调者0xffff设备类型是路由器或者终端节点设备设备将只能加入该panid指定的网络genericapp形成或者加入一个网络本章利用简单应用程序genericapp实现zigbee相关功能例程的讲解在指定通道和pan上形成一个网络设备加入指定特定参数的网络实验准备硬件清单c51ffpsfv21仿真器一块smbdv12底板一块smbdv111底板两块rf2530无线模块三块miniusb线2条aaa电池8只软件清单开发平台
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本实验是基于ZStack-CC2530-2.5.1a版本的协议栈来进行实验的,整个实验需要改动hal_board_cfg.h、hal_board_cfg.h、hal_key.c、hal_key.h和自己定义的Coordinator.c这5个文件。

注意:添加自己的按键时尽量不要修改协议栈里面的按键程序,自己另行添加即可。

1、hal_key.h在/* Switches (keys) */下面添加自己的按键定义#define HAL_KEY_SW_8 0x80图1:----------------------------------------------------------------------------------------2、hal_board_cfg.h在/* S6 */#define PUSH1_BV BV(1)#define PUSH1_SBIT P0_1#if defined (HAL_BOARD_CC2530EB_REV17)#define PUSH1_POLARITY ACTIVE_LOW#elif defined (HAL_BOARD_CC2530EB_REV13)#define PUSH1_POLARITY ACTIVE_LOW#else#error Unknown Board Indentifier#endif下面模仿/* S6 */下的程序定义自己的按键值:/* S8 */#define PUSH8_BV BV(4)//修改#define PUSH8_SBIT P0_4//修改#if defined (HAL_BOARD_CC2530EB_REV17)#define PUSH8_POLARITY ACTIVE_HIGH#elif defined (HAL_BOARD_CC2530EB_REV13)#define PUSH8_POLARITY ACTIVE_LOW#else#error Unknown Board Indentifier#endif图2:------------------------------------------------------------------------------------------------------------- 在/* ----------- Push Buttons ---------- */#define HAL_PUSH_BUTTON1() (PUSH1_POLARITY (PUSH1_SBIT))#define HAL_PUSH_BUTTON2() (PUSH2_POLARITY (PUSH2_SBIT))#define HAL_PUSH_BUTTON3() (0)#define HAL_PUSH_BUTTON4() (0)#define HAL_PUSH_BUTTON5() (0)#define HAL_PUSH_BUTTON6() (0)下定义自己的按键函数#define HAL_PUSH_BUTTON8() (PUSH8_POLARITY (PUSH8_SBIT))图3:---------------------------------------------------------------------------------------------------------------- hal_key.c在/* SW_6 is at P0.1 */#define HAL_KEY_SW_6_PORT P0#define HAL_KEY_SW_6_BIT BV(1)#define HAL_KEY_SW_6_SEL P0SEL#define HAL_KEY_SW_6_DIR P0DIR/* edge interrupt */#define HAL_KEY_SW_6_EDGEBIT BV(0)#define HAL_KEY_SW_6_EDGE HAL_KEY_FALLING_EDGE/* SW_6 interrupts */#define HAL_KEY_SW_6_IEN IEN1 /* CPU interrupt mask register */#define HAL_KEY_SW_6_IENBIT BV(5) /* Mask bit for all of Port_0 */#define HAL_KEY_SW_6_ICTL P0IEN /* Port Interrupt Control register */#define HAL_KEY_SW_6_ICTLBIT BV(1) /* P0IEN - P0.1 enable/disable bit */#define HAL_KEY_SW_6_PXIFG P0IFG /* Interrupt flag at source */下模仿/* SW_6 is at P0.1 */建立自己的按键函数#define HAL_KEY_SW_8_PORT P0#define HAL_KEY_SW_8_BIT BV(4) //修改#define HAL_KEY_SW_8_SEL P0SEL#define HAL_KEY_SW_8_DIR P0DIR/* edge interrupt */#define HAL_KEY_SW_8_EDGEBIT BV(0)#define HAL_KEY_SW_8_EDGE HAL_KEY_FALLING_EDGE/* SW_8 interrupts */#define HAL_KEY_SW_8_IEN IEN1 /* CPU interrupt mask register */#define HAL_KEY_SW_8_IENBIT BV(5) /* Mask bit for all of Port_0 */#define HAL_KEY_SW_8_ICTL P0IEN /* Port Interrupt Control register */#define HAL_KEY_SW_8_ICTLBIT BV(4) //修改#define HAL_KEY_SW_8_PXIFG P0IFG /* Interrupt flag at source */图4:-------------------------------------------------------------------------------------------------------------注意:将void HalKeyPoll (void)中的// if ((HAL_KEY_JOY_MOVE_PORT & HAL_KEY_JOY_MOVE_BIT)) /* Key is active HIGH */// {// keys = halGetJoyKeyInput();// }/* If interrupts are not enabled, previous key status and current key status* are compared to find out if a key has changed status.*/// if (!Hal_KeyIntEnable)// {// if (keys == halKeySavedKeys)// {/* Exit - since no keys have changed */// return;// }/* Store the current keys for comparation next time */// halKeySavedKeys = keys;// }// else// {/* Key interrupt handled here */// }图5:全部注释掉,因为它会对我们设定的按键产生干扰,具体情况我也不知道... 然后再在内模仿:if (HAL_PUSH_BUTTON1()){keys |= HAL_KEY_SW_6;}添加:if (HAL_PUSH_BUTTON8()){keys |= HAL_KEY_SW_8;}图6:------------------------------------------------------------------------------------------------------------- OnBard.c将void InitBoard( uint8 level ){if ( level == OB_COLD ){// IAR does not zero-out this byte below the XSTACK.*(uint8 *)0x0 = 0;// Interrupts offosal_int_disable( INTS_ALL );// Check for Brown-Out resetChkReset();}else // !OB_COLD{/* Initialize Key stuff */HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback); //修改此处}}改为:HalKeyConfig(HAL_KEY_INTERRUPT_ENABLE, OnBoard_KeyCallback);记得在任务初始化函数中加入RegisterForKeys( GenericApp_TaskID ); //注册按键事件图7:最后再在Coordinator.c中的uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )添加事件及其处理函数case KEY_CHANGE:GenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );再在static void GenericApp_HandleKeys( uint8 shift, uint8 keys ){zAddrType_t dstAddr;if ( keys & HAL_KEY_SW_1 ){}if ( keys & HAL_KEY_SW_2 ){}if ( keys & HAL_KEY_SW_3 ){}if ( keys & HAL_KEY_SW_4 ){}if ( keys & HAL_KEY_SW_8 ) //添加自己的按键及其处理函数{HalLedSet(HAL_LED_1, HAL_LED_MODE_FLASH);}}。

相关文档
最新文档