CH579M低功耗唤醒问题

改的PM里的例程

int main()

{

    DelayMs(2); 

    SetSysClock( CLK_SOURCE_HSE_32MHz );            // 设置外部32M做主频

    GPIOA_ModeCfg( GPIO_Pin_All, GPIO_ModeIN_PU );

    GPIOB_ModeCfg( GPIO_Pin_All, GPIO_ModeIN_PU );

    

/* 配置串口调试 */   

//    DebugInit();

    PRINT( "Start @ChipID=%02x\n", R8_CHIP_ID );

    DelayMs(200); 


    

#if 1    

    /* 配置唤醒源为 GPIO - PA6&PA5 */

    GPIOA_ModeCfg( GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_4, GPIO_ModeIN_PU );

    GPIOA_ITModeCfg( GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_4, GPIO_ITMode_FallEdge );        // 下降沿唤醒

    NVIC_EnableIRQ( GPIO_IRQn );

    PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_GPIO_WAKE );

#endif    

    while(1){

#if 1

    PRINT( "IDLE mode sleep \n");   

    DelayMs(1);

    LowPower_Idle();

    PRINT( "wake.. \n"); 

    DelayMs(500);

#endif    


#if 1

    PRINT( "sleep mode sleep \n");   

    DelayMs(5000);

    LowPower_Sleep( RB_PWR_RAM14K|RB_PWR_RAM2K );       //只保留14+2K SRAM 供电

/*

使用HSI/5=6.4M睡眠,唤醒时间大概需要 2048Tsys≈330us

HSE起振一般不超过1.2ms(500us-1200us),所以切换到外部HSE,需要 1.2ms-330us 这个时间可以保证HSE足够稳定,一般用于蓝牙

DelayUs()函数时基于32M时钟的书写,此时主频为6.4M,所以 DelayUs((1200-330)/5)    

*/

//    if(!(R8_HFCK_PWR_CTRL&RB_CLK_XT32M_PON)) {     // 是否HSE上电

//        PWR_UnitModCfg( ENABLE, UNIT_SYS_HSE );   // HSE上电

//        DelayUs((1200)/5);

//    }

//    else if(!(R16_CLK_SYS_CFG&RB_CLK_OSC32M_XT)){   // 是否选择 HSI/5 做时钟源

//        DelayUs((1200-330)/5);

//    } 

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

//    DelayUs(500/5);                       // 等待稳定 1-5us

    DelayMs(500);

//    GPIOA_ModeCfg( GPIO_Pin_All, GPIO_ModeIN_PU );

//    GPIOB_ModeCfg( GPIO_Pin_All, GPIO_ModeIN_PU );

    SetSysClock( CLK_SOURCE_HSE_32MHz );

//    PRINT( "wake.. \n");

    DelayMs(5000);

#endif

    }

}


理论验证流程是while(1) { 进ldle -> IO唤醒 -> 进sleep-> IO唤醒 }

理论电流读表显示是 1800μA (ldle) -> 1.3μA(sleep)

但是会很频繁地出现在sleep模式唤醒后电流读表变成450μA左右(程序跑飞?)

这里提供一个思路:先验证sleep模式是否正常,在官方例程中屏蔽另外三种睡眠模式,只打开sleep模式,将程序中打印删除,同时while循环确保睡眠。唤醒源是GPIO,所以在无操作时,芯片都是处于sleep模式。去掉开发板上的小灯等功耗器件,进行功耗的测量。具体功耗可参考这个表格。

1.png

这里有一份帖子可以参考一下:

http://www.wch.cn/bbs/thread-88893-1.html


没有效果。在sleep模式下唤醒还是有概率不能一次唤醒成功,从sleep的1.3μA变成450μA,再触发几次IO唤醒有概率会从450μA回到正常的循环中。板子上只有芯片+4个电容+32M晶振了。


https://bbs.21ic.com/icview-2892728-1-1.html

这个帖子看一下,下面有相关程序可以烧录验证。

如果还是有问题,可发送邮件至邮箱lpc@wch.cn,我们这里帮忙看一下是什么问题。


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