实验简介
感性认识数据传输实验,观察老师提供的代码的实验现象,在此基础上,在实验报告中阐述清楚协议栈的启动过程及数据收发的具体实现。
实验环境
- Win10 1909
- IAR 10.30
- Z-Stack
- VScode
准备工作
一开始我打算使用最新版本的3.0.2协议栈中的SampleLight工程,这里面有协调器按键控制终端节点的LED灯的亮灭,按下Lighting设备的按键,则能对本地的Led进行亮灭控制。
但是,我看了很久后,发现了一些东西导致我暂时放弃了魔改3.0.2这个版本的想法。
Zigbee3.0 较先前的版本对设备的行为做了更多的规范,增加了很多功能。代码中通过使用一个3级目录菜单UI来实现对各个功能的。
菜单 | 功能描述 |
---|---|
A级菜单 | 功能菜单 |
B级菜单 | commissioning、网络等参数配置菜单 |
C级菜单 | installCode配置菜单 |
这需要5个按键完成操作:
按键 | 功能描述 |
---|---|
左/右按键 | 菜单切换方向键 |
上/下按键 | 编辑按键 |
中间按键 | 确认键,即【OK】 |
虽然这很方便,但是一个比较现实的问题是我目前手里的开发板没有LCD屏以及较多的按键。
如果有上图这样的设备就可以完美进行这个实验了。
但是限于实验设备,所以如果要使用3.0.2的协议栈的这个工程的话,需要进行一些魔改。
后面如果有时间再魔改这个吧。下面就使用老师给的旧版本的进行本次实验。
实验过程
首先打开老师给的代码的工程文件,由于IAR版本较新,一开始会弹出很多不兼容的提示,没有关系,一直点OK下去就行。
然后尝试编译一下,显然是不行的。提示链接出错。
如上图,点击option,重新配置一下。
需要配置设备和linker里的内容。配置过程和你第一次新建一个工程是一样的,这里不再赘述。
配置好后,再编译,就没有错误了。
接下来的操作就按照老师的注释进行操作即可。
第一步: 找到下面内容,把appLight(); 注释掉,下载到发射模块。
appSwitch(); //节点为按键S1 P1_2
// appLight(); //节点为指示灯LED1 P1_0
第二步:找到相同位置,这次把appSwitch();注释掉,下载到接收模块。
//appSwitch(); //节点为按键S1 P0_4
appLight(); //节点为指示灯LED1 P1_0
加入串口
稍微不同的是,我加了之前串口的代码。这样连接电脑的串口助手,讲道理是可以查看收到的数据。
首先是之前我们写过的串口实验代码:
void initUART0()
{
CLKCONCMD &= ~0x40;//设置系统时钟源32MHz晶振
while(CLKCONSTA&0x40);//等待晶振稳定
CLKCONCMD&=~0x47;//设置系统主时钟频率32MHz
PERCFG= 0x00;//位置1P0口
P0SEL=0x3C;//P0口是串口
P2DIR&=~0xC0;//P0优先作为UART0
U0CSR|=0x80;//串口设置为UART方式
U0GCR|=9;
U0BAUD|=59;//波特率19200
UTX0IF=1;//UART0 TX中断标志初始为1
U0CSR|=0x40;//允许接受
IEN0|=0x84;//开总中断,接受中断
}
void Send_String(unsigned char *Data, int len)
{
unsigned int j;
for(j=0;j<len;j++)
{
U0DBUF=*Data++;
while (UTX0IF==0);
UTX0IF=0;
}
}
在appLight函数里添加:
if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)>0)
{
if(pRxData[0] == LIGHT_TOGGLE_CMD)
{
Send_String("Change LED",10);
//Send_String(pRxData,1);
halLedToggle(1);
}
}
好了,接下来分别烧录,连接串口助手,按下Switch的开发板按键,串口线接appLight开发板:
注意:这里想打印出pRxData里的内容的话,需要转换一下类型才可以。
实验现象视频:
提示;上面的图片是我使用的其他图床,不是csdn的。如果图片查看不了,请移步到我的博客查看。地址是:https://stefancharles.xyz/
查看完整原文
请移步到我的个人博客:https://stefancharles.xyz/