花了好久写的...感觉还不错的呢...如果看,请细看...Mua~
Z-Stack协议栈基础和数据传输实验
一、实验目的
终端节点将数据无线发送到协调器,协调器通过串口将数据发送到PC端,并在屏幕上显示出来。串口优化把有线串口传输改为无线蓝牙传输。
二、实验平台
硬件:2个zigbee节点,1个编译器,1根方口转USB数据线,一个蓝牙模块
软件:实验基于SampleApp工程进行。
三、实验步骤
- 串口初始化代码
- 发送部分代码
- 接收部分代码
四、协议栈基础
做实验之前先了解一点关于协议栈的基础知识吧~
什么是协议栈?我们知道使用Zigbee一般都要进行组网、传输数据。可想而知其中的代码数量是非常庞大的,如果我们每次使用zigbee都需要自己写所以代码的话,会非常麻烦。因此就有了协议栈。可以说它是一个小型的操作系统,把很多通信、组网之类的代码都封装起来了。我们要做的只是通过调用函数来实现我们的目的。
来看一下协议栈的工作流程图(图1)。然后我会对照流程图对协议栈进行简单的分析。
图1
我们就从流程图的“开始”开始分析吧~
打开工程文件SampleApp,main函数是程序执行的开始,我们要先找到它。Main函数在ZMAin文件夹的ZMain.c下,打开它,找到main函数。
1 int main( void ) 2 3 { 4 5 // Turn off interrupts 6 7 //关闭所有中断 8 9 osal_int_disable( INTS_ALL ); 10 11 12 13 // Initialization for board related stuff such as LEDs 14 15 //初始化系统时钟 16 17 HAL_BOARD_INIT(); 18 19 20 21 // Make sure supply voltage is high enough to run 22 23 //检测芯片电压是否正常 24 25 zmain_vdd_check(); 26 27 28 29 // Initialize board I/O 30 31 //初始化外设 32 33 InitBoard( OB_COLD ); 34 35 36 37 // Initialze HAL drivers 38 39 //初始化芯片各硬件模块 40 41 HalDriverInit(); 42 43 44 45 // Initialize NV System 46 47 //初始化flash存储器 48 49 osal_nv_init( NULL ); 50 51 52 53 // Initialize the MAC 54 55 //初始化MAC层 56 57 ZMacInit(); 58 59 60 61 // Determine the extended address 62 63 //确定IEEE 64位地址 64 65 zmain_ext_addr(); 66 67 68 69 #if defined ZCL_KEY_ESTABLISH 70 71 //Initialize the Certicom certificate information. 72 73 zmain_cert_init(); 74 75 #endif 76 77 78 79 // Initialize basic NV items 80 81 //初始化非易失变量 82 83 zgInit(); 84 85 86 87 #ifndef NONWK 88 89 // Since the AF isn't a task, call it's initialization routine 90 91 afInit(); 92 93 #endif 94 95 96 97 // Initialize the operating system 98 99 //初始化操作系统***********************************初始化重点 100 101 osal_init_system(); 102 103 104 105 // Allow interrupts 106 107 //允许中断使能 108 109 osal_int_enable( INTS_ALL ); 110 111 112 113 // Final board initialization 114 115 //初始化按键 116 117 InitBoard( OB_READY ); 118 119 120 121 // Display information about this device 122 123 //显示设备信息 124 125 zmain_dev_info(); 126 127 128 129 /* Display the device info on the LCD */ 130 131 #ifdef LCD_SUPPORTED 132 133 zmain_lcd_init(); 134 135 #endif