CH592启用LCD后电流过大,达到100多uA, 关掉LCD后,电流3uA多

以CH592EVT\EXAM\BLE\Peripheral例程修改:
   peripheral.c:
      line 211:   uint8_t  initial_advertising_enable = FALSE;
      line 517:   uint8_t advertising_enable = FALSE;

   这两个修改禁止蓝牙广播,方便测试电流。此时电流大约在3~4uA.
    peripheral_main.c: 工程里面去掉DEBUG=1增加LCD初始化,电流变为100多uA。   

    

int main(void)
{
#if(defined(DCDC_ENABLE)) && (DCDC_ENABLE == TRUE)
    PWR_DCDCCfg(ENABLE);
#endif
    SetSysClock(CLK_SOURCE_PLL_60MHz);
#if(defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
//    GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
//    GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
#endif
#ifdef DEBUG
    GPIOA_SetBits(bTXD1);
    GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);
    UART1_DefInit();
#endif
    PRINT("%s\n", VER_LIB);
    CH59x_BLEInit();
    HAL_Init();
    GAPRole_PeripheralInit();
    Peripheral_Init();

    //PB7(seg0),PB4(seg1),PB23~PB22(seg2~seg3),PA4~PA5(seg4~seg5),PA15~PA12(seg6~seg9),PB11~PB10(seg14~seg15)
    //LCD_Init(LCD_1_4_Duty, LCD_1_3_Bias);
    R32_PIN_CONFIG2 = 0xffbef03f; // 关闭数字输入
    R16_PIN_ALTERNATE |= RB_DEBUG_EN; // 操作LCD时,需关闭debug
    R32_LCD_CMD = 0x0c3ff << 8;
    R32_LCD_CMD |= RB_LCD_SYS_EN | RB_LCD_ON | (LCD_CLK_128 << 5) | (LCD_1_4_Duty << 3) | (LCD_1_3_Bias << 2);
    GPIOA_ModeCfg(GPIO_Pin_6, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_7, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeIN_PU);
    GPIOB_ModeCfg(GPIO_Pin_0, GPIO_ModeIN_PU);
    GPIOB_ModeCfg(GPIO_Pin_6, GPIO_ModeIN_PU);


    Main_Circulation();
}


LCD电流开销数个uA,不会到100uA。
如果是用带LCD段码屏的开发板,一方面是注意rst脚PB23要关掉、串口打印的PA9也要取消使能;另一方面要参考LCD例程,要添加专门的LCD相关的休眠处理。


 @TECH_JW  可以帮忙修正吗,附件是工程文件。RST(PB23)应该是没有打开的。PA9应当也是没有使能。

icon_rar.gifPeripheralTest.zip



您是用的CH592带LCD段码屏的开发板吗,有peripheral休眠+LCD的参考代码,您可以留个邮箱获取。

实际使用中驱动的IO,和代码中休眠前固定电平的IO要确认好是匹配,避免休眠期间的IO漏电。


 @TECH_JW   邮箱是个人信息保护,已隐藏.  我用的是不带LCD的那款开发板,麻烦发代码给我测试。


已发送至邮箱,请查收。多注意代码IO与LCD段码屏IO的匹配清空,100uA是常见的IO漏电功耗。


你好,已经测试了,电流有486uA.我注意到,电流异常,主要是由:R32_PIN_CONFIG2 = 0xfffeff3f; // 关闭数字输入


这个配置引起的,只把对于的segment, com口的对应位置1,其它未用的segment, gpio,保留未用的bit都置0. 电流还是有100多uA. 如果屏蔽了这个R32_PIN_CONFIG2 寄存器的配置,电流恢复为5uA.

你是否可以用R0版本的开发板帮忙确认下问题?

bbb.jpg


   已经搞定,修改SLEEP.c文件的睡眠函数,睡眠前与唤醒后要修改辅助电源输出电压:

   在设定0.5秒唤醒一次更新LCD条件下,电流27uA。  

    // LOW POWER-sleep模式
    if(!RTCTigFlag)
    {
        uint32_t VER = (*((PUINT32)ROM_CFG_VERISON));

        if((VER&0xFF000000) == 0xFF000000)
        {
            aux_power = R16_AUX_POWER_ADJ;
            sys_safe_access_enable();
            R16_AUX_POWER_ADJ |= (RB_ULPLDO_ADJ - 1);      //睡眠前必须加此代码
            sys_safe_access_disable();
        }

        LowPower_Sleep(RB_PWR_RAM2K | RB_PWR_RAM24K | RB_PWR_EXTEND | RB_XT_PRE_EN );
        HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流)

        if((VER&0xFF000000) == 0xFF000000)
        {
            sys_safe_access_enable();
            R16_AUX_POWER_ADJ = aux_power;
            sys_safe_access_disable();
        }

        i = RTC_GetCycle32k();
        while(i == RTC_GetCycle32k());
        return 0;
    }

  

   再次把读取RTC计数器的两个调用去掉,电流变为13uA。  

        //i = RTC_GetCycle32k();
        //while(i == RTC_GetCycle32k());

    @TECH_JW    请问,为何要增加这两个调用?是否有其它更省电的方法代替这个?

     另外,在蓝牙例程中,RTC已经使用了触发模式,用户是否还可以启用定时功能? 代替tmos_start_reload_task()函数来产生2hz功能?



只有登录才能回复,可以选择微信账号登录