This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ZIGBEE 终端节点PM3休眠唤醒后无法入网,重复不断发送beacon ruquest请求,直至电量耗尽的问题

我们使用ZIBEE 2007协议栈构建的一个传感器网络,网络结构如下图所示:

C-表示协调器,R为路由结点 D-为终端节点

R与C上电自动绑定,D与R通过按键操作绑定,D定时发送数据给绑定的RR再将数据传送给C,D发送完成后进入PM3休眠,通过外部中断唤醒,在系统运行过程中,经常性发生终端节点睡眠醒来后无法加入网,一直重复发送beacon Request,使用Packet Sniffer软件抓包如下图所示:

  • 外部中断唤醒的代码能不能贴出来?

  • /*********************************************************************
    //中断服务程序
    *********************************************************************/
    #pragma vector = P1INT_VECTOR
    __near_func __interrupt void P1_ISR(void)
    {
    HAL_DISABLE_INTERRUPTS();
    UTCTime_t rtcTime;
    uint8 ctr1=0;
    if(P1IFG & 0x08||P1IFG & 0x10) //RTC报警输出中断
    {
    //读取当前rtc的时间
    ctr1=ReadOneByte(CTR1);
    //如果是倒计时中断
    if(ctr1&INTDF)
    {
    osal_set_event( sapi_TaskID, MY_REBOOT_EVT);
    }
    else if(ctr1&INTAF)
    {
    //读取当前rtc的时间
    //GetRtcTime(&rtcTime);
    //ClearAlarmOut();
    //激活RF增益放大器芯片
    P1_2=1;
    delay_us(50000);
    //HalLedBlink ( HAL_LED_1, 2, 50, 300 );
    //osal_start_timerEx( sapi_TaskID, MY_WAKEUP_EVT, 3000);
    osal_start_timerEx( sapi_TaskID, MY_REBOOT_EVT, 3000);
    }
    ClearAlarmOut();
    //osal_start_timerEx( sapi_TaskID, MY_REBOOT_EVT, 3000);
    }
    P1IFG = 0;
    P1IF = 0;
    HAL_ENABLE_INTERRUPTS();
    delay_us(10);
    }

  • 原来就一直出现以上描述的问题,所以把代码改成中断唤醒后都让终端节点重启。

  • 后来这个一直加入不了网络的终端节点,重新打开协调器C的允许绑定功能后,那个终端节点就可以正常加入网络了。