ImageVerifierCode 换一换
格式:DOC , 页数:12 ,大小:346KB ,
资源ID:7670204      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7670204.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(点西科技嵌入式技术联盟webee—zigbee学习历程八.doc)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

点西科技嵌入式技术联盟webee—zigbee学习历程八.doc

1、点西科技嵌入式技术联盟webee—zigbee学习历程八 前言: 万众期待,终于到了“无线”这一块的实验了,无线点灯是大家入门ZigBee的一个很好的经典例子,里面虽然还没有用到协议栈,但它体现出来的数据发送、接收和用协议栈是差不多的,而且TI公司的Basic RF的代码容易看懂,如果把这个实验掌握了(不要只是下载程序然后看试现象),到后面的协议栈就比较好入手了。废话就不多说,立马开始我们的实验。 大家可以了解一下下面的关键字: CCM - Counter with CBC-MAC (mode ofoperation) HAL - HardwareAbs

2、traction Layer (硬件抽象层) PAN - PersonalArea Network (个人局域网) RF - RadioFrequency (射频) RSSI - Received SignalStrength Indicator (接收信号强度指示) 实现平台:两块WeBee 功能底板及两块WeBee无线模块 图1 准备就绪

3、 图2 无线点灯 实验现象: 两块WeBee模块通信,一个模块作发射,另外一个模块接收,发射模块依次按下按键S1,改变接收模块LED1的亮灭的状态。实现无线点灯功能。 实验讲解: 例程的源代码CC2530 BasicRF.rar是TI官网上下载的,用户可以去TI官网注册并下载。首先说明,TI官网的程序的开发平台是TI官网的开发板,硬件资料有所不同,所以要在WeBee板上实现无线点灯功能,必须对其代码稍作修改。 本实现讲解的主要内容有分三部分: 1、工程文件介绍 2、Basic RF layer介绍及其工作过

4、程 3、light_switch.c代码详解 一、工程文件介绍: 解压后打开文件夹:CC2530 BasicRF 然后你会发现还有三个文件夹,然后你下意识地点进source文件夹,再进去后会发现,还有两个文件夹,然后你很自然地会再点入app文件夹(吐血,还有三个文件夹)……在这茫茫的文件夹里哪个才是我无线点灯的工程呢! 好吧,在讲解实验代码之前,还是先来看看这些看到有点头晕的文件夹吧! 文件夹结构大至如下,仅列出CC2530 BasicRF目录一些相关的的文件夹:每个文件夹里面放着什么东西,如果缺少其中某些,我们的灯还是否可以点亮呢?我们来一一探讨:

5、 图3 BasicRF软件文件夹架构 docs文件夹: 打开文件夹里面仅有一个名为CC2530_Software_Examples的PDF文档,文档的主要内容是介绍BasicRF的特点、结构及使用,如果读者有TI的开发板的话阅读这个文档就可以做Basic RF里面的实验了,从中我们可以知道,里面Basic RF包含三个实验例程:无线点灯、传输质量检测、谱分析应用。下面讲解的内容中也有部分内容是从这个文档中翻译所得,是一份相当有价值的参考资料。 Ide文件夹: 打开文件夹后会有三个文件夹,及一个cc2530_sw_example

6、s.eww工程,其中这个工程是上面提及的三个实验例程工程的集合,当然也包含了我们无线点灯的实验工程!在IAR环境中打开,在workspace看到 Ide\Settings文件夹: 是在每个基础实验的文件夹里面都会有的,它主要保存有读者自己的IAR环境里面的设置。 Ide\srf05_CC2530文件夹: 里面放有三个工程,light_switch.eww、per_test.eww、spectrum_analyzer.eww 如果读者不习惯几个工程集合在一起看,也可以在这里直接打开你想要用的实验工程。 source文件夹: 打开文件夹里面有apps文件夹和components文

7、件夹 Source\apps文件夹: 存放BasicRF三个实验的应用实现的源代码 Source\components文件夹: 包含着BasicRF的应用程序使用不同组件的源代码 打开实验工程: 打开文件夹WeBee CC2530BasicRF\ide\srf05_cc2530\iar路径里面的工程light_switch.eww(无线点灯)。我们的实验就是对它进行修改的。并点击application的light_switch.c用户的应用程序就是在里面的了 图4 BasicRF工程路径

8、二、Basic RF layer介绍及其工作过程: 在介绍Basic RF之前,来看看这个实验例程设计的大体结构,如图5所示Basic RF例程的软件设计框图就如一座建筑物。 图5 Hardwarelayer 放在最底,肯定是你实现数据传输的基础了。 HardwareAbstraction layer 它提供了一种接口来访问TIMER,GPIO,UART,ADC等。这些接口都通过相应的函数进行实现。 Basic RF layer 为双向无线传输提供一种简单的协议 Application

9、 layer 是用户应用层,它相当于用户使用Basic RF层和HAL的接口,也就是说我们通过在Application layer就可以使用到封装好的Basic RF和HAL的函数。 本例程的要求就是读者理解掌握Basic RF Basic RF layer简介 BasicRF由TI公司提供,它包含了IEEE 802.15.4标准的数据包的收发功能但并没有使用到协议栈,它仅仅是是让两个结点进行简单的通信,也就是说Basic RF仅仅是包含着IEEE 802.15.4标准的一小部分而已。其主要特点有: 1、不会自动加入协议、也不会自动扫描其他节点也没有组网指示灯(LED3)。 2

10、没有协议栈里面所说的协调器、路由器或者终端的区分,节点的地位都是相 等的。 3、没有自动重发的功能。 BasicRF layer为双向无线通信提供了一个简单的协议,通过这个协议能够进行数据的发送和接收。Basic RF还提供了安全通信所使用的CCM-64身份验证和数据加密,它的安全性读者可以通过在工程文件里面定义SECURITY_CCM 在Project->Option里面就可以选择,本次实验并不是什么高度机密,所以在SECURITY_CCM前面带X了。 图6 注释SECURITY_CCM Bas

11、ic RF的工作过程:启动、发射、接收 (请大家按照代码走) 启动 1、确保外围器件没有问题 2、创建一个basicRfCfg_t的数据结构,并初始化其中的成员,在basic_rf.h代码中可以找到 typedefstruct { uint16 myAddr; //16位的短地址(就是节点的地址) uint16 panId; //节点的PAN ID uint8 channel; //RF通道(必须在11-26之间) uint8 ackR

12、equest; //目标确认就置true #ifdef SECURITY_CCM //是否加密,预定义里取消了加密 uint8*securityKey; uint8*securityNonce; #endif } basicRfCfg_t; 3、调用basicRfInit()函数进行协议的初始化,在basic_rf.c代码中可以找到 uint8basicRfInit(basicRfCfg_t* pRfConfig) 函数功能:对Basic RF的数据结构初始化,设

13、置模块的传输通道,短地址,PAD ID。 发送 1、创建一个buffer,把payload放入其中。Payload最大为103个字节 2、调用basicRfSendPacket()函数发送,并查看其返回值 在basic_rf.c中可以找到 uint8basicRfSendPacket(uint16 destAddr, uint8* pPayload, uint8 length) destAddr 目的短地址 pPayload 指向发送缓冲区的指针 length 发送数据长度 函数功能:给目的短地址发送指定长度的数据,发送成功刚返回SUCCESS,失败则返回FAILE

14、D 接收 1、上层通过basicRfPacketIsReady()函数来检查是否收到一个新数据包 在basic_rf.c中可以找到 uint8basicRfPacketIsReady(void) 函数功能:检查模块是否已经可以接收下一个数据,如果准备好刚返回 TRUE 2、 调用basicRfReceive()函数,把收到的数据复制到buffer中。 代码可以在basic_rf.c中可以找到 uint8basicRfReceive(uint8* pRxData, uint8 len, int16* pRssi) 函数功能:接收来自Basic RF

15、层的数据包,并为所接收的数据和RSSI值 配缓冲区 如果能看懂启动、发射、接收就可以说你基本上能使用这个无线模块了。 看到这里大家就会觉得无线传输怎么会那么简单,真的只调用那几个函数就可以实现了吗? 是的,使用Basic RF实现无线传输只要学会使用这些函数就可以了。 但是具体的实现过程远没有那么简单的,大家可以到….\CC2530 BasicRF\docs里面查看CC2530_Software_Examples中的5.2.4 Basic RF operation这个章节的内容,里面详细介绍了Basic RF的初始化过程、Basic RF的发射过程、Basic RF的接收过程,具体

16、到每个层的功能函数。WeBee本来想将这部分的内容也详细的和读者们讲解清楚,但后来再仔细考虑还是不放上来了。因为它的具体实现过程大家看文档的那个章节就可以大概明白的了,另一方面,实验例程的模块化编程做得很好,大家只需要明白函数的作用,学会使用它就行了,至于它内部是怎么样一层一层的实现,我们也不用太过关心。 三、light_switch.c代码详解: 无论你看哪个实验的代码,首先要找的就是main函数。 从main函数开始:(部分已经屏蔽的代码并未贴出,详细的代码请看打开工程) 1. void main(void) 2. { 3.

17、 uint8 appMode = NONE; //不设置模块的模式 4. // Config basicRF basicRfConfig.panId= PAN_ID; //上面讲的Basic RF的启动中的 5. basicRfConfig.channel =RF_CHANNEL; 第2步初始化basicRfCfg_t 6. basicRfConfig.ackRequest =TRUE; 结构体的成员。 7. 8. #ifdef SECURI

18、TY_CCM //密钥安全通信,本例程不加密 9. basicRfConfig.securityKey =key; 10. #endif 11. 12. // Initalise boardperipherals 初始化外围设备 13. halBoardInit(); 14. halJoystickInit(); 15. 16. // Initalise hal_rf 硬件抽象层的rf进行初始化 17. if(halRfInit()= =FAILED) 18.

19、 { 19. HAL_ASSERT(FALSE); 20. } 21. 22. halLedSet(2); // 关 LED2(P1_1=1) 23. halLedClear(1); // 开LED1(P1_0=0) 24. 25. 26. appSwitch(); //节点为按键S1 P0_4 27. appLight(); //节点为指示灯LED1 P1_0 28. // Role is unde

20、fined. This code should not bereached 29. HAL_ASSERT(FALSE); 30. } 第22~23行:关闭WeBee底板的LED2,开LED1。由于WeBee设计的LED电路是低电平点亮的,与TI不同,更符合以前大家学习单片机的习惯,所以halLedSet()置1是使灯熄灭,不过这个没关系,关键是掌握怎么使用就可以了。 第26~27行:选择其中的一行,并把另外一行屏蔽掉;这两行重要啦,一个是实现发射按键信息的功能,另一个是接收按键信息并改变LED状态的功能。分别为Basic RF发射和接收。不同模块在烧写程序时选

21、择不同功能。 注意: 程序会在appSwitch(); 或者appLight();里面循环或者等待,不会执行到第29行。 接下来看看appSwitch()函数,它是如何实现数据发送的呢? 1. static void appSwitch() 2. { 3. #ifdef ASSY_EXP4618_CC2420 4. halLcdClearLine(1); 5. halLcdWriteSymbol(HAL_LCD_SYMBOL_TX,1); 6. #endif 7

22、 // InitializeBasicRF 8. basicRfConfig.myAddr =SWITCH_ADDR; 9. if(basicRfInit(&basicRfConfig)==FAILED){ 10. HAL_ASSERT(FALSE); 11. } 12. pTxData[0] = LIGHT_TOGGLE_CMD; 13. // Keep Receiver off when not needed to savepower 14. basicRfReceiveOff();

23、15. // Main loop 16. while (TRUE) //程序进入死循环 17. { 18. if(halButtonPushed()==HAL_BUTTON_1) //按键S1被按下 19. { 20. basicRfSendPacket(LIGHT_ADDR,pTxData,APP_PAYLOAD_LENGTH); 21. // Put MCU to sleep. It will wake up onjoystick interrupt 22. halIntOf

24、f(); 23. halMcuSetLowPowerMode(HAL_MCU_LPM_3); // Will turn on global 24. // interrupt enable 25. halIntOn(); 26. } 27. } 28. } 第3~6行:TI学习板上的液晶模块的定义,我们不用管他 第8~11行:Basic RF启动中的初始化,就是上面所讲的Basic RF启动的第3步 第12行:Basic RF发射第1步,把要发射的数据或者命令放入一个数据buffer,此处把灯状态改变的命

25、令LIGHT_TOGGLE_CMD放到pTxData中。 第14行:由于模块只需要发射,所以把接收屏蔽掉以降低功耗。 第18行:if(halButtonPushed()==HAL_BUTTON_1)判断是否S1按下,函数halButtonPushed()是halButton.c里面的,它的功能是:按键S1有被按动时,就回返回true,则进入 basicRfSendPacket(LIGHT_ADDR,pTxData, APP_PAYLOAD_LENGTH); 第20行:Basic RF发射第2步,也是发送数据最关键的一步,函数功能在前面已经讲述。

26、 basicRfSendPacket(LIGHT_ADDR, pTxData,APP_PAYLOAD_LENGTH)就是说:将LIGHT_ADDR、pTxData、APP_PAYLOAD_LENGTH的实参写出来就是basicRfSendPacket(0xBEEF ,pTxData[1] ,1 )把字节长度为1的命令,发送到地址0xBEEF 第22~23行:WeBee开发板暂时还没有joystick(多方向按键),不用理它先。 第25行:使能中断 发送的appSwitch()讲解完毕,接下来就到我们的接收appLight()函数了 1. static void

27、 appLight() 2. { 3. 7. #ifdef ASSY_EXP4618_CC2420 8. halLcdClearLine(1); 9. halLcdWriteSymbol(HAL_LCD_SYMBOL_RX,1); 10. #endif 11. // Initialize BasicRF 12. basicRfConfig.myAddr = LIGHT_ADDR; 13. if(basicRfInit(&basicRfConfig)==FAIL

28、ED) { 14. HAL_ASSERT(FALSE); 15. } 16. basicRfReceiveOn(); 17. // Main loop 18. while (TRUE) 19. { 20. while(!basicRfPacketIsReady()); 21. if(basicRfReceive(pRxData,APP_PAYLOAD_LENGTH, NULL)>0) { 22. if(pRxData[0] == LIGHT_TOGGLE_CMD)

29、 23. { 24. halLedToggle(1); 25. } 26. } 27. } 28. } 第7~10行:LCD内容暂时不用理它 第12~15行:Basic RF启动中的初始化,上面Basic RF启动的第3步 第16行:函数basicRfReceiveOn(),开启无线接收功能,调用这个函数后模块一直会接收,除非再调用basicRfReceiveOff()使它关闭接收。 第18行:程序开始进行不断扫描的循环 第19行:Basic RF接收的第1步,while(!basicRfP

30、acketIsReady()) 检查是否接收上层数据, 第20行:Basic RF接收的第2步,if(basicRfReceive(pRxData,APP_PAYLOAD_LENGTH, NULL)>0)判断否接收到有数据 第21行:if(pRxData[0] == LIGHT_TOGGLE_CMD)判断接收到的数据是否就是发送函数里面的LIGHT_TOGGLE_CMD 如果是,执行第22行 第22行:halLedToggle(1),改变Led1的状态。 实验操作: 第一步:打开….\CC2530 BasicRF\ide文件夹下面的工程 在light_switch.c里面找到ma

31、in函数,找到下面内容,把appLight(); 注释掉,下载到发射模块。 appSwitch(); //节点为按键S1 P0_4 //appLight(); //节点为指示灯LED1 P1_0 第二步:找到相同位置,这次把appSwitch();注释掉,下载到接收模块。 //appSwitch(); //节点为按键S1 P0_4 appLight(); //节点为指示灯LED1 P1_0 完成烧写后上电,按下发射模块的S1按键,可以看到接收模块的LED1被点亮。 拓展:或许你觉得点亮LED太没意思了,我们来点台灯。 图7 准备就绪 2012-9-6 14:47 上传 下载附件 (163.86 KB) 图8 无线点亮台灯 至此,无线点灯教程结束。快来点亮你们的台灯吧! 希望网蜂ZigBee能让你玩得开心。呵呵~下回见 点西嵌入式培训

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服