花了好久写的...感觉还不错的呢...如果看,请细看...Mua~

Z-Stack协议栈基础和数据传输实验

一、实验目的

    终端节点将数据无线发送到协调器,协调器通过串口将数据发送到PC端,并在屏幕上显示出来。串口优化把有线串口传输改为无线蓝牙传输。

 

二、实验平台

  硬件:2zigbee节点,1个编译器,1根方口转USB数据线,一个蓝牙模块

  软件:实验基于SampleApp工程进行。

 

三、实验步骤

  1. 串口初始化代码
  2. 发送部分代码
  3. 接收部分代码

 

四、协议栈基础

  做实验之前先了解一点关于协议栈的基础知识吧~

  什么是协议栈?我们知道使用Zigbee一般都要进行组网、传输数据。可想而知其中的代码数量是非常庞大的,如果我们每次使用zigbee都需要自己写所以代码的话,会非常麻烦。因此就有了协议栈。可以说它是一个小型的操作系统,把很多通信、组网之类的代码都封装起来了。我们要做的只是通过调用函数来实现我们的目的。

  来看一下协议栈的工作流程图(图1)。然后我会对照流程图对协议栈进行简单的分析。

 「ZigBee模块」协议栈-Z-Stack协议栈基础和数据传输实验

1

 

  我们就从流程图的“开始”开始分析吧~

  打开工程文件SampleAppmain函数是程序执行的开始,我们要先找到它。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
136 
137  
138 
139 #ifdef WDT_IN_PM1
140 
141   /* If WDT is used, this is a good place to enable it. */
142 
143   WatchDogEnable( WDTIMX );
144 
145 #endif
146 
147  
148 
149   // No Return from here 
150 
151   // 执行操作系统,进去后不会返回************************运行重点
152 
153   osal_start_system(); 
154 
155  
156 
157   return 0;  // Shouldn't get here.
158 
159 } 
main();

相关文章: