Zigbee应用笔记(2)

2019-05-24 17:40

else if ( pkt->LinkQuality < SS_MED ) ssLevel = 1;

else if ( pkt->LinkQuality < SS_HIGH ) ssLevel = 2; else

ssLevel = 3;

writeLCDIcon( ICON_SIGNAL_STRENGTH, ssLevel );

counter = pkt->cmd.Data[0];

switch ( pkt->clusterId ) {

case CLUSTERID1: HandleProcessor1(); case CLUSTERID2: HandleProcessor2(); case CLUSTERID3: HandleProcessor3(); } }

3.3一般事件处理

一般事件定义在应用程序头文件中。所有一般事件处理流程是一致的,举一例说明

if ( events & NewSample_SEND_PERIODIC_MSG_EVT )

{接收到发送周期信息的事件,调用函数请求发送数据,函数返回请求结果 if ( AF_DataRequest( &NewSample_Periodic_DstAddr, &NewSample_epDesc, NewSample_PERIODIC_CLUSTERID, 1,

(uint8*)&NewSamplePeriodicCounter, &NewSample_TransID, AF_DISCV_ROUTE,

AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) {发送成功,在液晶屏上显示发送图标 // Successfully requested to be sent.

NewSample_FlashIcon( FLASH_TX_ICON ); } else

{发送不成功,则修改错误,重新发送。 // Error occurred in request to send. }

返回未处理的事件

return (events ^ NewSample_SEND_PERIODIC_MSG_EVT); }

每个Zigbee设备都回有数据发送请求,这里对发送请求函数作一说明 AF_DataRequest (

6

afAddrType_t *dstAddr, 目标地址,初始化时设置的, endPointDesc_t *srcEP, 请求发送数据的端口

uint16 cID, 数据簇ID

uint16 len, 要发送的数据长度 uint8 *buf, 要发送的数据地址

uint8 *transID, 发送ID号,每发送一次加1

uint8 options, 路由选项,0表示使用已有路由;1表示若无

路由则启用路由发现机制

uint8 radius 发送半径,即广播数据时单跳的节数

)

最后,系统处理完所有事件后,若没有新的事件,则进入节能模式。 三 串口通信

串口通信是最简单,故使用比较频繁的通信协议。串口通信流程包括打开串口、读取/写入数据、关闭串口。与串口有关的函数都在hal_uart.c文件中。

1打开串口

应用程序中使用到串口模块,则在初始化时应对串口进行设置,并打开串口。调用HalUARTOpen ( uint8 port, halUARTCfg_t *config )函数实现。

Port 使用的串口

Config 对串口的设置参数 typedef struct {

bool configured; uint8 baudRate; bool flowControl;

uint16 flowControlThreshold; uint8 idleTimeout; halUARTBufControl_t rx; halUARTBufControl_t tx;

bool intEnable; uint32 rxChRvdTime; halUARTCBack_t callBackFunc; }halUARTCfg_t;

Configured true/false true表示已经对串口进行了设置,初始化时设置

baudRate 波特率设置 有9种可供选择,实例中选择HAL_UART_BR_38400(HAL_UART_BR_1200 、HAL_UART_BR_2400、HAL_UART_BR_4800、HAL_UART_BR_9600、HAL_UART_BR_19200、HAL_UART_BR_31250、HAL_UART_BR_38400、HAL_UART_BR_57600、HAL_UART_BR_115200 )初始化时设置。

flowControl 流控制,当前不支持。初始化时设置。 flowControlThreshold 初始化时设置。

idleTimeout 空闲时间,超出这一时间表示完成一次数据的发送或接收,初始化时设置 intEnable 中断使能,true,初始化时设置。

rxChRvdTime 读完一个字节的系统时间,两次时间差大于idleTimeout(即超时)调用回调函数,初始化时设置。

7

callBackFunc 回调函数地址,当接收缓存满或发生超时都调用该函数,初始化时设置。 rx\\tx

typedef struct

{

uint16 bufferHead;

uint16 bufferTail; 两者相等时表示没有数据

uint16 maxBufSize; 收发缓存的大小,实例中为128

uint8 *pBuffer; 缓存地址,发送或接收的数据都存放在这里。

}halUARTBufControl_t;

HalUARTOpen()根据上述设置打开串口,帧格式默认的是:一位停止位,无奇偶校验,八位数据位,用户可以在HalUARTOpen()种修改。

2读写数据

打开串口之后就可以通过串口读写数据了,作为用户这一级,不需要了解其具体工作方式,只需将数据写入发送缓存,或从接收缓存读取数据。

2.1读取数据

uint16 HalUARTRead ( uint8 port, uint8 *pBuffer, uint16 length) port 串口

pBuffer 读取数据的存放地址 length 读取的数据长度

从port口的接受缓存读取length长度的数据存放到*pBuffer。

操作系统的主循环中,每一次循环都回有一次串口查询,如果发现接受缓存已经满了,或者超时,则调用回调函数,在回调函数中一般都要调用HalUARTRead()读取数据。

2.2发送数据

uint16 HalUARTWrite ( uint8 port, uint8 *pBuffer, uint16 length ) port 串口

pBuffer 发送数据的存放地址 length 发送的数据长度

将存放在pBuffer处长度为length的数据写入到port口的发送缓存中去。 2.3数据协议

定义的数据协议如下表所示,用户也可以自己定义 长度(字节) 内容 节点间传递的数据有两种类型,一是控制命令,二是普通数据。

普通数据是指计算机之间利用Zigbee通信模块进行的数据传输,节点只传送,不需要作任何处理,定义为0x0000,Zigbee模块从串口接收到这样的数据直接请求数据发送,接收到其他设备传递过来的数据则通过串口发送给计算机。

控制命令是指人通过计算机的操作界面向网络中的节点发出的控制命令,节点根据命令做相应的操作,具体的由用户定义。

3关闭串口

void HalUARTClose ( uint8 port ) port 要关闭的串口

1 数据类型 X 数据 8


Zigbee应用笔记(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:计划生育服务项目申请材料--安全十大目标、应急预案汇编

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: