ZigBee协议栈串口应用

合集下载

Zigbee协调器串口通信协议分析-KC07060502-a01解析

Zigbee协调器串口通信协议分析-KC07060502-a01解析

2
内容页
任务四
CONTENTS PAGE
2、Zigbee节点串口通信协议
Zigbee设备 我校自主研发的Zigbee节点采用请求—响应模型进行交互 请求命令为16个字节
协议分析
响应返回为32个字节
3
内容页
任务四
CONTENTS PAGE
2、Zigbee节点串口通信协议
协议分析
Zigbee通信协议详解 网络地址、数据部分:低前后高 串口数据:二进制,按字节接收其范围应00-FFH,编程时建议采用Byte(字 节)变量进行存储;string、char数据类型默认采用ASCII码,值范围为00-3FH, 若采用string、char数据类型来存储串口数值,超出3F的部分会出现数据丢失
8
内容页
任务四
CONTENTS PAGE
3、C#串口数据处理编程
协议分析
串口数据处理步骤: 3)判断读取数据是否完整; 返回数据共32字节,串口按位读取、按字节缓存,读取串口数据时返回的 32字节有可能分多次缓存,所以开发时应采用一全局变量(List<byte>)存储串口 缓存数据,判断全局变量中的数据是否完整。 完整性判断:长度32字节,第一个字节为0x26(&),最后一个字节为0x2A (*)
无锡职业技术学院内部资料
Zigbee协调器串口通信协议分析
1
内容页
任务四
CONTENTS PAGE
协议分析
1、系统结构
Zigbee节点采用无锡职业技术学院自行开发的WSN节点。 PC机连接ZigBee网络协调器,根据协调器提供的通信规程,分析出各种命 令的十六进制字节请求;并获取响应十六进制数据,并分解出有效信息以完 善系统功能。

zigbee串口实验

zigbee串口实验
#include <string.h>
/*宏定义*****************************************/
#define uint unsigned int
#define uchar unsigned char
#define rled P1_0
#define gled P1_1
}
else
{
rxtxflag=3;//进入发送状态
}
temp=0;
}
}
if(rxtxflag==3)//发送状态
{
gled=0;
rled=1;//发送状态指示
U0CSR &=~0X40;//USART0接收禁止
uarttx_send_string(recdata,datanumber);//发送字符串
EA=1;//开总中断
while(1)
{
if(rxtxflag==1)//接收状态
{
gled=!gled;//接收指示
if(temp!=0)
{
if((temp!='#')&&(datanumber<20))//'#'被定义为结束字符,最多能接收20个字符
{
recdata[datanumber++]=temp;
/*主函数*******************************/
void main(void)
{
P1DIR=0X03;//初始化LED
rled=0;
gled=0;
inituart0();//初始化串口
U0CSR |=0X40;//USART0接收使能

ZigBee协议栈串口应用

ZigBee协议栈串口应用

• 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);
PC机
Hale Waihona Puke 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技术规范与协议栈分析

ZIGBEE技术规范与协议栈分析

ZIGBEE技术规范与协议栈分析篇一:ZigBee知识无线龙1.协议栈工作流程和无线收发控制 LED 实验内容:1. ZigBee 协议栈简介2. 如何使用 ZigBee 协议栈3. ZigBee 协议栈的安装、编译与下载4. 协议栈无线收发控制 LED5. 协议栈工作流程实现现象:协调器、终端上电,组网成功后 D1 灯闪烁 1. ZigBee 协议栈简介什么是 ZigBee 协议栈呢?它和 ZigBee 协议有什么关系呢?协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。

协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议的,进而实现无线数据收发。

图 1 展示了 ZigBee 无线网络协议层的架构图。

ZigBee 的协议分为两部分,IEEE 802.15.4 定义了 PHY(物理层)和 MAC(介质访问层)技术规范;ZigBee联盟定义了NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。

ZigBee协议栈就是将各个层定义的协议都集合在一直,以函数的形式实现,并给用户提供 API(应用层),用户可以直接调用。

图 1 ZigBee 无线网络协议层 2. 如何使用 ZigBee 协议栈协议栈是协议的实现,可以理解为代码,函数库,供上层应用调用,协议较底下的层与应用是相互独立的。

商业化的协议栈就是给你写好了底层的代码,符合协议标准,提供给你一个功能模块给你调用。

你需要关心的就是你的应用逻辑,数据从哪里到哪里,怎么存储,处理;还有系统里的设备之间的通信顺序什么的,当你的应用需要数据通信时,调用组网函数给你组建你想要的网络;当你想从一个设备发数据到另一个设备时,调用无线数据发送函数;当然,接收端就调用接收函数;当你的设备没事干的时候,你就调用睡眠函数;要干活的时候就调用唤醒函数。

所以当你做具体应用时,不需要关心协议栈是怎么写的,里面的每条代码是什么意思。

7Zigbee实验报告《串口通讯-发送字符串》

7Zigbee实验报告《串口通讯-发送字符串》
教师评定
签字: 年 月 日
相关寄存器:
,相关寄存器UxCSR, UxCSR, UxGCR. UxBUF, UxBAUD, CLKCONCMD,CLKCONSTA如
第二页
实验内容与步骤
实验步骤
第三页
实验内容与步骤
CC2530配置串口的一般步骤:1、配置10,使用外部设备功能。此处配置PO-2和Po3用作串口UARTO2、配置相应串口的控制和状态寄存器。3、配置串口工作的波特率。
2019——2020学年第二学期
专业
班级
讯-发送字符串
实验目的
1)、通过实验掌握CC2530芯片串口配置与使用
2)、观察D2串口发送指示灯的变化,每发送一串字符闪一次
注:嵌入式开发中,当程序能跑起来后,串口是第一个要跑起来的设备,所有的工作状态,交互信息都会从串口输出
实验总结
该实验完成串口的基本通讯。在串口通讯中一般有两种方式来接受数据种是查询法、一种是中断法。查询法就是要串口一致处于等待状态,看串口上是不是有数据,一旦数据接收完毕,就开始对接收的数据进行相应的操作。这个方法需要让程序一致等待串口,所以这种方法效率还是比较低的。中断法师运用串口的中断服务子程序来完成的,如果串口上有数据的话,那么会调用中断向量,中断向量把程序指针指到相应的中断服务服务程序上。在中断服务程序完成之后程序只能还会跳转到中断之前的地址。这个方法的效率比较高,但是从稳定性上面讲,这种方法不如查询法。本实验用的是中断法。
实验内容与步骤
实验内容:
相关电路图:
注:图中OR的电阻是空贴的哦
PO 2,PO 3配置为外设功能时: PO2为Rx, PO3为TX. USARTO和USART1是串行通信接口,它们能够分别运行于异步UART模式或者同步SPI模式。两个USART具有同样的功能,可以设置在单独的1/0引脚。此种串口设计是没有流控功能的

zigbee串口应用

zigbee串口应用
CLKCONCMD &= ~0x47;
SLEEPCMD |= 0x04;
PERCFG = 0x00;
P0SEL = 0x3c;
P2DIR &= ~0xC0;
U0CSR |= 0x80;
U0GCR |= 10;
U0BAUD |= 216;
}
3)串口发送函数编写
将需要发送的数据写入到U0DBUF中
void uarttx(uchar *data,uint len)
【实验日期】
2018.5.29
【教师对报告的最终评价及处理意见】
成绩(百分制):(涂改无效)
教师:年 月 日
【实验报告】
一、实验目的:
掌握使用串口想PC机发送数据。
掌握数据采集并通过串口发送至PC端
二、实验内容:
1)实现串口发送学生的姓名至PC端
2)实现AD采集电压值并通过串口传输至PC端
三、实验设备:
void uartinit();
void uarttx(uchar *data,uint len);
2)串口初始化函数
a.系统时钟初始化;
b.选择串口作为I/O外设的引脚连接位置;
c..设置串口模式;
代码如下:
void uartinit()ቤተ መጻሕፍቲ ባይዱ
{
CLKCONCMD &= ~0x40;
while(!(SLEEPSTA & 0x40));
实 验 报 告
【2017-2018学年第2学期】
【基本信息】
【开课部门】
青软实训
【实验课程】
ZigBee技术及应用实验
独立□ 非独立□
【实验项目】
实验三:串口应用

ZigBee之Z-Stack协议栈MT层串口应用

ZigBee之Z-Stack协议栈MT层串口应用

ZigBee之Z-Stack协议栈MT层串口应用By:Timeandspace7Date:20171029 At:YSU-B3071.包含头文件#include“MT_UART.h”,2.在用户的init函数中添加MT_UartInit ();MT_UartRegisterTaskID(task_id); //注册串口任务任务注意:在MT_UartInit ()函数中,可以修改串口的波特率,uartConfig.baudRate = MT_UART_DEFAULT_BAUDRATE;,即修改#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_38400重要:uartConfig.flowControl = MT_UART_DEFAULT_OVERFLOW语句是配置流控的,我们进入定义可以看到:#define MT_UART_DEFAULT_OVERFLOW TRUE默认是打开串口流控的,如果你是只连了TX/RX 2 根线的方式务必关流控,注意:2 根线的通讯连接一定要关流控,不然是永远收发不了信息的,现在大部产品很少用流控。

也即:将宏定义修改为#define MT_UART_DEFAULT_OVERFLOW FALSE极其重要:在项目配置选项卡中预编译处加入以下一些内容ZIGBEEPROZTOOL_P1xMT_TASKxMT_SYS_FUNCxMT_ZDO_FUNCLCD_SUPPORTED=DEBUG也即是将原来的ZIGBEEPROZTOOL_P1MT_TASKMT_SYS_FUNCMT_ZDO_FUNCLCD_SUPPORTED=DEBUG分别MT_TASK,MT_SYS_FUNC,MT_ZDO_FUNC加上x。

事实上真正的宏是MT_TASK,MT_SYS_FUNC,T_ZDO_FUNC,加x 表示不定义它们了,如果去掉上面的x,编译后下载看串口会在你想输出的数据“xxxxx”前面出现一段乱码,如果用16 进制则会显示为FE 开头的字符串,这是Z-stack MT 层定义的串口发送格式。

zigbee,协议栈,串口

zigbee,协议栈,串口

zigbee,协议栈,串口篇一:ZigBee简易串口透传第十六讲ZigBee串口透传一、串口透明传输工程说明串口透明传输工程是在SampleApp工程基础之上进行修改而成,主要功能是完成简单的串口透明传输,功能要求:1、设备上电后自动选择设备类型。

第一个启动的设备为协调器,后续启动的为路由器。

(所有设备中程序相同)2、路由器的232串口接收到数据后将数据以单播的形式发送到协调器。

当路由器接收到来自空中的数据包将数据写入232串口。

3、协调器的232串口接收到数据后将数据以广播的形式发送到网络中所有的设备。

当协调器接收到来自空中的数据包将数据写入232串口。

图X 串口透明传输应用二、编译选项说明串口透明传输工程在SampleApp工程基础之上进行修改,但是编译选项使用原SampleApp工程的编译选项,SampleApp工程编译选项具体如下:CC2430EB、ZTOOL_P1、MT_TASK、SOFT_ST ART 通过编译选项ZTOOL_P1编译选项SOFT_START。

三、工程初始化与事件处理函数串口透明传输工程来源于对SampleApp工程的修改,工程初始化函数与SampleApp工程的初始化函数完全相同,读者可以参见前面章节。

串口透明传输工程事件处理函数在SampleApp工程事件处理函数的基础之上添加了对事件UART_RX_CB_EVT的处理,具体代码如下。

程序代码:uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ){if ( events &amP1说明原SampleApp工程默认使用Z-T ool,我们这里对其修改,将其在串口初始化中的回调函数函数进行修改。

程序代码:void SPIMgr_Init () { …… #if defined (ZTOOL_P1) || defined (ZTOOL_P2)uartConfig.callBackFunc= rxCB; …… } 相应我们在SPIMgr.c文件中添加该回调函数rxCB( uint8 port, uint8 event ),具体代码如下。

一种ZigBee的无线串口设计

一种ZigBee的无线串口设计

图 3 电 源 电 路 和 串 口连 接 电路
3 软 件 设 计
在本 设 计 中主要 按 照 zSak协 议 栈 的 方式 进 —tc 行 组 网和数 据传输 ,-t k采 用操 作 系统 的思想 来 ZSa c 构 建 , 一 种 任 务 循 环 机 制 , 先 对 各 层 进 行 初 始 是 首 化 然后 系统 进入 低 功耗 模 式 , 当有 任 务 时 系 统被 唤 醒 , 人 中断 程 序 处 理 任 务 , 束 后 继 续 进 入 低 功 进 结 耗模 式 , 果 在 同 一 时 间 内有 多 个 任 务 , 首 先 判 如 则
0 引 言
Zg e 是 一种 新兴 的短 距 离 、 功耗 、 复杂 度 iB e 低 低 和低 成本 的无 线 网络 技 术 , 工 业 控 制 、 费类 电 在 消
子产 品 、 汽车 电子 、 业 自动 化 和 医疗 领 域 都 有 广 农
这种方 式 会在 每个 数 据 包 前 面 添 加 目的地 址 ,口 在 多 点通信 中效率 较快 , 是 在 点 对 点 网络 中会 有 较 大 但 一

要 : 计 了一种 基 于 Zg e 的 无 线 串 口模 块 , 无 线 收发 电路 、 源 电路 和 串 口连 接 电路 组 成 的硬 件 以及 按 照 Z 设 i e B 由 电 —
Sak协议 栈 的 方式进 行 组 网和传 输 的软 件设 计 很 好 地 实现 了 c23 t c c50芯 片与 串 1的 无缝 接 入 , 且通 过 ZS c 议 栈 3 ' 并 —t k协 a
收 稿 日期 :0 20 -8 2 1-30
无 线 收发 模 块 电路 如 图 2所 示 , 主 要 由 它
c23 c50芯 片复位 电路 和 外 围元 件 组 成 , 整 个 电路 是

zigbee技术及应用

zigbee技术及应用

Zigbee技术简介及应用摘要二十一世纪初,信息技术的迅猛发展使人们的生活水平和工作效率极大地提高。

近距离内各种设备的无线通讯成为一个研究热点。

目前也有着几种发展比较成熟的无线通讯技术。

本文介绍的是目前一种比较流行的短距离无线通讯接入技术——Zigbee。

这种技术将使短距离无线通讯技术广泛地应用于生产生活中成为可能。

介绍完该技术后,通过特定的一个例子SampleApp工程对该技术进行进一步说明,该例子是现的功能是:A、B两个节点,当按下A(或B)节点的按键1时,点亮或熄灭B(或A)节点的LED1灯。

关键词:Zigbee技术;无线通讯技术1 Zigbee技术概述及其特征1.1 Zigbee技术概述ZigBee的名称源于蜜蜂的舞蹈,蜜蜂通过跳ZigZag形状的舞蹈交换各种信息。

故将新一代无线通信技术命名为ZigBee。

ZigBee过去又称为"HomeRF Lite"、"RF-EasyLink"或"FireFly"无线电技术,目前统称为ZigBee技术。

ZigBee是在2004年底才由Zigbee联盟正式发布的一种无线传输协议。

2006年12月,该联盟正式推出Zigbee的升级规范——Zigbee2006,也称为“增强型”Zigbee。

Zigbee技术是一种可以实现短距离内双向无线通讯的技术。

Zigbee技术以其复杂程度低、能耗低、成本低取胜于其余的短距离无线通讯技术。

其主要应用于短距离内,传输速度要求不高的电子通讯设备之间的数据传输和典型的有周期性、间歇性和地反应时间的数据的传输。

Zigbee是IEEE802.15.4技术的商业名称,该技术的核心由其制定。

能够在三个不同的频段上通讯。

全球通用的频段是2.4-2.484GHz,欧洲采用的频段是868.0-868.66MHz,美国采用的频段是902-928MHz。

该技术的高层应用和市场推广由Zigbee联盟负责。

ZigBee协议栈的分析与设计

ZigBee协议栈的分析与设计

ZigBee协议栈的分析与设计ZigBee协议栈的分析与设计引言随着物联网的不断发展,无线传感器网络(WSN)得到了广泛的应用。

ZigBee作为一种低功耗、短距离、低带宽的无线通信协议,逐渐成为物联网中最受欢迎的通信协议之一。

本文将对ZigBee协议栈进行深入的分析与设计,以期更好地理解其工作原理并提供一种优化方案。

一、ZigBee协议栈的结构与功能1. ZigBee协议栈结构ZigBee协议栈由两部分组成:上层和下层。

上层包括应用层(Application Layer)、网络层(Network Layer)和安全层(Security Layer)。

下层包括物理层(Physical Layer)和介质访问控制层(Media Access Control Layer)。

2. ZigBee协议栈功能- 物理层(Physical Layer):负责将数据转换为无线信号,通过无线传输介质进行通信。

ZigBee协议栈支持多种物理层标准,例如2.4GHz、900MHz和868MHz等。

- 介质访问控制层(Media Access Control Layer):负责数据帧的分发和接收,同时处理多跳中继和协议转发。

- 网络层(Network Layer):提供网络拓扑管理、路由选择、数据包传输和安全性等功能。

ZigBee协议栈使用了Ad-hoc On-Demand Distance Vector(AODV)路由协议来实现自组网和动态路由选择。

- 应用层(Application Layer):定义应用程序的协议和接口,包括设备发现、网络配置、设备控制等功能。

- 安全层(Security Layer):提供数据加密和认证等安全机制,确保通信的可靠性和机密性。

二、ZigBee协议栈的分析1. 物理层分析ZigBee协议栈采用低功耗、短距离的射频通信技术。

2.4GHz频段是其最常用的无线传输介质,具有广泛的应用领域。

ZigBee协议栈使用了Direct Sequence Spread Spectrum (DSSS)技术来提高抗干扰性能。

zigbee串口通信

zigbee串口通信

zigbee串口通信RS232,也称标准串口,是目前最常用的一种串行通讯接口,因其成本低廉,应用广泛而被很多嵌入式系统所采用。

在CC2530开发板上,由于LCD、LED等基本外接显示信息量有限,同时串口也方便了与其他系统进行通讯,所以它无疑成为了开发者最重要的一个调试手段。

本章的重点,就是以Ztack2007中提供的例程--SerialApp为基础,对CC2530的串口部分进行详细的介绍。

例3.基于Ztack2007的串口通讯在之前的“奥特曼Zigbee读书日记(三)和(四)”中,其实已经利用TI提供的基本库,从零开始,一步步地搭建了一个“老王”和“老张”打招呼的例程,但是由于他们俩说的所有话都是程序规定的,所以他们只能简单地说两句话“吃了吗”和“吃了”,然后不停地重复,我们中国人自然没有这么呆啦~~在本实验中,看看中国小伙是如何“远程”泡美国MM的~~~图(1)注:“日记”中的例程的串口通讯部分其实是抛开Ztack的串口程序而重新写的,但实际上Ztack已经做过这部分工作了,在本例程中,我们不对ZStack做任何修改,只是分析下其程序功能与原理。

读者可以在安装ZStack-CC2530-2.3.0-1.4.0后,在C:\\Te某aIntrument\\ZStack-CC2530-2.3.0-1.4.0\\Project\\ztack\\Utilitie\\SerialApp\\CC2530DB目录下,打开SerialApp这个工程进行实验。

[一]程序功能实现两个节点之间的绑定与通讯,同时每个节点可与其“上位机”--所边接的PC串口终端,进行通讯。

示意如下:图(2)[二]操作说明(图3)(图4)如果显示信息如上图所示,则表示网络初始化成功。

此时,按下任意一个节点的摇杆(Joytick)右键进行绑定申请,然后立即按下另外一个节点的Joytick右键进行绑定确认。

此时,两个节点的红色LED灯--LED1,同时点亮,表示绑定成功,可以开始通信。

Zigbee 协议栈及应用实现

Zigbee 协议栈及应用实现

Zigbee 协议栈及应用实现1、ZigbeeZigbee 是一种新兴的短距离、低功率、低速率无线接入技术.工作在 2.4GHz 波段,传输速率为 10M~250kb/ s ,传输距离为10~75m. Zigbee 是基于 IEEE 802.15.4 的无线通信协议 ,它的协议结构由物理层(PHY)、介质访问层(MAC)、网络层(NWK)、应用层组成.Zigbee 主要应用在距离短、功耗低且传输速率不高的各种电子设备之间 ,典型的传输数据类型有周期性数据、间歇性数据和低反应数据.因而,它的应用目标主要是:工业控制(如自动控制设备、无线传感器网络) ,医护(如监视和传感) ,家庭智能控制(如照明、水电气计量及报警) ,消费类电子设备的遥控装置、PC外设的无线连接等领域.2、Zigbee 协议栈参考模型及实现(1)物理层的参考模型PHY层定义了物理无线信道和MAC子层之间的接口 ,提供物理层数据服务和物理层管理服务.物理层数据服务从无线物理信道上收发数据 ,物理层管理服务维护一个由物理层相关数据组成的数据库.物理层数据服务包括以下五方面的功能:①激活和休眠射频收发器;②信道能量检测(energy detect) ;③检测接收数据包的链路质量指示(link quality indication ,LQI) ;④空闲信道评估(clear channel assessment ,CCA) ;⑤收发数据.信道能量检测为网络层提供信道选择依据.它主要测量目标信道中接收信号的功率强度 ,由于这个检测本身不进行解码操作 ,所以检测结果是有效信号功率和噪声信号功率之和.链路质量指示为网络层或应用层提供接收数据帧时无线信号的强度和质量信息 ,与信道能量检测不同的是 ,它要对信号进行解码 ,生成的是一个信噪比指标.这个信噪比指标和物理层数据单元共同提交给上层处理.空闲信道评估判断信道是否空闲. IEEE 802.15. 4定义了三种空闲信道评估模式:第一种简单判断信道的信号能量 ,当信号能量低于某一门限值就认为信道空闲;第二种是通过判断无线信号的特征,这个特征主要包括两方面 ,即扩频信号特征和载波频率;第三种模式是前两种模式的综合 ,同时检测信号强度和信号特征 ,给出信道空闲判断.Zigbee 物理层帧结构,其中前导码4Byte ,主要用于前导同步;分组定界 1Byte ,标志分组的开始;物理层头1Byte ,表示数据单元的长度;物理层数据服务单元( PSDU)数据单元用于承载向上层即MAC 层传输数据.(2)MAC层参考模型及实现.MAC子层的参考模型如图 4 所示. MAC子层提供两种服务:MAC 层数据服务和MAC层管理服务(MAC sublayer manage2ment entity , MLME) .前者保证MAC协议数据单元在物理层数据服务中的正确收发 ,后者维护一个存储MAC子层协议状态相关信息的数据库.MAC子层主要功能包括下面六个方面:①协调器产生并发送信标帧 ,普通设备根据协调器的信标帧与协议器同步;②支持PAN 网络的关联(ass ociation)和取消关联(disass ociation)操作;③支持无线信道通信安全;④使用 CSMA - CA 机制访问信道;⑤支持时槽保障(guaranteed time slot , GTS)机制;⑥支持不同设备的MAC层间可靠传输.MAC子层定义了信标帧、数据帧、确认帧和命令帧.信标帧和数据帧包含了高层控制命令或者数据 ,确信帧和命令帧用于 Zigbee 设备MAC子层功能实体间控制信息的收发.MAC子层的帧结构由帧头、MAC 层服务数据单元和帧尾三部分组成. 帧头由帧控制信息2Byte、帧序列号1Byte 和地址信息组成420Byte (命令帧无地址信息) .MAC 子层数据服务单元(MSDU)具有可变长度 nByte ,具体内容由帧类型决定(命令帧无MSDU) .帧尾是帧头和负载数据的 16 位 CRC 校验序列(FCS) 2Byte.(3)网络层参考模型及实现.Zigbee 协议栈的核心部分在网络层.网络层负责拓扑结构的建立和维护、命名和绑定服务 ,它们协同完成寻址、路由、传送数据及安全这些不可或缺的任务 ,支持星形(Star)、树形 (Cluster- Tree)、网格 (Mesh) 等多种拓扑结构.MAC子层的参考模型如图 6 所示.为了满足应用层的要求 ,Zigbee 协议的网络层划分为网络层数据实体(NLDE)和网络层管理实体(NlME) ,NLDE提供相关的 SAP的数据传输服务 ,而 NLME则提供经由相关的 SAP的管理服务.网络层的主要功能包括以下八个方面:①通过添加恰当的协议头能够从应用层生成网络层的 PDU ,即NPDU.②确定网络的拓扑结构.③配置一个新的设备 ,可以是网络协调器也可以向存在的网络中加入设备.④建立并启动无线网络.⑤加入或离开网络.⑥Zigbee 的协调器和路由能为加入网络的设备分配地址.⑦发现并记录邻居表、路由表.⑧信息的接收控制 ,同步 MAC 子层或直接接受信息.网络层定义了数据帧和命令帧 ,它的帧结构由网络层头信息和数据负载构成.网络层帧头信息格式是固定的 ,帧控制2Byte ,目的地址 2Byte ,源地址 2Byte ,网络传输的半径1Byte ,但是地址域和序列号域并非在所有的帧结构中都出现.网络层数据域 nByte.其中目的地址、源地址、半径和序列和称为路由域.网络层数据帧和命令帧的区别在于命令的数据域有1Byte 的NWK命令标识符.(4)ZigBee APIZigBee协议栈支持应用程序接口API函数很多,主要有:ZigBee 设备对象ZDO API、应用支持子层APS API、端点数据发送接收AF API和网络层NWK API。

ZigBee学习之42——协议栈中的串口操作

ZigBee学习之42——协议栈中的串口操作

#endif } //在来看一下串口中断,就是将 U0DBUF 的数据存放到 cfg0->rxBuf 里面,并且更改 rxHead 标志 HAL_ISR_FUNCTION( halUart0RxIsr, URX0_VECTOR ) { cfg0->rxBuf[cfg0->rxHead] = U0DBUF;
if ( cfg->rxHead >= (cfg->rxMax - SAFE_RX_MIN) ) { / /已保 存的数 据已经 超过了 安全界 限,发 送接收 满事件 evt = HAL_UART_RX_FULL; } else if ( cfg->rxHigh && (cfg->rxHead >= cfg->rxHigh) ) { evt = HAL_UART_RX_ABOUT_FULL; } else if ( cfg->rxTick == 0 ) { / /超时 事件 evt = HAL_UART_RX_TIMEOUT; } else { evt = 0; } / /如果 发生事 件,并 且配置 了回调 函数则 调用回 调函数 if ( evt && cfg->rxCB ) { cfg->rxCB( ((cfg->flag & UART_CFG_U1F)!=0), evt ); //(cfg->flag & UART_CFG_U1F)!=0) 判读是那个串口,如果是串口 1 则为 1,否则为 0 } } //下面的没看懂,下面的判断好像是没有用一样,不管是哪个条件都 break 了! if ( cfg == cfg0 ) { break; } else break; } while ( TRUE ); #else return;

ZIGBEE开源协议栈

ZIGBEE开源协议栈

ZIGBEE开源协议栈篇一:ZigBee协议栈中文完整版Zigbee协议栈中文说明1.概述1.1解析ZigBee堆栈架构ZigBee堆栈是在IEEE 802.15.4标准基础上建立的,定义了协议的MAC和PHY层。

ZigBee设备应该包括IEEE802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的PHY和MAC 层,以及ZigBee堆栈层:网络层(NWK)、应用层和安全服务提供层。

图1-1给出了这些组件的概况。

1.1.1ZigBee堆栈层每个ZigBee设备都与一个特定模板有关,可能是公共模板或私有模板。

这些模板定义了设备的应用环境、设备类型以及用于设备间通信的簇。

公共模板可以确保不同供应商的设备在相同应用领域中的互操作性。

设备是由模板定义的,并以应用对象(Application Objects)的形式实现(见图1-1)。

每个应用对象通过一个端点连接到ZigBee堆栈的余下部分,它们都是器件中可寻址的组件图1-1 zigbe堆栈框架从应用角度看,通信的本质就是端点到端点的连接(例如,一个带开关组件的设备与带一个或多个灯组件的远端设备进行通信,目的是将这些灯点亮)。

端点之间的通信是通过称之为簇的数据结构实现的。

这些簇是应用对象之间共享信息所需的全部属性的容器,在特殊应用中使用的簇在模板中有定义。

图1-1-2就是设备及其接口的一个例子:图1-1-2每个接口都能接收(用于输入)或发送(用于输出)簇格式的数据。

一共有二个特殊的端点,即端点0和端点255。

端点0用于整个ZigBee设备的配置和管理。

应用程序可以通过端点0与ZigBee堆栈的其它层通信,从而实现对这些层的初始化和配置。

附属在端点0的对象被称为ZigBee设备对象(ZD0)。

端点255用于向所有端点的广播。

端点241到254是保留端点。

所有端点都使用应用支持子层(APS)提供的服务。

APS通过网络层和安全服务提供层与端点相接,并为数据传送、安全和绑定提供服务,因此能够适配不同但兼容的设备,比如带灯的开关。

zigbee串口通信课程设计

zigbee串口通信课程设计

zigbee串口通信课程设计一、课程目标知识目标:1. 学生能够理解Zigbee无线通信技术的原理及其在串口通信中的应用。

2. 学生能够掌握Zigbee模块的配置和使用,并了解其通信协议。

3. 学生能够了解串口通信的基本概念,包括串行通信接口、波特率、数据位等。

技能目标:1. 学生能够运用Zigbee模块进行串口通信,实现数据的发送和接收。

2. 学生能够通过编程解决串口通信过程中的常见问题,如数据丢失、校验错误等。

3. 学生能够独立完成Zigbee串口通信系统的搭建和调试。

情感态度价值观目标:1. 学生通过学习,培养对无线通信技术的兴趣,提高对物联网领域的好奇心。

2. 学生能够认识到团队协作的重要性,提高沟通能力和解决问题的能力。

3. 学生能够认识到科技发展对社会进步的推动作用,增强对科技创新的热情。

课程性质:本课程为实践性较强的课程,结合课本知识,通过实际操作培养学生的动手能力和解决问题的能力。

学生特点:学生具备基本的电子知识和编程能力,对新技术充满好奇心,喜欢动手实践。

教学要求:教师需提供详细的操作指导,引导学生掌握Zigbee串口通信技术,注重培养学生的实际操作能力和团队协作能力。

在教学过程中,关注学生的个体差异,给予个性化指导。

通过课程学习,使学生在知识、技能和情感态度价值观方面均取得具体的学习成果。

二、教学内容本课程教学内容紧密结合课程目标,确保学生能够系统地学习和掌握Zigbee 串口通信相关知识。

1. 理论知识:- 串口通信基本原理及接口标准- Zigbee无线通信技术及其特点- 串口通信协议及其配置方法2. 实践操作:- Zigbee模块的安装与配置- 串口通信程序设计及调试- 数据发送与接收功能的实现3. 教学大纲安排:- 第一章:串口通信概述,介绍串口通信的基本原理、接口标准及在物联网中的应用。

- 第二章:Zigbee无线通信技术,讲解Zigbee协议、模块特点及其在串口通信中的应用。

ZigBee学习之42—协议栈中的串口操作讲义

ZigBee学习之42—协议栈中的串口操作讲义

#1楼主:【原创】ZigBee学习之42——协议栈中的串口操作文章发表于:2010-02-27 13:27如果要使用协议栈中提供的串口,则需要定义HAL_UART和HAL_UART TRUE 【hal_board_cfg.h】。

首先初始化串口,在主函数中调用HalDriverInit()时,在函数中初始化串口,主要是配置管脚和DMA通道。

然后在osal_start_system()开始系统后,会调用Hal_ProcessPoll()来读取时间和串口,void Hal_ProcessPoll (){HalTimerTick();#if (defined HAL_UART) && (HAL_UART == TRUE)HalUARTPoll();#endif}//来看下串口poll函数,我们只看UART0的,因为我的开发板使用这个串口void HalUARTPoll( void ){#if ( HAL_UART_0_ENABLE | HAL_UART_1_ENABLE )static uint8 tickShdw;uartCfg_t *cfg;uint8 tick;#if HAL_UART_0_ENABLE//当发生串口接收中断时cfg0就会改变,如果串口没有数据输入cfg0为空,当接收到数据时cfg0将在串口中断服务程序中被改变if ( cfg0 ){cfg = cfg0;}#endif// Use the LSB of the sleep timer (ST0 must be read first anyway).//系统上电后,睡眠定时器就会自动启动做自增计数ST0:即睡眠定时器启动到现在计算值的最低8位tick = ST0 - tickShdw;tickShdw = ST0;//要注意接下来的是个循环do{if ( cfg->txTick > tick ){cfg->txTick -= tick;}else{cfg->txTick = 0;}if ( cfg->rxTick > tick ){cfg->rxTick -= tick;}else{cfg->rxTick = 0;}//是使用DMA方式还是使用中断方式#if HAL_UART_ISR#if HAL_UART_DMAif ( cfg->flag & UART_CFG_DMA ){pollDMA( cfg );}else#endif{pollISR( cfg );//中断方式static void pollISR( uartCfg_t *cfg ){//如果串口没有接收到数据,也就是说没有发生过串口接收中断,那么cfg应为是为空的,则cnt=0//如果发生了串口中断,则cnt计算出串口缓存中还有多少数据没有读出,这个缓存并不是硬件寄存器的缓存,而是程序中开辟一段空间uint8 cnt = UART_RX_A V AIL( cfg );if ( !(cfg->flag & UART_CFG_RXF) ){//这里是针对流控制的,如果又有新的数据接收到了那么就要重置超时时间(超时时间由睡眠定时器来控制),而且需要把已经读出的数据数目减去!// If anything received, reset the Rx idle timer.if ( cfg->rxCnt != cnt ){cfg->rxTick = HAL_UART_RX_IDLE;cfg->rxCnt = cnt;}/* It is necessary to stop Rx flow in advance of a full Rx buffer because* bytes can keep coming while sending H/W fifo flushes.*///当接收缓存超过安全界限的时候停止RX流if ( cfg->rxCnt >= (cfg->rxMax - SAFE_RX_MIN) ){RX_STOP_FLOW( cfg );}//关于安全界限,在程序中有下面一段:/* Need to leave enough of the Rx buffer free to handle the incoming bytes* after asserting flow control, but before the transmitter has obeyed it.* At the max expected baud rate of 115.2k, 16 bytes will only take ~1.3 msecs,* but at the min expected baud rate of 38.4k, they could take ~4.2 msecs.* SAFE_RX_MIN and DMA_RX_DL Y must both be consistent according to* the min & max expected baud rate.*///如果声明了流控制,为保证数据的正确接收需要在RX缓存区中预留出足够的空间。

ZigBee 串口使用总结

ZigBee 串口使用总结

设定了 CC2430 的时钟频率,即使用片外 32MHz。根据数据手册,CC2430 可以有两种 时钟,第一种是片外的 32M 石英晶振,另一种是片内的 16M 的 RC 振荡器。顺便说一下, 这个 SET_MAIN_CLOCK_SOURCE() 是一个名为 hal.h 文件中的“动作宏”。我手头有一本 书,名为《ZigBee 技术实践教程》,其中的代码都使用了这个头文件。该头文件中有很多的 API 函数,若仔细的查看代码,配合数据手册页可以看懂其中各宏的“原理”。设定时钟的 的函数原型是这样的:
同理,CC2430 的代码就是可以这样写: int putchar(int c){
if(c== '\n'){ while(!UTX0IF); UTX0IF = 0; U0DBUF = '\r';
} while(!UTX0IF); UTX0IF = 0; U0DBUF = c;
return c; }
7 IAR 中 printf 参数设置
8 实验结果
最后给出实验的结果,虽然代码非常的简单,但是我还是花了一整个下午去调试,后来 发现其实是 IAR 中的 link 中某参数选择错误了。实验的结果还是预想的那样,使用的时候 还是要注意串口的参数设定,CC2430 的串口调试助手的参数要一致。
9 更好的使用 printf 函数
Printf 函数可以帮助我们更好的进行调试工作,例如需要查看某些关键参数的变化时, 可以不断的通过串口打印这些参数,例如打印按钮是否被按下,或者监控 AD 转换结果等。 例如加入以下代码:
}
下面一步一步分析
1 头文件
#include "hal.h" 该头文件包括了操作 CC2430 常用寄存器的宏,书中找到的,觉得很实 用。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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