![示例程序和2組網(wǎng)實驗7.串口透傳_第1頁](http://file4.renrendoc.com/view/2f27e0df134dd8865d9ad332f3842303/2f27e0df134dd8865d9ad332f38423031.gif)
![示例程序和2組網(wǎng)實驗7.串口透傳_第2頁](http://file4.renrendoc.com/view/2f27e0df134dd8865d9ad332f3842303/2f27e0df134dd8865d9ad332f38423032.gif)
![示例程序和2組網(wǎng)實驗7.串口透傳_第3頁](http://file4.renrendoc.com/view/2f27e0df134dd8865d9ad332f3842303/2f27e0df134dd8865d9ad332f38423033.gif)
![示例程序和2組網(wǎng)實驗7.串口透傳_第4頁](http://file4.renrendoc.com/view/2f27e0df134dd8865d9ad332f3842303/2f27e0df134dd8865d9ad332f38423034.gif)
![示例程序和2組網(wǎng)實驗7.串口透傳_第5頁](http://file4.renrendoc.com/view/2f27e0df134dd8865d9ad332f3842303/2f27e0df134dd8865d9ad332f38423035.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
7.串口透傳實驗串口透傳,我來解釋一下,電腦A和電腦B通過串口相連,相互發(fā)送信息,現(xiàn)在電腦A和B連接ZigBee模塊,再用串口收發(fā)信息,ZigBee的作用就相當(dāng)于把有線信號串口透傳!圖1所示:1實現(xiàn)平臺:WeBeeCC2530模塊及功能底板各兩塊(一個協(xié)調(diào)器,一個終端圖實驗現(xiàn)象:PCZigbee實驗講解:實驗依然使用我們熟悉的SampleApp.eww工程來進(jìn)行。面我們曾做過串口實驗和數(shù)據(jù)無線傳輸,這次實驗也算是前面2個實驗的一個結(jié)合。不過協(xié)議棧的串口接收有1、ZigBeePC2、ZigBeeZigBeePC我們打開Z- SampleApp.eww工程。這次實驗我們基于協(xié)議棧的;SampleApp圖打開工程后,我們可以看到上一節(jié)說到workspace Zmain和App。這里我們主要用到App,這也是用戶自己添加自己代碼的地方。主要在SampleApp.c和SampleApp.h中就可以了。圖1、ZigBeePCCC2530給PC機(jī)串口發(fā)信息,還沒接觸過PC機(jī)發(fā)送給CC2530,現(xiàn)在我們就來完成這個任務(wù)。MT_UART.C了。我們在這個文件里找到串口初始化函數(shù)voidMT_UartInit(),找到下面代碼:#ifdefined(ZTOOL_P1)|defined(ZTOOL_P2) #elifdefined(ZAPP_P1)|defined(ZAPP_P2) ZTOOL_P1,故MT_UartProcessZToolData,進(jìn)入這個函數(shù)定義。下邊是對函數(shù)關(guān)鍵地方的解釋。 *@brief|SOP|Data FCS 0- ParsesthedataanddetermineeitherisSPIorjustsimplyserial thensendthedatatocorrect ce(MTor port-UART -Eventthatcausesthe /*這個函數(shù)很長,具體說來就是把串口發(fā)來的數(shù)據(jù)包進(jìn)行打包,校驗,生成一個消息,發(fā)MTZTOOL通過串口來溝通 DataLength,CM0,CM1,Datapayload, CM1:命令高字節(jié);(ZTOOLMT)Datapayload:數(shù)據(jù)幀具體的數(shù)據(jù),這個長度是可變的,但是要和 DataLengthDatapayload也就是說,如果PC機(jī)想通過串口發(fā)送信息給CC2530,由于是使用默認(rèn)的串口函數(shù),所以您必須按上面的格式發(fā)送,否則CC2530是收不到任何東西的,這也是我們大家明顯,我們需要的是CC2530能直接接收到串口信息,然后一成不變的發(fā)成出去,相信你在聊QQ的時候也不希望在每句話前面加FE的特定字符吧,而且還要自己計算校驗碼于是我們就來個偷龍轉(zhuǎn)鳳,把改函數(shù)換成我們自己的串口處理函數(shù),是不是很酷?當(dāng) …………while/*查詢緩沖區(qū)讀信息,也成了這里信息是否接收完的標(biāo)志{,/*1*/switch(state),/*用上狀態(tài)機(jī)了{(lán)case開始發(fā)送才能進(jìn)入下一個狀態(tài),不 在ifchMT_UART_SOF)/*MT_UART_SOF0xFE開始發(fā)送才能進(jìn)入下一個狀態(tài),不 在里轉(zhuǎn)圈/*Allocatememoryforthedata /*分配內(nèi)存空間ifpMsg*如果分配成功{/*Fillupwhatwecan CMD_SERIAL_MSG;,很有用*/pMsg->msg=(uint8*)(pMsg+1);/*定位數(shù)據(jù)位置…………/*Makesureit'scorrecttmp=MT_UartCalcFCS((uint8*)&pMsg->msg[0MT_RPC_FRAME_HDR_SZLEN_Token);if(tmp==FSC_Token)/*數(shù)據(jù)校驗*/{/*OSAL層,很很重要}{/*deallocatethemsg*/osal_msg_deallocate((uint8*)pMsg);/*清申請的內(nèi)存空間}/*Resetthestatesendordiscardthebuffersatthispoint*/state=SOP_STATE;/*狀態(tài)機(jī)一周期完成*/………1、接收串口數(shù)據(jù),判斷起始碼是否 2pMsg3pMsg4OSAL5、釋放數(shù)據(jù)包內(nèi)存我們要做的是簡化再簡化。流程變成1、接收到數(shù)據(jù)2pMsg3OSAL4、釋放內(nèi)參考程序如下{uint8flag=0,i,j=0;//flag是判斷有沒有收到數(shù)據(jù),juint8 //buffer128 while(Hal_UART_RxBufLen(port))//檢測串口數(shù)據(jù)是否接收完{HalUARTReadport,&buf[j1);//buf //已經(jīng)從串口接收到信} //已經(jīng)從串口接收到信 /*Allocatememoryforthedata//分配內(nèi)存空間,為機(jī)構(gòu)體內(nèi)容+數(shù)據(jù)內(nèi)容 個記錄長度的數(shù) pMsg->msguint8*)(pMsg+1);// //從第二個開始記錄數(shù) //登記任務(wù),發(fā)往/*deallocatethemsg}27.看代碼可以知道,數(shù)據(jù)包中數(shù)據(jù)部分的格式是datalen+到這里,數(shù)據(jù)接收的處理函數(shù)已經(jīng)完成了,接下來我們要做的就是,怎么在任務(wù)中處理這個包內(nèi)容呢?很簡單,因為串口初始化是在SampleApp中進(jìn)行的,任務(wù)號也是SampleApp的ID,所以當(dāng)然是在SampleApp.C里面進(jìn)行了。在SampeApp.C找到任務(wù)處理函數(shù):unt16Samplepp_ProcessEvent(unt8task_d,unt16events),加入下面代碼{ ingMSGPacket_t(void)task_id;//Intentionallyunreferencedparameterif(events&SYS_EVENT_MSG{ while(MSGpkt){{,caseCMD_SERIAL_MSG://串口收到數(shù)據(jù)后由MT_UART層傳遞過來的數(shù)據(jù)編譯時不定義MT相關(guān)內(nèi)容,, 號CMD_SERIAL_MSG就會被登記,便進(jìn)case執(zhí)行SampleApp_SerialCMD((mtOSALSerialData_t*)MSGpkt);大家是不是很奇怪怎么在協(xié)議棧里找不到這個函數(shù),當(dāng)然了,我們那邊只把他打包了,然后登記任務(wù),這個包是我們自己的,想怎么處理當(dāng)然由自己來搞掂。大家應(yīng)該想到這個函數(shù)應(yīng)該要把信息無線發(fā)送出下面貼上參考代碼,用戶也可以自己完成voidSampleApp_SerialCMD(mtOSALSerialData_t{uint8i,len,*str=NULLlenstr=cmdMsg->msg;//指向數(shù)據(jù)開len=*str;//msg1/********打印出串口接收到的數(shù)據(jù),用于提示 HalUARTWrite(0,"\n",1 HalUARTWrite(0,"\n",1);//換 /*******發(fā)送出去if(AF_DataRequest(&SampleApp_Periodic_DstAddr,_CLUSTERID,// str,//{}{//Erroroccurredinrequestto}23. 這個自己定義 ID,用于接收方判別:如下圖到這里,CC2530從串口接收到信息到轉(zhuǎn)發(fā)出去已經(jīng)完成了,我們可以先下載程序Zigbee節(jié)點(diǎn),然后可以看到發(fā)什么都打印出來提示了。也就CMD_SERIAL_MSG:和voidSampleApp_SerialCMD(mtOSALSerialData_t*cmdMsg5feel圖2、ZigBeeZigBeePCSampleAppcasevoid ingMSGPacket_t*pkt{uint8switch(pkt->clusterId{ HalUARTWrite(0,&pkt->cmd.Data[i+1],1);//發(fā)給PC機(jī)HalUARTWrite(0,"\n",1); //回車換行break;}}如果想進(jìn)一步節(jié)省資源,可以將函數(shù)uint16SampleApp_ProcessEvent(uint8task_id,uint16events)里面除了這個透傳的case以外的case判斷
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專賣店裝修項目承攬合同
- 倉儲物流行業(yè)居間存款協(xié)議
- 辦公區(qū)翻新合同
- 物業(yè)人員疏散方案
- 通遼管道非開挖施工方案
- 2025年度安全產(chǎn)品銷售代表市場拓展合同
- 大數(shù)據(jù)四下數(shù)學(xué)試卷
- 買鋼筋合同范例
- 完善中小學(xué)體育教師隊伍建設(shè)的策略與實施途徑
- 臨時聘用廚師合同范例
- 2024年江蘇省公務(wù)員錄用考試《行測》題(A類)
- 工業(yè)自動化生產(chǎn)線操作手冊
- 2024年10月時政100題(附答案)
- 《走進(jìn)神奇》說課稿
- 江蘇省無錫市2024年中考數(shù)學(xué)試卷(含答案)
- 2024年內(nèi)蒙古中考語文試卷五套合卷附答案
- 2024年保密知識測試試題及答案(奪冠)
- 湖南2024年湖南省衛(wèi)生健康委直屬事業(yè)單位招聘276人筆試歷年典型考題及考點(diǎn)附答案解析
- SF-36生活質(zhì)量調(diào)查表(SF-36-含評分細(xì)則)
- 五年級下冊語文教案 學(xué)習(xí)雙重否定句 部編版
- 不需公證的遺囑范文
評論
0/150
提交評論