zigbee中的cc2530
“51单片机” 和 “zigbee” 、 “cc2530芯片” 之间的关系
51单片机:是一款比较老的单片机,至于单片机你可以把它理解成电脑中的CPU。
Zigbee:是一短距离、低功耗的局域网无线通信技术,但可以进行自组网。
CC2530:是TI公司推出的一款芯片,里面包含了51单片机的内核与Zigbee技术,而且TI提供了很好的Zigbee协议栈以及决解方案。
I/O端口
寄存器 PxSEL,其中 x 为端口的标号 0~2,用来设置端口的每个引脚为通用 I/O 或者是外部设备 I/O 信号 。作为缺省的情况,每当复位之后,所有的数字输入/输出引脚都设置为通用输入引脚。
在任何时候,要改变一个端口引脚的方向,就使用寄存器 PxDIR 来设置每个端口引脚为输入或输出。因此只要设置 PxDIR 中的指定位为 1,其对应的引脚口就被设置为输出了。
定时器
中断
所有21个I / O引脚都具有外部中断功能。 因此,如果需要,外部设备可能会产生中断。 外部中断功能也可用于将器件从睡眠模式(电源模式PM1,PM2和PM3)中唤醒。
通用IO:共21个,分成3组,P0组、P1组、P2组,其中P0\P1组各8个IO,P2组5个(P2_0、P2_1、 P2_2、P2_3、 P2_4)。其中P1_0、P1_1有20mA的输出驱动能力,其余的只有4mA。
所有端口都可通过SFR寄存器P0,P1和P2进行位和字节寻址。 每个端口引脚都可以单独设置为通用I / O或外设I / O。
1、GPIO功能选择寄存器——PxSEL
寄存器PxSEL(其中x是端口号0-2)用于将端口中的每个引脚配置为通用I / O引脚或外设I / O引脚,可位寻址。 默认情况下,复位后,所有数字输入/输出引脚都配置为通用输入引脚。
P2SEL只有第0位至第2位是端口2的功能选择控制位,第3位至第6位是端口1的外设优先级控制位。
2、GPIO输入输出方向选择寄存器——PxDIR
寄存器PxDIR用于将每个端口的引脚方向设置为输入方向或输出方向。 因此,将PxDIR中的相应位设置为1,相应的引脚就变成输出方向,可位寻址。
P2DIR只有第0位至第4位是端口2的方向选择控制位,第6位和第7位是端口0外设优先级控制位。
3、GPIO输入模式寄存器——PxINP
寄存器PxINP用于设置IO端口的输入模式,通用I / O端口引脚可配置为具有上拉,下拉或三态操作模式。 默认情况下,复位后,输入配置为带有上拉的输入。如果要取消输入端口的上拉或下拉功能,必须将PxINP中的相应位设置为1。
I / O端口引脚P1.0和P1.1不具有上拉或下拉功能。
请注意,即使IO端口是外设功能输入,配置为外设I / O信号的引脚也不具有上拉或下拉功能。
其中,P2INP中,第0位至第4位是端口2的输入模式选择位,第5位至第7位是端口0、端口1、端口2的上下拉选择位。
外设 I/O
串口
DMA控制器
ADC
看门口
USB控制器
如何实现组播,广播通信,怎么识别组播、广播?
// Setup for the periodic message's destination address// Broadcast to everyoneSampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;//这是设置广播SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_Periodic_DstAddr.addr.shortAddr = 0xFFFF;// Setup for the flash command's destination address - Group 1SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup; //这是设置组播SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP;// By default, all devices start out in Group 1SampleApp_Group.ID = 0x0001;osal_memcpy( SampleApp_Group.name, "Group 1", 7 );aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );// Fill out the endpoint description.SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT; //填充端点信息SampleApp_epDesc.task_id = &SampleApp_TaskID;SampleApp_epDesc.simpleDesc= (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;SampleApp_epDesc.latencyReq = noLatencyReqs;// Register the endpoint description with the AFafRegister( &SampleApp_epDesc );
区别发送和接收不同的信息?
实现过程:
用户添加自定义的组播通信或广播通信应该与用户或系统事件响应函数结合起来,将组播或广播控制字的定义与消息响应函数的实现一同考虑。
(1)声明射频地址类型变量、应用层的组变量,在初始化用户任务时给定义的这些变量赋初值。在App目录的用户应用程序文件中实现。
例如
// Setup for the periodic message's destination address// Broadcast to everyoneSampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;//这是设置广播SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_Periodic_DstAddr.addr.shortAddr = 0xFFFF;// Setup for the flash command's destination address - Group 1SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup; //这是设置组播SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP;// By default, all devices start out in Group 1SampleApp_Group.ID = 0x0001;osal_memcpy( SampleApp_Group.name, "Group 1", 7 );aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );// Fill out the endpoint description.SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT; //填充端点信息SampleApp_epDesc.task_id = &SampleApp_TaskID;SampleApp_epDesc.simpleDesc= (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;SampleApp_epDesc.latencyReq = noLatencyReqs;// Register the endpoint description with the AFafRegister( &SampleApp_epDesc );
()定义射频消息簇ID 用于识别通过组播或广播传送到的、用户自定义的射频数据包。
例如:
(2)声明组播或广播射频发送过来后,进行接收消息数据包的回调函数的原型。并在消息回调函数中添加处理接收到的射频数据包的程序代码。
void SampleApp_SendFlashMessage( uint16 flashTime )//接收射频数据包的函数,并进行处理
{uint8 buffer[3];buffer[0] = (uint8)(SampleAppFlashCounter++);buffer[1] = LO_UINT16( flashTime );buffer[2] = HI_UINT16( flashTime );if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc,SAMPLEAPP_FLASH_CLUSTERID,3,buffer,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){}else{// Error occurred in request to send.}
}
(4)定义组播或广播数据发送函数,用于响应特定的用户或系统事件,在用户任务的事件处理函数(SampleApp ProcessEvent)电调用。
void SampleApp_SendPeriodicMessage( void ) //广播发送
{if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,SAMPLEAPP_PERIODIC_CLUSTERID,1,(uint8*)&SampleAppPeriodicCounter,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){}else{// Error occurred in request to send.}
}
void SampleApp_SendFlashMessage( uint16 flashTime ) //组播发送
{uint8 buffer[3];buffer[0] = (uint8)(SampleAppFlashCounter++);buffer[1] = LO_UINT16( flashTime );buffer[2] = HI_UINT16( flashTime );if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc,SAMPLEAPP_FLASH_CLUSTERID,3,buffer,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){}else{// Error occurred in request to send.}
}
书中说明,可以参考。
参考:
1.https://blog.csdn.net/ysh1042436059/article/details/86579339
zigbee中的cc2530相关推荐
- zigbee中的CSMA-CA载波检测多路访问-碰撞避免和信标(Beacon)VS非信标(Nonbeacon)网络
摘自:zigbee葵花宝典 1 CSMA-CA载波检测多路访问-碰撞避免 IEEE 802.15.4使用一种简单的方法来让多个设备使用同一个频率信道,它使用的访问机制是载波检测多路访问碰撞避免(C ...
- ZigBee TI ZStack CC2530 3.10 IO口01-输入输出
[配套源码.文档.软件.硬件等资源,入口见文末] 一.前言 本博客ZigBee分支关于CC2530的IO口部分的介绍,分为如下三篇文章: 1.ZigBee TI ZStack CC2530 3.9 I ...
- ZigBee TI ZStack CC2530 2.4 IAR软件版本
(配套源码.软件.开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) 一.IAR IAR,全称IAR Systems.公司总部位于北欧的瑞典,在美国.日本.英国.德国.比利时.巴西和中 ...
- ZigBee TI ZStack CC2530 3.18 串口01-发送
(配套源码.软件.开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) 这一节,基于<ZigBee CC2530 Z-Stack 06 创建基于Z-Stack的全新工程>一节 ...
- ZigBee中的技术问题以及解决方案
1.组网后,怎样获取新加入的Endpoint的地址? 答: 现在有一个最常见的场景,我有一个100个节点的网络同时发送数据给协调器,我很想知道那个地址对应那个节点.其实楼上的就想知道那个,以前 ...
- html5在zigbee中起什么作用,ZigBee是什么?ZigBee在智能家居中扮演什么角色
做智能家居的都智能Zigbee网关协议,但对于刚刚了解智能家居的朋友可能会有些迷茫,对于各类新出现的名词肯定会相当的陌生,比如经常看到的ZigBee这个单词,它是什么意思,在智能家居产品中又扮演什么样 ...
- ZigBee TI ZStack CC2530 4.1 三种网络设备类型
[配套源码.文档.软件.硬件等资源,入口见文末] 在ZigBee网络中存在三种逻辑设备类型,按各自作用的不同分为:协调器节点(Coordinator),路由器节点(Router)和终端节点(EndDe ...
- ZigBee TI ZStack CC2530 4.14 广播通信
[配套源码.文档.软件.硬件等资源,入口见文末] 前面两节中,我们详细介绍了ZigBee的第一种无线通信方式--单播:本节中,我们将介绍ZigBee的第二种无线通信方式--广播. (仅描述与单播通信不 ...
- ZigBee中PANID的修改
信道配置: Zigbee在3个频段定义了27个物理信道:868MHz频段中定义了1个20Kb/s信道,915MHz频段中定义了10个40Kb/s信道,信道间隔为2MHz,2.4GHz频段上定义了16个 ...
最新文章
- HTML5与CSS3基础(二)
- wxWidgets:wxMenu类用法
- CodeForces - 1494D Dogeforces(贪心+构造)
- currenttimemillis 毫秒还是秒_亿级数据毫秒级查询!ElasticSearch是怎么做到的?
- Kung Fu Panda: Legends of Awesomeness 2
- 【Spring】Could not commit JPA transaction RollbackException: Transaction marked as rollbackOnly
- 力扣45. 跳跃游戏 II(JavaScript)
- 怎么样做好手机网站的优化和推广呢?
- IT职场人生系列之十:创业观
- 14个非常棒的 JavaScript 游戏开发框架推荐
- TCP/IP学习笔记12-- IP协议基础
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_18-异常处理-不可预知异常处理...
- STM32通过IIC驱动MAX30102心率血氧传感器
- 二进制转十六进制的详细步骤
- 功率放大芯片IR2184介绍
- 影响内存频率的几个因素
- 如何编制试算平衡表_会计试算平衡表怎么编制
- abb机器人指令手册_ABB机器人速度设置
- 刘鹏教授接受新华日报财经客户端采访:智能制造应用落地生根,“江苏智造”进入快速增长期...
- WebAPI 网站发布