留个帖子方便以后自己查找。前段时间编过关于调用ZDP_IEEEAddrReq()的串口发送父设备的扩展地址,当然就是经典的ZDP_IEEEAddrReq(0x0000,0,0,0)喽,后来也成功了。然后再这个API库里面(就在此函数定义的ZDProfile.c中),又看到该函数旁边有个函数叫ZDP_NwkAddrReq(A,B,C,D),大体就是ZDP_IEEEAddrReq(a,B,C,D)的反推看起来。然后我就试着照猫画虎来用已知设备的扩展地址(MAC)来得到,然后我就改了改:
注册NWK_addr_rsp;
使用ZDP_NwkAddrReq(A,B,C,D),A的输入是重点,函数描述指定是一个指针,而IEEE地址高达64位,所以做了一个数组指针MAC_data(不是指针数组..)
正序排列的IEEE地址
触动事件ZDO_CB_MSG后进入ZDOMsg中
事件
ZDO_CB_MSG的处理函数(向串口发送数据)
当我轻而易举的完成上述步骤后,实验结果一如既往的没有让我失望,串口接收区干干净净,什么也没有。然后找问题,通过万能的LED小灯,发现程序是无法进入“ZDOMsg的处理函数”,就是"事件
ZDO_CB_MSG"好像根本就没有被触发,即本节点根本没有收到正确远程节点的返回信息下图(两节点交流图)
后来问题锁定在ZDP_NwkAddrReq( MAC_data,0,0,0 ) ; 后来一百度,查论坛社区,都有讲该函数如何使用,通篇一律翻译了下TI里面的函数说明...
后来将MAC_data数据进行由低位到高位排列即:
uint8 MAC_data[8]={0xec,0x52,0xae,0x04,0x00,0x4b,0x12,0x00}; //由低位到高位
//uint8 MAC_data[8]={0x00,0x12,0x4b,0x00,0x04,0xae,0x52,0xec};//原先的,实际IEEE地址为 0x 00 12 4b 00 04 ae 52 ec
再尝试发现成功了,灯NM闪起来了,串口开始发送网络地址信息(意味着"事件ZDO_CB_MSG" 得到指派);
奇怪之处:下次再考程序,发现时常又无法进入"事件ZDO_CB_MSG"