CH582F下电模式RTC唤不醒
__INTERRUPT
__HIGH_CODE
void RTC_IRQHandler(void)
{
    RTC_TRIGFunCfg(32768*10);
    RTC_ClearITFlag(RTC_TRIG_EVENT);
}

void HAL_TimeInit(void)
{
    uint16_t status = 0;
#if(CLK_OSC32K)
    sys_safe_access_enable();
    R8_CK32K_CONFIG &= ~(RB_CLK_OSC32K_XT | RB_CLK_XT32K_PON);
    sys_safe_access_enable();
    R8_CK32K_CONFIG |= RB_CLK_INT32K_PON;
    sys_safe_access_disable();
    Lib_Calibration_LSI();
#else
    sys_safe_access_enable();
    R8_CK32K_CONFIG |= RB_CLK_OSC32K_XT | RB_CLK_INT32K_PON | RB_CLK_XT32K_PON;
    sys_safe_access_disable();
#endif
    status = R8_RESET_STATUS;
    if(((status & 0x07) == 0x01 )|| ((status & 0x07) == 0x03 ))
        RTC_InitTime(2020, 1, 1, 0, 0, 0);
    TMOS_TimerInit(0);
}


按键函数
{ 
    KeyCfg.KEY_Event = KEY_Event_SingleClick;// 响应单击
    RTC_TRIGFunCfg(32768*10);
    PFIC_EnableIRQ(RTC_IRQn);
    PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_RTC_WAKE, Long_Delay );
    GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
    GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
    LowPower_Shutdown(0);
}

GPIO可以唤醒,可RTC唤不醒,但是用实例的RTC可以,不清楚哪里出了问题

您好,这边已经全部按您的配置加入程序中测试了一遍,能够正常将CH582从下电模式中唤醒,


image.png

image.png

image.pngimage.png


奇怪的点在于GPIO可以正常唤醒,内部晶振RTC唤不醒,外部晶振RTC只能唤醒一次。

目前板子正常工作时是6mA,下电模式后是20μA。外部晶振RTC唤醒一次后再进入下电模式,电流降到2mA。

后面调试发现是死在了LowPower_Shutdown(0);中的?__WFI();

不用LowPower_Shutdown(0);函数时,RTC也正常工作。

直接下载CH582的PM例程也能正常唤醒,所以这是LowPower_Shutdown(0);和其他函数冲突了?


您把代码简化一下,保留能复现问题的最精简的工程发送至zzy@wch.cn,这边给您查找一下原因


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