日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IAR软件ZigBee物联网

發(fā)布時(shí)間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IAR软件ZigBee物联网 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ZigBee

單片機(jī):cc2530

協(xié)議棧:ZStack-CC2530-2.5.1a

開發(fā)工具:IAR

1.軟件配置

(1)配置單片機(jī)

第一步:右擊工程名,在快捷菜單選擇Options...,打開Options for node ‘ex1’對話框

第二步:選擇General Options列表項(xiàng),單擊右邊的Target標(biāo)簽,顯示的頁面為配置單片機(jī)的內(nèi)容

第三步:單擊Device后面的按鈕,在彈出的對話框中選擇CC2530F256.i51文件,文件位于C:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation\8051\config\devices\Texas Instruments文件夾中

第四步:在CPU core 下拉列表框中選擇Plain列表項(xiàng),其他參數(shù)默認(rèn)

(2)配置連接器

第一步:右擊工程名,在快捷菜單選擇Options...,打開Options for node ‘ex1’對話框,選擇Linker列表項(xiàng),然后選擇右邊Config標(biāo)簽

第二步:在Config頁面中勾選Linker configuration file框架中的Override default復(fù)選框,單擊框架中的..按鈕,彈出對話框,選擇lnk51ew_cc2530F256_banked.xcl文件,位于C:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation\8051\config\devices\Texas Instruments文件夾中

第三步:其他項(xiàng)的配置選擇默認(rèn)值

(3)配置仿真器

第一步:右擊工程名,在快捷菜單選擇Options...,打開Options for node ‘ex1’對話框,選擇Debugger列表項(xiàng),然后選擇右邊Setup標(biāo)簽

第二步:在Setup頁面中單擊Driver下拉列表框,從展開的列表項(xiàng)中選擇Texas Instruments列表項(xiàng)

第三步:勾選Device Description file框架中的Override default復(fù)選框,然后單擊框架中的..按鈕,在彈出的對話框中選擇ioCC2530F256.ddf文件,位于C:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation\8051\config\devices\Texas Instruments文件夾中

2.ZigBee網(wǎng)絡(luò)中的設(shè)備

ZigBee網(wǎng)絡(luò)中主要有協(xié)調(diào)器,路由器,終端節(jié)點(diǎn)3種設(shè)備

(1)協(xié)調(diào)器

在ZigBee網(wǎng)絡(luò)中只能有1個(gè)協(xié)調(diào)器。協(xié)調(diào)器主要負(fù)責(zé)網(wǎng)絡(luò)的組建,維護(hù),控制節(jié)點(diǎn)的加入,數(shù)據(jù)包路由選擇等。所謂路由是指數(shù)據(jù)在網(wǎng)絡(luò)中傳輸時(shí)的路徑選擇與控制。

(2)路由器

在ZigBee網(wǎng)絡(luò)中可以有多個(gè)路由器或者沒有路由器。路由器主要負(fù)責(zé)數(shù)據(jù)包的路由選擇,網(wǎng)絡(luò)連接等。

(3)終端節(jié)點(diǎn)

在ZigBee網(wǎng)絡(luò)中可以有1個(gè)或多個(gè)終端節(jié)點(diǎn)。終端節(jié)點(diǎn)的主要功能是負(fù)責(zé)數(shù)據(jù)的采集和執(zhí)行機(jī)構(gòu)的控制,例如溫度,濕度的采集,電機(jī),照明燈的控制等。

注意:在ZigBee,協(xié)調(diào)器具備路由器的功能,也可以作為一個(gè)終端節(jié)點(diǎn)來使用。路由器則不具備網(wǎng)絡(luò)組建功能,可作為一個(gè)終端節(jié)點(diǎn)來使用。終端節(jié)點(diǎn)不具備路由功能。一個(gè)ZigBee網(wǎng)絡(luò)至少要包含1個(gè)協(xié)調(diào)器和1個(gè)終端節(jié)點(diǎn),其中終端節(jié)點(diǎn)可以有路由器來兼任。

3.系統(tǒng)事件與用戶事件

(1)系統(tǒng)事件

系統(tǒng)事件是協(xié)議棧內(nèi)部已經(jīng)預(yù)先定義好的事件,用戶不必定義

SYS_EVENT_MSG 0x8000 系統(tǒng)事件

AF_DATA_CONFIRM_CMD 0xFD 收到數(shù)據(jù)確認(rèn)事件

AF_INCOMING_MSG_CMD 0x1A 收到報(bào)文(MSG)類消息

AF_INCOMING_KVP_CMD 0x1B 收到鍵值對(KVP)類的消息

KEY_CHANGE 0xC0 按鍵狀態(tài)發(fā)生改變

ZDO_NEW_DSTADDR 0xD0 ZDO獲得新地址

ZDO_STATE_CHANGE 0xD1 ZDO改變了網(wǎng)絡(luò)的狀態(tài)

ZDO_MATCH_DESC_RSP_SENT 0xD2 描述符匹配響應(yīng)發(fā)送

ZDO_CB_MSG 0xD3 收到ZDO反饋消息

ZDO_NETWORK_REPORT 0xD4 ZDO收到網(wǎng)絡(luò)狀態(tài)報(bào)告消息

ZDO_NETWORK_UPDATE 0xD4 ZDO收到網(wǎng)絡(luò)狀態(tài)更新消息

(2)用戶事件

用戶事件是用戶在應(yīng)用系統(tǒng)開發(fā)的過程中根據(jù)實(shí)際需要自定義的事件

在ZStack中事件定義的特點(diǎn):

1)一個(gè)任務(wù)可以包含多個(gè)事件,即一個(gè)任務(wù)可以由幾個(gè)事件中的某個(gè)事件觸發(fā)

2)一個(gè)事件只能歸屬于一個(gè)任務(wù)之中,即一個(gè)事件的發(fā)生,只能觸發(fā)一個(gè)任務(wù)的執(zhí)行。

3)任務(wù)的事件用16位二進(jìn)制數(shù)表示,一個(gè)二進(jìn)制位代表一個(gè)單一的事件,二進(jìn)制位的值為1時(shí),表示該位二進(jìn)制位所代表的事情發(fā)生了,二進(jìn)制位的值為0時(shí),表示該位二進(jìn)制位所代表的事情沒有發(fā)生。(0x0001,0x0002,0x0004······0x8000為單一事件。0x0003為復(fù)合事件由0x0001和0x0002組成)

4)同一任務(wù)的各個(gè)事件的編碼不能相同,不同任務(wù)的事件編碼可以相同

5)事件編碼中,0x8000為系統(tǒng)事件的編碼,用戶為每個(gè)任務(wù)所能定義的單一事件最多只有15個(gè)

4.軟件操作

(1)移除App組中的多余文件

右擊文件,選擇Remove

(2)查看文件中函數(shù)

在左下角點(diǎn)擊f{}

(3)顯示代碼的行號

單擊菜單欄Tools—>Options菜單項(xiàng),打開IDE Options對話框

在左側(cè)列表框中選中Editor列表項(xiàng),然后在右側(cè)勾選Show line numbers,確定

(4)新建組

單擊參加的工程名,右擊選擇Add,再選擇Add Group,填寫組名,確定。

(5)建立模塊設(shè)備

選擇菜單Project—>Edit Configurations命令,在彈出的對話框中選擇New建立模塊設(shè)備,選擇基于Deubg模塊進(jìn)行配置,選擇OK。在新建前把Deubg配置好,當(dāng)作模板

(6)工程添加頭文件

點(diǎn)擊IAR菜單中的Project—>Options,選擇C/C++ Compiler,然后再選擇Preprocessor,在Additional include directories:(one per line)中輸入頭文件的路徑。

1)$PROJ_DIR$\代表當(dāng)前工程文件所在的workspace的目錄

2)..\表示對應(yīng)目錄的上一層

(7)串口輸出數(shù)據(jù)

點(diǎn)擊IAR菜單中的Project—>Options,選擇C/C++ Compiler,然后再選擇PreprocessorDefined symbols:(one per line)中添加CC2530_DEBUG,既可串口輸出

4.庫函數(shù)

(1)osal_msg_deallocate() 釋放存儲(chǔ)空間

功能:釋放消息所占存儲(chǔ)空間

原型:uint8 osal_msg_deallocate(uint *msg_ptr);

說明:參數(shù)msg_ptr為指向所需回收的消息緩沖區(qū)的指針。

返回值:成功:SUCCESS(0x00) 失敗:INVALID_MSG_POINTER(0x05)

(2)osal_msg_receive() 消息檢索

功能:為指定的任務(wù)從消息隊(duì)列中檢索一條消息

原型:uint8 osal_msg_receive(uint task_id);

說明:參數(shù)task_id為任務(wù)編碼

返回值:成功:指向存放該消息的緩沖區(qū)的指針 失敗:NULL

(3)osal_start_timeEx() 開啟定時(shí)器

功能:啟動(dòng)定時(shí)器,當(dāng)定時(shí)時(shí)間到后為指定的任務(wù)設(shè)置事件

原型:uint8 osal_start_timerEx(uint8 taskID,uint16 event_id,uint16 timeout_value);

說明:參數(shù)taskID指定任務(wù)的任務(wù)號,參數(shù)event_id所需設(shè)置事件的事件編碼,參數(shù)timeout_value定時(shí)的時(shí)長,單位為ms

返回值:成功:SUCCESS(0x00) 失敗:NO_TIMER_AVAIL

(4)HalLedSet() LED的狀態(tài)

功能:設(shè)置指定發(fā)光二極管的狀態(tài)

原形:uint8 HalLedSet(uint leds,uint8 mode);

說明:

leds:待設(shè)置的發(fā)光二極管

HAL_LED_1 0x01 與P1_0腳相接的發(fā)光二極管LED1

HAL_LED_2 0x02 與P1_1腳相接的發(fā)光二極管LED2

HAL_LED_3 0x04 與P1_4腳相接的發(fā)光二極管LED3

mode:待設(shè)置的狀態(tài)

HAL_LED_MODE_OFF 0x00 熄滅模式

HAL_LED_MODE_ON 0x01 點(diǎn)亮模式

HAL_LED_MODE_BLINK 0x02 閃爍模式

HAL_LED_MODE_FLASH 0x04 周期性地閃爍模式

HAL_LED_MODE_TOGGLE 0x08 狀態(tài)翻轉(zhuǎn)模式

(5)HalLedBink() LED閃爍控制

功能:控制指定的發(fā)光二極管閃爍

原型:void HalLedBink(uint8 leds,uint8 numBlinks,uint8 percent,uint16 period);

說明:

leds:要閃爍的LED

numBlinks:閃爍的次數(shù)。為0時(shí)不停閃爍,為其他表示閃爍的次數(shù)

percent:LED點(diǎn)亮?xí)r間占閃爍周期的百分比。percent為0時(shí)熄滅,大于等于100點(diǎn)亮,為其他值表示點(diǎn)亮?xí)r間的百分比。

period:閃爍的周期,單位為ms

(6)HalUARTOpen() 串口初始化

功能:用指定的參數(shù)初始化串口

原型:uint8 HalUARTOpen(uint8 port,halUARTCfg_t *config);

說明:

port:所要初始化串口的串口號

config:串口配置變量的地址。

例:

void InitUart(void){halUARTCfg_t UartConfig; ? //定義串口配置變量UartConfig.configured=TRUE; ? //進(jìn)行串口配置UartConfig.baudRate=HAL_UART_BR_115200; //波特率UartConfig.flowControl=FALSE; ? ? ? ? ? //不進(jìn)行流控制UartConfig.callBackFunc=NULL; ? ? ? ? ? //無回調(diào)函數(shù)HalUARTOpen(0,&UartConfig); ? ? ? ? ? ? //按設(shè)置參數(shù)初始化串口0}

(7)HalUARTRead() 串口接收

功能:從串口中讀取指定長度的數(shù)據(jù),并存入用戶緩沖區(qū)

原型:uint8 HalUARTRead(uint8 port,uint8 *buf,uint16 len);

說明:

port:串口號

buf:存放的緩沖區(qū)

len:讀取的長度

(8)HalUARTWrite() 串口發(fā)送

功能:從串口中發(fā)生指定長度的數(shù)據(jù)

原型:uint8 HalUARTWrite(uint8 port,uint8 *buf,uint16 len);

說明:

port:串口號

buf:發(fā)生數(shù)據(jù)所在的地址

len:發(fā)生的長度

(9)osal_set_event() 設(shè)置事件

功能:為指定的任務(wù)設(shè)置事件

原型:uint8 osal_set_event(uint8 task_id,uint16 event_flag);

說明:

task_id:指定任務(wù)的任務(wù)號

event_flag:所需設(shè)置事件的事件編碼

返回值:成功:SUCCESS(0x00) 失敗:INVALID_TASK

(10)osal_memcmp() 判斷數(shù)據(jù)是否相同

功能:對2個(gè)存儲(chǔ)區(qū)的內(nèi)容進(jìn)行比較

原型:uint8 osal_memcmp(const void GENERIC *src1,const void GENERIC *src2,unsigned int len);

說明:

src1:待比較的第1個(gè)數(shù)據(jù)區(qū)的首地址

src2:待比較的第2個(gè)數(shù)據(jù)區(qū)的首地址

len:所需比較的字節(jié)數(shù)

返回值: TRUE:內(nèi)容相同 FALSE:內(nèi)容不同

(11)osal_strlen() 讀取字符串長度

功能:計(jì)算一個(gè)字符串的長度

原型:uint8 osal_strlen(char *pString)

說明:

pString:所要計(jì)算的字符串,要求字符串必須以NULL(值為0x00)結(jié)尾

返回值:字符串的長度

(12)osal_memset() 批量賦值

功能:將用戶緩沖區(qū)的內(nèi)容設(shè)置為指定值

原型:void *osal_memset(void *dest,uint8 value,int len);

說明:

dest:用戶緩沖區(qū)的地址

value:所要設(shè)置的值

len:所需設(shè)置的長度

?

5.連接云平臺(tái)

將232轉(zhuǎn)485接口與黑板連接,轉(zhuǎn)換接口的+與路由器4851A連接,-與路由器4851B連接

在云平臺(tái)上項(xiàng)目選擇工業(yè)物聯(lián)-》以太網(wǎng),確定

添加設(shè)備選擇TCP的通信協(xié)議

網(wǎng)關(guān)接入云平臺(tái)

?

總結(jié)

以上是生活随笔為你收集整理的IAR软件ZigBee物联网的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。