“飞比”Zigbee模块CC2530开发板学习教程_第1页
“飞比”Zigbee模块CC2530开发板学习教程_第2页
“飞比”Zigbee模块CC2530开发板学习教程_第3页
“飞比”Zigbee模块CC2530开发板学习教程_第4页
“飞比”Zigbee模块CC2530开发板学习教程_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

n|x停止位COM1T38401:n|x停止位COM1T38401:▼无HOFT8▼1T串口波特率校验位数据位“飞比”Zigbee论坛CC2530开发板学习教程(四)--串口通讯之SerialAppRS232,也称标准串口,是目前最常用的一种串行通讯接口,因其成本低廉,应用广泛而被很多嵌入式系统所采用。在CC2530开发板上,由于LCD、LED等基本外接显示信息量有限,同时串口也方便了与其他系统进行通讯,所以它无疑成为了开发者最重要的一个调试手段。本章的重点,就是以Zstack2007中提供的例程一SerialApp为基础,对CC2530的串口部分进行详细的介绍。[注:本文源自--“飞比”Zigbee论坛,为尊重劳动者成果,如需转载请保留此行,并通知作者]例3.基于Zstack2007的串口通讯在之前的“奥特曼Zigbee读书日记(三)和(四)”中,其实已经利用TI提供的基本库,从零开始,一步步地搭建了一个“老王”和“老张”打招呼的例程,但是由于他们俩说的所有话都是程序规定的,所以他们只能简单地说两句话“吃了吗”和“吃了”,然后不停地重复,我们中国人自然没有这么呆啦~~在本实验中,看看中国小伙是如何“远程”泡美国MM的~~~在这个场景中,“中国小伙”通过QQ,向美国MM申请加为好友(申请绑定),在美国MM验证后(绑定成功)后,双方你一句我一句地就聊起来了(串口终端1〈二二〉Zigbee节点1〈二二〉Zigbee节点2<==>串口终端2)。如下图(1)所示:串口调试助手SCoMAssistantV2.1CNShiiai:HiCutE,whichuity:±reuin?CNShuai:Oh,th注£averynicepla匚e!CNShuai:I''dliket口havesomephot口吕>:>£you.>::±tlI?eeuniceu£y^i.CNShiiaieeuniceu£y^i.CNShuai:Oh,ieeobeautifolphoggo0dview,tLiindsornedogand.prettygirl:;ICNShuai:I''mfomBeiiinE.Wh;m三yom-duEsruiiTie?串口调试助手SCoMAssistantV2.1串口波特率校验位数据位停止位|C0M4〒|

|3840C ||无HOF二|

p

关闭串口港空接收区I接呃停止显示N自动涪空厂十六进制显示I串口调试助手SCoMAssistantV2.1串口波特率校验位数据位停止位|C0M4〒|

|3840C ||无HOF二|

p

关闭串口港空接收区I接呃停止显示N自动涪空厂十六进制显示I保存显示数据I画C:\COMDATArsrsrsrsrsrsCrLtE:I:iniinS:±tlFr:±TLcieco.匚口Th:±TLkyou,iti*.Ciitm:Em....Well,Igiiessyou匚:王n.CutE:Gmtthem.Mydug:drulme..Cutm:Th:±TLk:5,I:inisohappythatyoulikethem.Whererufrum'?Cute:...□X淸空重埴|发送的字符/漏CNShuai:..十六进制发送年动览谨|厂自动发送凋期改变后重选)自动发送周期:阿厂毫秒占STATUS:COM4OPENED‘选择发送文件|[还没有选挥文件籬丈件MAILWEBEX:263TX:416CounterEESETwSTUDIO图(1)注:“日记”中的例程的串口通讯部分其实是抛开Zstack的串口程序而重新写的,但实际上Zstack已经做过这部分工作了,在本例程中,我们不对ZStack做任何修改,只是分析下其程序功能与原理。读者可以在安装ZStack-CC2530-2.3.0-1.4.0后,在C:\TexasInstruments\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Utilities\SerialApp\CC2530DB目录下,打开SerialApp这个工程进行实验。[一]程序功能实现两个节点之间的绑定与通讯,同时每个节点可与其“上位机”一一所边接的PC串口终端,进行通讯。示意如下:SoC(e.g.PC}~CPUDMARAMRFHypertermnalSoC(e.g.PC}~CPUDMARAMRFHypertermnal(e.g.PC)UARTSignals:

RX,TX;RTSUARTSignals:

RX,TX;RTS;CTSRX,TX,RTS,CTSI^^WWW.FEIBIT.COM图(2)[二]操作说明分别将Coordinator与EndDevice程序编译、下载至两套开发板后,按Reset键后,屏幕显示如下:图3)(图4)如果显示信息如上图所示,则表示网络初始化成功。此时,按下任意一个节点的摇杆(Joystick)右键进行绑定申请,然后立即按下另外一个节点的Joystick右键进行绑定确认。此时,两个节点的红色LED灯一一LED1,同时点亮,表示绑定成功,可以开始通信。打开串口调试助手(注:可以在一台电脑上打开两个,或者在两台电脑上分别打开),分别对两个节点的串口进行设置,具体设置请参见图(1)中左边的设置,其中:串口的名称请在“设备管理器”中查找,波特率设为38400。至此,准备工作已经做好。然后在任何一个串口终端上发送数据,此时另外一个终端即可接收此数据,即完成了一个(串口终端l==〉Zigbee节点1==〉Zigbee节点2==>串口终端2)的数据传输过程。另外,在整个过程中,异常情况的LED显示:LED1闪烁,表示在规定的绑定申请时间内,无设备对其进行绑定确认LED3闪烁,表示连接节点丢失,如对方节点产生掉电等异常情况[三]系统解析本例程采用的是0SAL的系统,其原理读者可参考如下几篇文章,如有疑问请跟贴进行讨论:奥特曼Zigbee读书日记(二)--0SAL系统框架专题(作者:outman)深入浅出Z-Stack20060SAL多任务资源分配机制(作者:cyril3)我心目中的Zstack0SAL&Message(作者:ssls18years)在此不做赘述,仅对此例程中的按键处理过程进行简单的讲解:申请绑定与绑定确认首先,由某节点触发Joystick右键,即HAL_KEY_SW_2,对如何通过查询电平、确认按键事件,并调用相应的按键处理函数的过程有疑问的读者请参见上述文章。在按键处理函数--SerialApp_HandleKeys中,if(keys&HAL_KEY_SW_2){HalLedSet(HAL_LED_4,HAL_LED_MODE_OFF);//InitiateanEndDeviceBindRequestforthemandatoryendpointtxAddr.addrMode=Addr16Bit;txAddr.addr.shortAddr=0x0000;//CoordinatorZDP_EndDeviceBindReq(&txAddr,NLME_GetShortAddr(),SerialApp_epDesc.endPoint,SERIALAPP_PROFID,SERIALAPP_MAX_CLUSTERS,(cId_t*)SerialApp_ClusterList,SERIALAPP_MAX_CLUSTERS,(cId_t*)SerialApp_ClusterList,FALSE);}此处发起绑定请求,等待其他节点应答,而如果有一个节点也按了Joystick右键,同样发出了绑定请求,则本节点收到一个End_Device_Bind_rsp的信息,并在SerialApp_ProcessZDOMsgs函数中进行了处理,如下代码://@fnSerialApp_ProcessZDOMsgs()*@briefProcessresponsemessages*@paramnone**@returnnone*/staticvoidSerialApp_ProcessZDOMsgs(zdoIncomingMsg_t*inMsg){switch(inMsg->clusterID){caseEnd_Device_Bind_rsp:if(ZDO_ParseBindRsp(inMsg)==ZSuccess){//LightLEDHalLedSet(HAL_LED_4,HAL_LED_MODE_ON);break;}}至此,中国小伙已经成功加美国MM为好友了~接下来的事,大家想必都知道了。。。看看他们是怎么发送信息,怎么接收信息的吧?“串口终端1”的数据,如何被“节点1”所接收,并且发送出去的?串口数据是由哪层来负责的呢?一一HAL。。。恩,猜对了。但这个肯定不是靠猜的,其中的过程就不讲了。让我们从主循环(osal_start_system)的Hal_ProcessPoll函数找下去(用sourceinsight的同学可以用Ctrl+),Hal_ProcessPoll==>HalUARTPoll==>HalUARTPollDMA这个HalUARTPollDMA函数里最后有这样一句话:dmaCfg.uartCB(HAL_UART_DMA-l,evt);对dmaCfg.uartCB这个函数进行了调用,ctrl/搜索这个dmaCfg.uartCB,发现SerialApp_Init函数有两句话:uartConfig.callBackFunc =SerialApp_CallBack;HalUARTOpen(SERIAL_APP_PORT,&uartConfig);此处将dmaCfg.uartCB这个函数注册成为SerialApp_CallBack,也就是说SerialApp_CallBack函数每次循环中被调用一次,对串口的内容进行查询,如果DMA中接收到了数据,则调用HalUARTRead,将DMA数据读至数据buffer并通过AF_DataRequest函数发送出去,注意:送出去的信息的CLUSTERID(信息簇ID)号为SERIALAPP_CLUSTERID1。总结一下这个过程:串口数据==〉DMA接收==〉主循环中通过SerialApp_CallBack查询==>从DMA获取并发送到空中。节点2在收到空中的信号后,如何传递给与其相连的串口终端?节点2从空中捕获到信号后,在应用层上首先收到信息的就是SerialApp_ProcessEvent这个函数了,它收到一个AF_INCOMING_MSG_CMD的事件,并通知SerialApp_ProcessMSGCmd,执行以下代码switch(pkt-〉clusterId){//Amessagewithaserialdatablocktobetransmittedontheserialport.caseSERIALAPP_CLUSTERID1://Transmitthedataontheserialport.if(HalUARTWrite(SERIAL_APP_PORT,pkt-〉cmd.Data+1,(pkt-〉cmd.DataLength-1)))//SavefornextincomingmessageSerialApp_RxSeq=seqnb;stat=OTA_SUCCESS;}这样就将从空中获取到的信息,传给了串口终端2――美国MM,第一句话终于传到美国了~至于后面的事情嘛,我们就不关注了,看小伙自己的造化了~~~另外,此例程中还有一种模式,就是这个中国小伙可以按条件搜索(Joystick左键,profileID与clusterID相同者响应),但这种条件找出的MM都比较有个性――只接受你的信息,但不给你发。想想也是,明显没诚意嘛~这种模式的细节,本教程不再涉及,有兴趣的读者可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论