IAR软件ZigBee物联网
ZigBee
單片機:cc2530
協議棧:ZStack-CC2530-2.5.1a
開發工具:IAR
1.軟件配置
(1)配置單片機
第一步:右擊工程名,在快捷菜單選擇Options...,打開Options for node ‘ex1’對話框
第二步:選擇General Options列表項,單擊右邊的Target標簽,顯示的頁面為配置單片機的內容
第三步:單擊Device后面的按鈕,在彈出的對話框中選擇CC2530F256.i51文件,文件位于C:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation\8051\config\devices\Texas Instruments文件夾中
第四步:在CPU core 下拉列表框中選擇Plain列表項,其他參數默認
(2)配置連接器
第一步:右擊工程名,在快捷菜單選擇Options...,打開Options for node ‘ex1’對話框,選擇Linker列表項,然后選擇右邊Config標簽
第二步:在Config頁面中勾選Linker configuration file框架中的Override default復選框,單擊框架中的..按鈕,彈出對話框,選擇lnk51ew_cc2530F256_banked.xcl文件,位于C:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation\8051\config\devices\Texas Instruments文件夾中
第三步:其他項的配置選擇默認值
(3)配置仿真器
第一步:右擊工程名,在快捷菜單選擇Options...,打開Options for node ‘ex1’對話框,選擇Debugger列表項,然后選擇右邊Setup標簽
第二步:在Setup頁面中單擊Driver下拉列表框,從展開的列表項中選擇Texas Instruments列表項
第三步:勾選Device Description file框架中的Override default復選框,然后單擊框架中的..按鈕,在彈出的對話框中選擇ioCC2530F256.ddf文件,位于C:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation\8051\config\devices\Texas Instruments文件夾中
2.ZigBee網絡中的設備
ZigBee網絡中主要有協調器,路由器,終端節點3種設備
(1)協調器
在ZigBee網絡中只能有1個協調器。協調器主要負責網絡的組建,維護,控制節點的加入,數據包路由選擇等。所謂路由是指數據在網絡中傳輸時的路徑選擇與控制。
(2)路由器
在ZigBee網絡中可以有多個路由器或者沒有路由器。路由器主要負責數據包的路由選擇,網絡連接等。
(3)終端節點
在ZigBee網絡中可以有1個或多個終端節點。終端節點的主要功能是負責數據的采集和執行機構的控制,例如溫度,濕度的采集,電機,照明燈的控制等。
注意:在ZigBee,協調器具備路由器的功能,也可以作為一個終端節點來使用。路由器則不具備網絡組建功能,可作為一個終端節點來使用。終端節點不具備路由功能。一個ZigBee網絡至少要包含1個協調器和1個終端節點,其中終端節點可以有路由器來兼任。
3.系統事件與用戶事件
(1)系統事件
系統事件是協議棧內部已經預先定義好的事件,用戶不必定義
SYS_EVENT_MSG 0x8000 系統事件
AF_DATA_CONFIRM_CMD 0xFD 收到數據確認事件
AF_INCOMING_MSG_CMD 0x1A 收到報文(MSG)類消息
AF_INCOMING_KVP_CMD 0x1B 收到鍵值對(KVP)類的消息
KEY_CHANGE 0xC0 按鍵狀態發生改變
ZDO_NEW_DSTADDR 0xD0 ZDO獲得新地址
ZDO_STATE_CHANGE 0xD1 ZDO改變了網絡的狀態
ZDO_MATCH_DESC_RSP_SENT 0xD2 描述符匹配響應發送
ZDO_CB_MSG 0xD3 收到ZDO反饋消息
ZDO_NETWORK_REPORT 0xD4 ZDO收到網絡狀態報告消息
ZDO_NETWORK_UPDATE 0xD4 ZDO收到網絡狀態更新消息
(2)用戶事件
用戶事件是用戶在應用系統開發的過程中根據實際需要自定義的事件
在ZStack中事件定義的特點:
1)一個任務可以包含多個事件,即一個任務可以由幾個事件中的某個事件觸發
2)一個事件只能歸屬于一個任務之中,即一個事件的發生,只能觸發一個任務的執行。
3)任務的事件用16位二進制數表示,一個二進制位代表一個單一的事件,二進制位的值為1時,表示該位二進制位所代表的事情發生了,二進制位的值為0時,表示該位二進制位所代表的事情沒有發生。(0x0001,0x0002,0x0004······0x8000為單一事件。0x0003為復合事件由0x0001和0x0002組成)
4)同一任務的各個事件的編碼不能相同,不同任務的事件編碼可以相同
5)事件編碼中,0x8000為系統事件的編碼,用戶為每個任務所能定義的單一事件最多只有15個
4.軟件操作
(1)移除App組中的多余文件
右擊文件,選擇Remove。
(2)查看文件中函數
在左下角點擊f{}。
(3)顯示代碼的行號
單擊菜單欄Tools—>Options菜單項,打開IDE Options對話框
在左側列表框中選中Editor列表項,然后在右側勾選Show line numbers,確定
(4)新建組
單擊參加的工程名,右擊選擇Add,再選擇Add Group,填寫組名,確定。
(5)建立模塊設備
選擇菜單Project—>Edit Configurations命令,在彈出的對話框中選擇New建立模塊設備,選擇基于Deubg模塊進行配置,選擇OK。在新建前把Deubg配置好,當作模板
(6)工程添加頭文件
點擊IAR菜單中的Project—>Options,選擇C/C++ Compiler,然后再選擇Preprocessor,在Additional include directories:(one per line)中輸入頭文件的路徑。
1)$PROJ_DIR$\代表當前工程文件所在的workspace的目錄
2)..\表示對應目錄的上一層
(7)串口輸出數據
點擊IAR菜單中的Project—>Options,選擇C/C++ Compiler,然后再選擇Preprocessor,Defined symbols:(one per line)中添加CC2530_DEBUG,既可串口輸出
4.庫函數
(1)osal_msg_deallocate() 釋放存儲空間
功能:釋放消息所占存儲空間
原型:uint8 osal_msg_deallocate(uint *msg_ptr);
說明:參數msg_ptr為指向所需回收的消息緩沖區的指針。
返回值:成功:SUCCESS(0x00) 失敗:INVALID_MSG_POINTER(0x05)
(2)osal_msg_receive() 消息檢索
功能:為指定的任務從消息隊列中檢索一條消息
原型:uint8 osal_msg_receive(uint task_id);
說明:參數task_id為任務編碼
返回值:成功:指向存放該消息的緩沖區的指針 失敗:NULL
(3)osal_start_timeEx() 開啟定時器
功能:啟動定時器,當定時時間到后為指定的任務設置事件
原型:uint8 osal_start_timerEx(uint8 taskID,uint16 event_id,uint16 timeout_value);
說明:參數taskID指定任務的任務號,參數event_id所需設置事件的事件編碼,參數timeout_value定時的時長,單位為ms
返回值:成功:SUCCESS(0x00) 失敗:NO_TIMER_AVAIL
(4)HalLedSet() LED的狀態
功能:設置指定發光二極管的狀態
原形:uint8 HalLedSet(uint leds,uint8 mode);
說明:
leds:待設置的發光二極管
HAL_LED_1 0x01 與P1_0腳相接的發光二極管LED1
HAL_LED_2 0x02 與P1_1腳相接的發光二極管LED2
HAL_LED_3 0x04 與P1_4腳相接的發光二極管LED3
mode:待設置的狀態
HAL_LED_MODE_OFF 0x00 熄滅模式
HAL_LED_MODE_ON 0x01 點亮模式
HAL_LED_MODE_BLINK 0x02 閃爍模式
HAL_LED_MODE_FLASH 0x04 周期性地閃爍模式
HAL_LED_MODE_TOGGLE 0x08 狀態翻轉模式
(5)HalLedBink() LED閃爍控制
功能:控制指定的發光二極管閃爍
原型:void HalLedBink(uint8 leds,uint8 numBlinks,uint8 percent,uint16 period);
說明:
leds:要閃爍的LED
numBlinks:閃爍的次數。為0時不停閃爍,為其他表示閃爍的次數
percent:LED點亮時間占閃爍周期的百分比。percent為0時熄滅,大于等于100點亮,為其他值表示點亮時間的百分比。
period:閃爍的周期,單位為ms
(6)HalUARTOpen() 串口初始化
功能:用指定的參數初始化串口
原型:uint8 HalUARTOpen(uint8 port,halUARTCfg_t *config);
說明:
port:所要初始化串口的串口號
config:串口配置變量的地址。
例:
void InitUart(void){halUARTCfg_t UartConfig; ? //定義串口配置變量UartConfig.configured=TRUE; ? //進行串口配置UartConfig.baudRate=HAL_UART_BR_115200; //波特率UartConfig.flowControl=FALSE; ? ? ? ? ? //不進行流控制UartConfig.callBackFunc=NULL; ? ? ? ? ? //無回調函數HalUARTOpen(0,&UartConfig); ? ? ? ? ? ? //按設置參數初始化串口0}(7)HalUARTRead() 串口接收
功能:從串口中讀取指定長度的數據,并存入用戶緩沖區
原型:uint8 HalUARTRead(uint8 port,uint8 *buf,uint16 len);
說明:
port:串口號
buf:存放的緩沖區
len:讀取的長度
(8)HalUARTWrite() 串口發送
功能:從串口中發生指定長度的數據
原型:uint8 HalUARTWrite(uint8 port,uint8 *buf,uint16 len);
說明:
port:串口號
buf:發生數據所在的地址
len:發生的長度
(9)osal_set_event() 設置事件
功能:為指定的任務設置事件
原型:uint8 osal_set_event(uint8 task_id,uint16 event_flag);
說明:
task_id:指定任務的任務號
event_flag:所需設置事件的事件編碼
返回值:成功:SUCCESS(0x00) 失敗:INVALID_TASK
(10)osal_memcmp() 判斷數據是否相同
功能:對2個存儲區的內容進行比較
原型:uint8 osal_memcmp(const void GENERIC *src1,const void GENERIC *src2,unsigned int len);
說明:
src1:待比較的第1個數據區的首地址
src2:待比較的第2個數據區的首地址
len:所需比較的字節數
返回值: TRUE:內容相同 FALSE:內容不同
(11)osal_strlen() 讀取字符串長度
功能:計算一個字符串的長度
原型:uint8 osal_strlen(char *pString)
說明:
pString:所要計算的字符串,要求字符串必須以NULL(值為0x00)結尾
返回值:字符串的長度
(12)osal_memset() 批量賦值
功能:將用戶緩沖區的內容設置為指定值
原型:void *osal_memset(void *dest,uint8 value,int len);
說明:
dest:用戶緩沖區的地址
value:所要設置的值
len:所需設置的長度
?
5.連接云平臺
將232轉485接口與黑板連接,轉換接口的+與路由器4851A連接,-與路由器4851B連接
在云平臺上項目選擇工業物聯-》以太網,確定
添加設備選擇TCP的通信協議
網關接入云平臺
?
總結
以上是生活随笔為你收集整理的IAR软件ZigBee物联网的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis Example 使用方法
- 下一篇: 手写tomcat socket clos