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.

CC2540 打开串口是如何省电,降低功耗

Other Parts Discussed in Thread: CC2540

我现在遇到这个问题。 把HAL_UART 编译进去后。 耗电7mA 左右。(我把power saving 编译进去了好像也没有用,也是7mA)。  cc2540 是被动接收数据的。 没有给cc240 通过串口发数据的时候, 我想让cc2540 进入省电模式。  然后,当有串口发数据来的时候, 我就要退出省电模式,接收串口数据。

当没有串口数据来的时候    :进入省电模式的代码应该放在哪里? 就调用osal_pwrmgr_device这个函数就行了吗?

当有了串口数据来的时候     :     要怎么退出来?  代码应该怎么写? 要设置中断吗?

这是我的串口接收函数。

void sbpSerialAppCallback(uint8 port, uint8 event)
{
            (void)event;
            int numBytes=0;
            delayMs(30);
            uint8 pktBuffer[SBP_UART_RX_BUF_SIZE]={0}; 

            if ((numBytes = Hal_UART_RxBufLen(HAL_UART_PORT_0)) > 0 )
           {

            (void)HalUARTRead (HAL_UART_PORT_0, pktBuffer, numBytes);

             sbpSerialAppWrite(buf,numBytes);

           }

}
}



YAN~~~

  • 低功耗模式时,串口是无法接收数据的。建议您定时唤醒设备,采用查询方式来做串口

  • Susan Yang   你好~


    那我要怎么知道串口有数据进来呢?

    还有要怎么唤醒呢?

    我是新手, 希望可以比较详细点。有点代码更好。


    thank you~

  • 可以在唤醒后去查询是否有串口数据,可以参考  http://itas109.blog.163.com/blog/static/171911753201382625746963/

    关于唤醒,可以使用睡眠定时器,可以参考帖子http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/47302.aspx

  • HI       Susan Yang 

    很感谢您的解答, 但是我还是有一些疑问。

    1:  

      INT_HEAP_LEN=3072
    HALNODEBUG
    OSAL_CBTIMER_NUM_TASKS=1
    HAL_AES_DMA=TRUE
    HAL_DMA=TRUE
    HAL_UART=TRUE

    POWER_SAVING

    xPLUS_BROADCASTER

    HAL_LCD=TRUE
    HAL_LED=TRUE
    HAL_UART=TRUE
    xHAL_UART_TRANS=TRUE
    xHAL_UART_GPIO_ISR

    我  只要我 把   HAL_UART=TRUE  编译进去。 不管有没有编译 进 POWER_SAVING 都是很耗电的。 有6~7mA左右, 是不是我还没有进入到省电模式呀?要怎么看进入省电模式了没有? 


     2: 我要不要把流控打开呢? 打开流控只要   #define SBP_UART_FC       TRUE   就行了吗? 还要不要写什么代码吗?


    3:

                            osal_pwrmgr_device(PWRMGR_ALWAYS_ON)

                            osal_pwrmgr_device(PWRMGR_BATTERY)

                               就用着两个函数就可以切换省电模式了是吧。 但是具体怎样跟 定时器配合起来还是不懂。



    ##:   我要实现的功能是:  cc2540 上电后。 如果没有串口给cc2540 发来数据 ,我就要cc2540 进入省电模式(要求省电), 如果有数据发来的时候,就切换到正常模式。处理串口发来的数据,处理完后 又进入省电模式。

    (我本来的程序是。编译 xPOWER_SAVING     HAL_UART=TRUE  运行起来没有问题。 就是耗电,不管发不发数据都是 6~7 mA)