版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ZigBee串口應(yīng)用一、串口收發(fā)基礎(chǔ)實(shí)驗(yàn)二、ZigBee協(xié)議棧串口應(yīng)用擴(kuò)展實(shí)驗(yàn)實(shí)驗(yàn)課題:串口數(shù)據(jù)收發(fā)基礎(chǔ)實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模豪么谑瞻l(fā)數(shù)據(jù)試驗(yàn)步驟:ZigBee協(xié)議棧中串口通信的配置使用一個(gè)結(jié)構(gòu)體來實(shí)現(xiàn),該結(jié)構(gòu)體為hal_UARTCfg_t,不必關(guān)心該結(jié)構(gòu)體的具體定義形式,只需要對(duì)其功能有個(gè)了解,該結(jié)構(gòu)體將串口初始化的參數(shù)集合在一起,只需要初始化各個(gè)參數(shù)即可最后使用HalUARTOpen()函數(shù)對(duì)串口進(jìn)行初始化,該函數(shù)將halUARTCfg_t類型的結(jié)構(gòu)體變量作為相關(guān)參數(shù)回調(diào)函數(shù):通過指針(函數(shù)地址)調(diào)用的函數(shù)。如果把函數(shù)的地址作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)通過這個(gè)指針調(diào)用它所指向的函數(shù)時(shí),稱為函數(shù)的回調(diào)。一、串口收發(fā)基礎(chǔ)實(shí)驗(yàn)使用串口的基本步驟:①初始化串口,包括設(shè)置波特率、中斷等;②向發(fā)送緩沖區(qū)發(fā)送數(shù)據(jù)或者從接收緩沖區(qū)讀取數(shù)據(jù)。串口工作原理剖析在ZigBee協(xié)議棧中,halUARTCfg_t結(jié)構(gòu)體是如何定義的;串口是如何初始化的;發(fā)送給串口的數(shù)據(jù)時(shí)如何接受的;串口是如何向PC機(jī)發(fā)送數(shù)據(jù)的。這些問題涉及如下三個(gè)函數(shù)……ZigBee協(xié)議棧中提供的與串口操作有關(guān)的三個(gè)函數(shù)為(可在zmain.c和hal_uart.c中查看相關(guān)函數(shù))uint8HalUARTOpen(uint8halUARTCfg_t*config);uint16HalUARTRead(uint8port,uint8*buf,uint16len);Uint16HalUARTWrite(uint8prot,uint*buf,uint16len);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"http://包含頭文件constcId_tGenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS]={GENERICAPP_CLUSTERID};constSimpleDescriptionFormat_tGenericApp_SimpleDesc={GENERICAPP_ENDPOINT,GENERICAPP_PROFID,GENERICAPP_DEVICEID,GENERICAPP_DEVICE_VERSION,GENERICAPP_FLAGS,GENERICAPP_MAX_CLUSTERS,(cId_t*)GenericApp_ClusterList,0,(cId_t*)NULL};endPointDesc_tGenericApp_epDesc;byteGenericApp_TaskID;byteGenericApp_TransID;/*typedefstruct{byteendPoint;byte*task_id;SimpleDescriptionFormat_t*simpleDesc;afNetworkLatencyReq_tlatencyReq;}endPointDesc_t;*/voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pckt);voidGenericApp_SendTheMessage(void);//UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events);staticvoidrxCB(uint8port,uint8event);//任務(wù)初始化函數(shù)voidGenericApp_Init(bytetask_id){
halUARTCfg_tuartConfig;
GenericApp_TaskID=task_id;GenericApp_TransID=0;GenericApp_epDesc.endPoint=GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id=&GenericApp_TaskID;GenericApp_epDesc.simpleDesc=(SimpleDescriptionFormat_t*)&GenericApp_SimpleDesc;GenericApp_epDesc.latencyReq=noLatencyReqs;afRegister(&GenericApp_epDesc);
uartConfig.configured=TRUE;uartConfig.baudRate=HAL_UART_BR_115200;uartConfig.flowControl=FALSE;uartConfig.callBackFunc=rxCB;HalUARTOpen(0,&uartConfig);//串口初始化}//事件處理函數(shù)UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events){return0;//本實(shí)驗(yàn)沒有進(jìn)行事件處理}staticvoidrxCB(uint8port,uint8event){unsignedcharuartbuf[128]="";HalUARTRead(0,uartbuf,16);//調(diào)用函數(shù),從串口讀取數(shù)據(jù)并將其放在uartbuf數(shù)組中
if(osal_memcmp(uartbuf,"",16))//使用osal_memcmp()判斷接收到的數(shù)據(jù)是否是“”,返回TRUE,執(zhí)行HalUARTWrite()函數(shù)
{HalUARTWrite(0,uartbuf,16);//調(diào)用函數(shù)將接收到的字符輸出到串口
}}//ZigBee協(xié)議棧使用條件編譯,在GenericApp-Coordinator工程上右鍵單擊,options/C/C++Compiler在Definedsymbols:下拉框中添加HAL_UART=TRUE,點(diǎn)擊OK即可。二、ZigBee協(xié)議棧串口應(yīng)用擴(kuò)展實(shí)驗(yàn)實(shí)驗(yàn)課題:ZigBee協(xié)議棧串口應(yīng)用擴(kuò)展實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模豪么谑瞻l(fā)數(shù)據(jù)實(shí)驗(yàn)原理:協(xié)調(diào)器建立ZigBee無線網(wǎng)絡(luò),終端節(jié)點(diǎn)自動(dòng)加入該網(wǎng)絡(luò)中,然后終端節(jié)點(diǎn)周期性地向協(xié)調(diào)器發(fā)送字符串“EndDevice”,協(xié)調(diào)器收到該字符串后,通過串口將其輸出到用戶PC機(jī)。EndDeviceEndDeviceZigBee網(wǎng)絡(luò)EndDeviceCoordinatorRS232PC機(jī)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"constcId_tGenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS]={GENERICAPP_CLUSTERID};constSimpleDescriptionFormat_tGenericApp_SimpleDesc={GENERICAPP_ENDPOINT,GENERICAPP_PROFID,GENERICAPP_DEVICEID,GENERICAPP_DEVICE_VERSION,GENERICAPP_FLAGS,GENERICAPP_MAX_CLUSTERS,(cId_t*)GenericApp_ClusterList,0,(cId_t*)NULL};endPointDesc_tGenericApp_epDesc;byteGenericApp_TaskID;byteGenericApp_TransID;//unsignedcharuartbuf[128];//將這一行注釋掉/*typedefstruct{byteendPoint;byte*task_id;SimpleDescriptionFormat_t*simpleDesc;afNetworkLatencyReq_tlatencyReq;}endPointDesc_t;*/voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pckt);voidGenericApp_SendTheMessage(void);//staticvoidrxCB(uint8port,uint8event);//將這一行注釋掉//任務(wù)初始化函數(shù)voidGenericApp_Init(bytetask_id){halUARTCfg_tuartConfig;
GenericApp_TaskID=task_id;GenericApp_TransID=0;GenericApp_epDesc.endPoint=GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id=&GenericApp_TaskID;GenericApp_epDesc.simpleDesc=(SimpleDescriptionFormat_t*)&GenericApp_SimpleDesc;GenericApp_epDesc.latencyReq=noLatencyReqs;afRegister(&GenericApp_epDesc);
uartConfig.configured=TRUE;uartConfig.baudRate=HAL_UART_BR_115200;uartConfig.flowControl=FALSE;
uartConfig.callBackFunc=NULL;//置空,即無需回調(diào)函數(shù)
HalUARTOpen(0,&uartConfig);//串口初始化}//事件處理函數(shù)UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events){afIncomingMSGPacket_t*MSGpkt;if(events&SYS_EVENT_MSG){MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);while(MSGpkt){switch(MSGpkt->hdr.event){caseAF_INCOMING_MSG_CMD:
GenericApp_MessageMSGCB(MSGpkt);//完成對(duì)接收數(shù)據(jù)的處理break;default:break;}
osal_msg_deallocate((uint8*)MSGpkt);MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);}return(events^SYS_EVENT_MSG);}return0;}//當(dāng)協(xié)調(diào)器收到終端節(jié)點(diǎn)發(fā)送來的數(shù)據(jù)后,首先使用osal_msg_receive()函數(shù),從消息隊(duì)列接收到消息,然后調(diào)用GenericApp_//MessageMSGCB()函數(shù)中將接收到的數(shù)據(jù)通過串口發(fā)送給PC機(jī)voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){unsignedcharbuffer[10]="";switch(pkt->clusterId){caseGENERICAPP_CLUSTERID:osal_memcpy(buffer,pkt->cmd.Data,10);HalUARTWrite(0,buffer,10);break;}}//使用osal_memcpy()函數(shù),將接收到的數(shù)據(jù)拷貝到buffer數(shù)組中,然后就可以將該數(shù)據(jù)通過串口發(fā)送給PC機(jī)EndDevice.c
Osal_start_timerEx()函數(shù)原型如下:
調(diào)用uint8osal_start_timerEx(uint8taskID,uint16event_id,uint16timeout_value)
周期性發(fā)送(任務(wù),事件,時(shí)間)#include"OSAL.h"#include"AF.h"#include"ZDApp.h"#include"ZDObject.h"#include"ZDProfile.h"#include<String.h>#include"Coordinator.h"http://使用該頭文件的宏定義#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"#defineSEND_DATA_EVENT0x01constcId_tGenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS]={GENERICAPP_CLUSTERID};//簡(jiǎn)單設(shè)備描述符結(jié)構(gòu)體常量constSimpleDescriptionFormat_tGenericApp_SimpleDesc={GENERICAPP_ENDPOINT,GENERICAPP_PROFID,GENERICAPP_DEVICEID,GENERICAPP_DEVICE_VERSION,GENERICAPP_FLAGS,0,(cId_t*)NULL,GENERICAPP_MAX_CLUSTERS,(cId_t*)GenericApp_ClusterList
};//初始化端口描述符endPointDesc_tGenericApp_epDesc;//簡(jiǎn)單節(jié)點(diǎn)描述符byteGenericApp_TaskID;//任務(wù)優(yōu)先級(jí)byteGenericApp_TransID;//數(shù)據(jù)發(fā)送序列號(hào)devStates_tGenericApp_NwkState;//節(jié)點(diǎn)狀態(tài)保存變量枚舉型記錄設(shè)備狀態(tài)//定義結(jié)構(gòu)體/*typedefstruct{byteendPoint;byte*task_id;SimpleDescriptionFormat_t*simpleDesc;afNetworkLatencyReq_tlatencyReq;}endPointDesc_t;*///聲明函數(shù)voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pckt);voidGenericApp_SendTheMessage(void);int8readTemp(void);/定義任務(wù)初始化函數(shù)voidGenericApp_Init(bytetask_id){GenericApp_TaskID=task_id;GenericApp_TransID=0;//累加數(shù)據(jù)發(fā)送序列號(hào),可用于計(jì)算丟包率
GenericApp_NwkState=DEV_INIT;//設(shè)備狀態(tài)初始化為DEV_INIT表示該節(jié)點(diǎn)沒有連接到ZigBee網(wǎng)絡(luò)
GenericApp_epDesc.endPoint=GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id=&GenericApp_TaskID;GenericApp_epDesc.simpleDesc=(SimpleDescriptionFormat_t*)&GenericApp_SimpleDesc;GenericApp_epDesc.latencyReq=noLatencyReqs;afRegister(&GenericApp_epDesc);//節(jié)點(diǎn)描述符注冊(cè)}//以下是件處理函數(shù)UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events){afIncomingMSGPacket_t*MSGpkt;if(events&SYS_EVENT_MSG){MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);while(MSGpkt){switch(MSGpkt->hdr.event){/*caseAF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB(MSGpkt);break;*/caseZDO_STATE_CHANGE:GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);
if(GenericApp_NwkState==DEV_END_DEVICE)//對(duì)節(jié)點(diǎn)設(shè)備類型進(jìn)行判斷是否是終端節(jié)點(diǎn)DEV_END_DEVICE
{
osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);}break;default:break;}//如果事件SEND_DATA_EVENT發(fā)生,則events&SEND_DATA_EVENT非零,條件成立則執(zhí)行GenericApp_SendTheMessage()//函數(shù),向協(xié)調(diào)器發(fā)送數(shù)據(jù),發(fā)送完數(shù)據(jù)后再定時(shí)1s,同時(shí)清除SEND_DATA_EVENT事件。
osal_msg_deallocate((uint8*)MSGpkt);//釋放消息在堆中的內(nèi)存
MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);}return(events^SYS_EVENT_MSG);}
if(events&SEND_DATA_EVENT){GenericApp_SendTheMessage();
osal_start_timerEx(GenericApp_TaskID,SEND_DATA_EVENT,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新人教版七年級(jí)數(shù)學(xué)上冊(cè)1.2.4《 絕對(duì)值》(第2課時(shí))聽評(píng)課記錄1
- 七年級(jí)歷史下冊(cè)第三單元明清時(shí)期:統(tǒng)一多民族國(guó)家的鞏固與發(fā)展20清朝君主專制的強(qiáng)化聽課評(píng)課記錄(新人教版)
- 蘇科版數(shù)學(xué)八年級(jí)上冊(cè)1.3《探索三角形全等的條件》聽評(píng)課記錄6
- 八年級(jí)數(shù)學(xué)上冊(cè) 14.1 整式的乘法 14.1.4 整式的乘法 第3課時(shí) 多項(xiàng)式乘以多項(xiàng)式聽評(píng)課記錄 新人教版
- 湘教版數(shù)學(xué)七年級(jí)下冊(cè)4.4《平行線的判定方法1》聽評(píng)課記錄
- 五年級(jí)上冊(cè)數(shù)學(xué)聽評(píng)課記錄《1.1 精打細(xì)算》(2)-北師大版
- 湘教版數(shù)學(xué)九年級(jí)上冊(cè)《小結(jié)練習(xí)》聽評(píng)課記錄6
- 人民版道德與法治九年級(jí)下冊(cè)第一課第1課時(shí)《“地球村”形成了》聽課評(píng)課記錄
- 人教部編版歷史八年級(jí)下冊(cè):第19課《社會(huì)生活的變遷》聽課評(píng)課記錄4
- 一年級(jí)《聽》評(píng)課記錄
- 股票基礎(chǔ)知識(shí)(入市必讀)-PPT
- eNSP簡(jiǎn)介及操作課件
- 公文與公文寫作課件
- 車削成形面和表面修飾加工課件
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第七章運(yùn)動(dòng)技能的協(xié)調(diào)控制
- 節(jié)后復(fù)工吊籃驗(yàn)收表格
- 基于振動(dòng)信號(hào)的齒輪故障診斷方法研究
- 醫(yī)療器械分類目錄2002版
- DB11_T1713-2020 城市綜合管廊工程資料管理規(guī)程
- 氣管套管滑脫急救知識(shí)分享
- 壓縮空氣系統(tǒng)管道阻力計(jì)算
評(píng)論
0/150
提交評(píng)論