ZigBee协议栈串口应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

回调函数:通过指针(函数地址)调用的函数。如果把函数 的地址作为参数传递给另一个函数,当通过这个指针 调用它所指向的函数时,称为函数的回调。
• 使用串口的基本步骤: • ①初始化串口,包括设置波特率、中断等; • ②向发送缓冲区发送数据或者从接收缓冲 区读取数据。
串口工作原理剖析
• 在ZigBee协议栈中,halUARTCfg_t结构体 是如何定义的; • 串口是如何初始化的; • 发送给串口的数据时如何接受的; • 串口是如何向PC机发送数据的。 这些问题涉及如下三个函数……
/* 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); //将这一行注释掉
//事件处理函数 UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events ) { return 0; //本实验没有进行事件处理 }
static void rxCB(uint8 port,uint8 event) { unsigned char uartbuf[128]=" "; HalUARTRead(0,uartbuf,16); //调用函数,从串口读取数据并将其 放在uartbuf数组中 if(osal_memcmp(uartbuf,"www.wlwmaker.com",16)) //使用 osal_memcmp()判断接收到的数据是否是“www.wlwmaker.com”,返回 TRUE,执行HalUARTWrite()函数 { HalUARTWrite(0,uartbuf,16); //调用函数将接收到的字符输出到 串口 } } //ZigBee协议栈使用条件编译,在GenericApp-Coordinator工程上右键 单击,options/C/C++ Compiler在Defined symbols:下拉框中添加 HAL_UART=TRUE,点击OK即可。
二、ZigBee协议栈串口应用扩展实验
实验课题:ZigBee协议栈串口应用扩展实验 实验目的:利用串口收发数据 实验原理:协调器建立ZigBee无线网络,终端节点自动加入该网络中,然 后终端节点周期性地向协调器发送字符串“EndDevice” ,协调器收到该字符串后,通过串口将其输出到用户PC机。
//任务初始化函数 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 = &GenericApp_TaskID; GenericApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc; GenericApp_epDesc.latencyReq = noLatencyReqs; afRegister( &GenericApp_epDesc );
/* 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 = &GenericApp_TaskID; GenericApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc; GenericApp_epDesc.latencyReq = noLatencyReqs; afRegister( &GenericApp_epDesc ); uartConfig.configured = TRUE; uartConfig.baudRate = HAL_UART_BR_115200; uartConfig.flowControl = FALSE; uartConfig.callBackFunc = rxCB; HalUARTOpen (0,&uartConfig ); //串口初始化 }
const cId_t GenericApp_ClusterList[GENERICAPP_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 uartbuf[128]; //将这一行注释掉
PC机
ZigBee网络
EndDevice
Coordinator
来自百度文库
Coordinator.c
• • • • • • • • • • • • • • • #include "OSAL.h" #include "AF.h" #include "ZDApp.h" #include "ZDObject.h" #include "ZDProfile.h" #include <String.h> #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"
• 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);
const cId_t GenericApp_ClusterList[GENERICAPP_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;
ZigBee串口应用
一、串口收发基础实验 二、ZigBee协议栈串口应用扩展实验
一、串口收发基础实验
实验课题:串口数据收发基础实验 实验目的:利用串口收发数据 试验步骤:ZigBee协议栈中串口通信的配置使用一个结构 体来实现,该结构体为hal_UARTCfg_t, 不必关心该结构体的具体定义形式,只需要对其功能有个 了解,该结构体将串口初始化的参数集合在一起, 只需要初始化各个参数即可 最后使用HalUARTOpen()函数对串口进行初始化,该函数将 halUARTCfg_t类型的结构体变量作为相关参数
}
//事件处理函数 UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events ) { afIncomingMSGPacket_t *MSGpkt; if( events & SYS_EVENT_MSG ) { MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(GenericApp_TaskID); while( MSGpkt) { switch( MSGpkt->hdr.event ) { case AF_INCOMING_MSG_CMD: GenericApp_MessageMSGCB( MSGpkt ); //完成对接收数据的处理 break; default: break; }
( )
Coordinator.c
• • • • • • • • • • • • • • • • #include "OSAL.h" #include "AF.h" #include "ZDApp.h" #include "ZDObject.h" #include "ZDProfile.h" #include <String.h> #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" //包含头文件
uartConfig.configured = TRUE; uartConfig.baudRate = HAL_UART_BR_115200; uartConfig.flowControl = FALSE; uartConfig.callBackFunc = NULL; //置空,即无需回调函数 HalUARTOpen (0,&uartConfig ); //串口初始化
相关文档
最新文档