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.

关于CC2530在PM2,PM3模式下,通过串口唤醒的问题。

Other Parts Discussed in Thread: CC2530

各位TI工程师:

大家好!最近在做一个项目,需要CC2530和MCU串口通信,但是只有(RX,TX,VCC,GND)四线连接通信。CC2530需要工作在PM3(未入网时的功耗模式PM2(入网后的低功耗模式)。通过串口来唤醒,目前串口波特率为9600.

基本原理是:在低功耗模式(PM2,PM3)下,串口引脚(P0.2,P0.3切换为外部中断IO),通过串口发送的数据,比如:连续几个0xF0来唤醒,唤醒后切换到串口模式,接收串口数据。

但是结果不是很理想,在PM2模式下,多次发送数据才能唤醒。如果把MCU发送的串口数据头改为F0 00,这样效果要好一些,但是还是有不会唤醒的情况。并且发现在PM3模式下还不能唤醒。

请问各位,有什么好的建议吗?谢谢!

  • 低功耗模式下32M晶振关闭,会影响串口使用。建议先用IO中断唤醒系统,然后再进行串口操作
  • 谢谢你的回复!我的串口中断是如下处理的:
    //bool valid=FALSE;
    if (HAL_KEY_SW_1_PXIFG & HAL_KEY_SW_1_BIT) /* Interrupt Flag has been set */
    {
    HAL_KEY_SW_1_PXIFG = ~(HAL_KEY_SW_1_BIT); /* Clear Interrupt Flag */
    //此三处屏蔽掉后,不能发送串口数据
    PICTL &= ~(0x01); //Clear the edge bit
    P0IEN &= ~(0x04);//P0_2 中断禁止
    IEN1 &= ~(0x20);//端口0 中断禁止
    //g_keys |= HAL_KEY_SW_1;
    osal_pwrmgr_task_state( zclSample_TaskID, PWRMGR_HOLD );
    NLME_SetPollRate(1000 );
    NLME_SetQueuedPollRate( 100);
    NLME_SetResponseRate( 100 );
    osal_start_timerEx( zclSample_TaskID,SAMPLE_USE_ENABLEUART_TIMEOUT_EVT,2000);
    SLEEPCMD &= 0xfc;
    SLEEPCMD |= 0;
    PCON = 0x00;//唤醒

    P0SEL |= 0x0C;
    P0DIR &= ~(0xFC);
    P0DIR |= 0x08;

    InitUART0();
    //valid = TRUE;
    }
    请问,这样对吗?求指点!
  • 从PM3进入中断,不能立即使用osal_start_timerEx(),你可以先使用osal_set_event()置出一个事件,在这个事件里使用osal_start_timerEx()。