IAR软件ZigBee物联网
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,然后再選擇Preprocessor,Defined 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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis Example 使用方法
- 下一篇: 手写tomcat socket clos