首页 > 其他分享 >CH582开启睡眠模式(LowerPowerSleep)下低功耗测试

CH582开启睡眠模式(LowerPowerSleep)下低功耗测试

时间:2022-11-02 15:03:51浏览次数:58  
标签:睡眠 Pin 唤醒 低功耗 GPIOB IO GPIO CH582 LowerPowerSleep

 

 

 

 

 

 

 

 

 上图为手册中在睡眠模式下的功耗值,以此为参考依据。

    GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
    GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);

1、所有IO管脚,如果高阻状态端口是高电平,就设成上拉输入,如果高阻状态是低电平,设成下拉输入,如果高阻是中间状态,设成模拟输入。必须用到输出时,硬件上必须加上下拉。
2、不用的IO口可以设置为IPU/IPD/PP,如果IO为浮空状态,外部电路必须要用上拉或下拉,引脚浮空非常耗电。
3、芯片与外设相连时,外设脚为高电平芯片脚配成上拉,外设为低芯片也要为低电平,这样就能避免有电流。
4、睡眠模式不要使用外部晶振,两个晶振输入脚要remap成普通IO,并配置成IPU/IPD/PP,千万不能浮空,时钟使用内部RC振荡器。
5、如果用在32里:pwr的时钟要使能,即RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
6、关闭JTAG口,并设成普通IO;
7、不用的外设,复用的时钟要关闭。当用中断唤醒时,切记要保留。


 

    /* 配置唤醒源为 GPIO - PB1 */
    GPIOB_ModeCfg(GPIO_Pin_1, GPIO_ModeIN_PU);
    GPIOB_ITModeCfg(GPIO_Pin_1, GPIO_ITMode_FallEdge); // 下降沿唤醒
    PFIC_EnableIRQ(GPIO_B_IRQn);
    PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE, Short_Delay);

 

  /*主程序*/
    while(1)
    {
        PRINT("sleep mode sleep \n");
        DelayMs(2);
        // 注意当主频为80M时,Sleep睡眠唤醒中断不可调用flash内代码。
        LowPower_Sleep(RB_PWR_RAM30K | RB_PWR_RAM2K); //只保留30+2K SRAM 供电
        HSECFG_Current(HSE_RCur_100);                 // 降为额定电流(低功耗函数中提升了HSE偏置电流)
        DelayMs(5);
        PRINT("wake.. \n");
        DelayMs(200);
    }

唤醒后执行大概205ms的延时后继续进入睡眠状态;

/*********************************************************************
 * @fn      GPIOB_IRQHandler
 *
 * @brief   GPIOB中断函数,外部中断PB1唤醒睡眠
 *
 * @return  none
 */
__INTERRUPT
__HIGH_CODE
void GPIOB_IRQHandler(void)
{
    GPIOB_ClearITFlagBit(GPIO_Pin_1);
}

得到结果图如下:

 

 

其中 ,唤醒前与唤醒后放大查看图:

 

 

 

 下面为唤醒后,

 

标签:睡眠,Pin,唤醒,低功耗,GPIOB,IO,GPIO,CH582,LowerPowerSleep
From: https://www.cnblogs.com/azou/p/16851017.html

相关文章