ZigBee协议栈串口应用.ppt_第1页
ZigBee协议栈串口应用.ppt_第2页
ZigBee协议栈串口应用.ppt_第3页
ZigBee协议栈串口应用.ppt_第4页
ZigBee协议栈串口应用.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ZigBee串口应用,一、串口收发基础实验 二、ZigBee协议栈串口应用扩展实验,实验课题:串口数据收发基础实验 实验目的:利用串口收发数据 试验步骤:ZigBee协议栈中串口通信的配置使用一个结构体来实现,该结构体为hal_UARTCfg_t, 不必关心该结构体的具体定义形式,只需要对其功能有个了解,该结构体将串口初始化的参数集合在一起, 只需要初始化各个参数即可 最后使用HalUARTOpen()函数对串口进行初始化,该函数将halUARTCfg_t类型的结构体变量作为相关参数 回调函数:通过指针(函数地址)调用的函数。如果把函数的地址作为参数传递给另一个函数,当通过这个指针 调用它所指向的函数时,称为函数的回调。,一、串口收发基础实验,使用串口的基本步骤: 初始化串口,包括设置波特率、中断等; 向发送缓冲区发送数据或者从接收缓冲区读取数据。,串口工作原理剖析,在ZigBee协议栈中,halUARTCfg_t结构体是如何定义的; 串口是如何初始化的; 发送给串口的数据时如何接受的; 串口是如何向PC机发送数据的。 这些问题涉及如下三个函数,ZigBee协议栈中提供的与串口操作有关的三个函数为(可在zmain.c和hal_uart.c中查看相关函数) uint8 HalUARTOpen(uint8 halUARTCfg_t *config); uint16 HalUARTRead(uint8 port,uint8 *buf,uint16 len); Uint16 HalUARTWrite(uint8 prot,uint *buf,uint16 len);,Coordinator.c,#include “OSAL.h“ #include “AF.h“ #include “ZDApp.h“ #include “ZDObject.h“ #include “ZDProfile.h“ #include #include “Coordinator.h“ #include “DebugTrace.h“ #if !defined( WIN32 ) #include “OnBoard.h“ #endif #include “hal_lcd.h“ #include “hal_led.h“ #include “hal_key.h“ #include “hal_uart.h“ /包含头文件,const cId_t GenericApp_ClusterListGENERICAPP_MAX_CLUSTERS = GENERICAPP_CLUSTERID ; const SimpleDescriptionFormat_t GenericApp_SimpleDesc = GENERICAPP_ENDPOINT, GENERICAPP_PROFID, GENERICAPP_DEVICEID, GENERICAPP_DEVICE_VERSION, GENERICAPP_FLAGS, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, 0, (cId_t *)NULL ; endPointDesc_t GenericApp_epDesc; byte GenericApp_TaskID; byte GenericApp_TransID;,/* typedef struct byte endPoint; byte *task_id; SimpleDescriptionFormat_t *simpleDesc; afNetworkLatencyReq_t latencyReq; endPointDesc_t; */ void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pckt ); void GenericApp_SendTheMessage( void ); /UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events ); static void rxCB(uint8 port,uint8 event);,/任务初始化函数 void GenericApp_Init( byte task_id ) halUARTCfg_t uartConfig; GenericApp_TaskID = task_id; GenericApp_TransID = 0; GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT; GenericApp_epDesc.task_id = /串口初始化 ,/事件处理函数 UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events ) return 0; /本实验没有进行事件处理 ,static void rxCB(uint8 port,uint8 event) unsigned char uartbuf128=“ “; HalUARTRead(0,uartbuf,16); /调用函数,从串口读取数据并将其放在uartbuf数组中 if(osal_memcmp(uartbuf,““,16) /使用osal_memcmp()判断接收到的数据是否是“”,返回TRUE,执行HalUARTWrite()函数 HalUARTWrite(0,uartbuf,16); /调用函数将接收到的字符输出到串口 /ZigBee协议栈使用条件编译,在GenericApp-Coordinator工程上右键单击,options/C/C+ Compiler在Defined symbols:下拉框中添加HAL_UART=TRUE,点击OK即可。,二、ZigBee协议栈串口应用扩展实验,实验课题:ZigBee协议栈串口应用扩展实验 实验目的:利用串口收发数据 实验原理:协调器建立ZigBee无线网络,终端节点自动加入该网络中,然后终端节点周期性地向协调器发送字符串“EndDevice” ,协调器收到该字符串后,通过串口将其输出到用户PC机。,Coordinator.c,#include “OSAL.h“ #include “AF.h“ #include “ZDApp.h“ #include “ZDObject.h“ #include “ZDProfile.h“ #include #include “Coordinator.h“ #include “DebugTrace.h“ #if !defined( WIN32 ) #include “OnBoard.h“ #endif #include “hal_lcd.h“ #include “hal_led.h“ #include “hal_key.h“ #include “hal_uart.h“,const cId_t GenericApp_ClusterListGENERICAPP_MAX_CLUSTERS = GENERICAPP_CLUSTERID ; const SimpleDescriptionFormat_t GenericApp_SimpleDesc = GENERICAPP_ENDPOINT, GENERICAPP_PROFID, GENERICAPP_DEVICEID, GENERICAPP_DEVICE_VERSION, GENERICAPP_FLAGS, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, 0, (cId_t *)NULL ; endPointDesc_t GenericApp_epDesc; byte GenericApp_TaskID; byte GenericApp_TransID; /unsigned char uartbuf128; /将这一行注释掉,/* typedef struct byte endPoint; byte *task_id; SimpleDescriptionFormat_t *simpleDesc; afNetworkLatencyReq_t latencyReq; endPointDesc_t; */ void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pckt ); void GenericApp_SendTheMessage( void ); /static void rxCB(uint8 port,uint8 event); /将这一行注释掉,/任务初始化函数 void GenericApp_Init( byte task_id ) halUARTCfg_t uartConfig; GenericApp_TaskID = task_id; GenericApp_TransID = 0; GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT; GenericApp_epDesc.task_id = /串口初始化 ,/事件处理函数 UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events ) afIncomingMSGPacket_t *MSGpkt; if( events ,osal_msg_deallocate( (uint8 *)MSGpkt ); MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID); return (events SYS_EVENT_MSG ); return 0; /当协调器收到终端节点发送来的数据后,首先使用osal_msg_receive()函数,从消息队列接收到消息,然后调用GenericApp_ /MessageMSGCB()函数中将接收到的数据通过串口发送给PC机,void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) unsigned char buffer10 = “ “; switch( pkt-clusterId ) case GENERICAPP_CLUSTERID: osal_memcpy(buffer,pkt-cmd.Data,10 ); HalUARTWrite(0,buffer,10); break; /使用osal_memcpy()函数,将接收到的数据拷贝到buffer数组中,然后就可以将该数据通过串口发送给PC机,EndDevice.c Osal_start_timerEx()函数原型如下: 调用 uint8 osal_start_timerEx(uint8 taskID,uint16 event_id,uint16 timeout_value) 周期性发送(任务,事件,时间),#include “OSAL.h“ #include “AF.h“ #include “ZDApp.h“ #include “ZDObject.h“ #include “ZDProfile.h“ #include #include “Coordinator.h“/使用该头文件的宏定义 #include “DebugTrace.h“ #if !defined( WIN32 ) #include “OnBoard.h“ #endif,#include “hal_lcd.h“ #include “hal_led.h“ #include “hal_key.h“ #include “hal_uart.h“ #define SEND_DATA_EVENT 0x01 const cId_t GenericApp_ClusterListGENERICAPP_MAX_CLUSTERS = GENERICAPP_CLUSTERID ;,/简单设备描述符 结构体 常量 const SimpleDescriptionFormat_t GenericApp_SimpleDesc = GENERICAPP_ENDPOINT, GENERICAPP_PROFID, GENERICAPP_DEVICEID, GENERICAPP_DEVICE_VERSION, GENERICAPP_FLAGS, 0, (cId_t *)NULL, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList ; /初始化端口描述符 endPointDesc_t GenericApp_epDesc;/简单节点描述符 byte GenericApp_TaskID;/任务优先级 byte GenericApp_TransID;/数据发送序列号 devStates_t GenericApp_NwkState;/节点状态保存变量 枚举型 记录设备状态,/定义结构体 /*typedef struct byte endPoint; byte *task_id; SimpleDescriptionFormat_t *simpleDesc; afNetworkLatencyReq_t latencyReq; endPointDesc_t;*/ /声明函数 void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pckt ); void GenericApp_SendTheMessage( void ); int8 readTemp(void);,/定义任务初始化函数 void GenericApp_Init( byte task_id ) GenericApp_TaskID = task_id; GenericApp_TransID = 0;/累加数据发送序列号,可用于计算丢包率 GenericApp_NwkState = DEV_INIT;/设备状态初始化为DEV_INIT表示该节点没有连接到ZigBee网络 GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT; GenericApp_epDesc.task_id = /节点描述符注册 ,/以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论