interFF 发表于 2022-4-1 20:51:08

【SVD】低功耗模式使用SVD手动查询问题

请问DEEPSLEEP模式下怎样配置SVD手动查询,没有中断?
现象:休眠前,SVD查询方法正常使用,但是休眠唤醒后,SVD查询方法就无效了。我想可能是休眠后SVD配置失效了,于是每次唤醒后重新配置启用SVD,但是依然不起作用,何解?


上代码
SVD配置如下:

/*
*   @briefSVD初始化
*   @note   none
**/
void SVD_Init(void)
{

    /*IO CONFIG*/
    FL_SVD_InitTypeDef    defaultInitStruct;

    defaultInitStruct.referenceVoltage = FL_SVD_REFERENCE_1P0V;
    defaultInitStruct.warningThreshold = FL_SVD_WARNING_THRESHOLD_GROUP12;
    defaultInitStruct.digitalFilter = FL_DISABLE;
    defaultInitStruct.SVSChannel = FL_DISABLE;

    FL_SVD_Init(SVD,&defaultInitStruct );
   
    //FL_SVD_SetWorkMode(SVD,FL_SVD_WORK_MODE_CONTINUOUS);
   
    FL_SVD_Enable(SVD);
   
}

/*
*   @briefSVD查询
*   @note   手动查询,不触发中断。监测到低于阀值,点亮LED1,否则熄灭LED1
**/
void SVD_Check(void)
{
      SVD_Init();

      MyPrintf("check...\n");
      
      if(FL_RESET == FL_SVD_GetLatchedPowerStatus(SVD))// SVD内部滤波后的电压检测标志,仅在使能数字滤波时有意义;软件避免写此寄存器。
      {
            MyPrintf("recheck...\n");
            FL_DelayMs(20);//去抖
            
            if(FL_RESET == FL_SVD_GetLatchedPowerStatus(SVD))
            {
                LED1_ON();
                return;
            }
      }
      
      MyPrintf("normal...\n");
      LED1_OFF();
      
}

PMU配置如下
/*
*   @brief休眠初始化设置
*   @note   none
**/
void PMU_Init(void)
{
    /* PMU初始化 */
    FL_PMU_SleepInitTypeDef PMU_SleepInitStruct;
   
    PMU_SleepInitStruct.deepSleep = FL_PMU_SLEEP_MODE_DEEP;// 睡眠模式配置 ,normal&deep表示 常规 Sleep 和 deep sleep
    PMU_SleepInitStruct.LDOLowPowerMode = FL_PMU_LDO_LPM_DISABLE;// 芯片LDO是否进入低功耗,true or false
    PMU_SleepInitStruct.wakeupFrequency = FL_PMU_RCHF_WAKEUP_FREQ_8MHZ;// 唤醒后的系统频率,仅对RCHF
    PMU_SleepInitStruct.wakeupDelay = FL_PMU_WAKEUP_DELAY_2US;// 额外唤醒延迟
    PMU_SleepInitStruct.coreVoltageScaling = FL_DISABLE;// 低功耗模式下内核电压降低与否,true or false
   
    FL_PMU_Sleep_Init(PMU,&PMU_SleepInitStruct); // 初始化
}

/*
*   @brief开始休眠
*   @note   进入休眠的方法
**/
void PMU_Sleep(void)
{
    /* 关闭核心部件*/
    FL_RCC_RCMF_Disable(); //关闭RCMF
    FL_RMU_PDR_Enable(RMU); //关闭PDR
    FL_RMU_BORPowerDown_Disable(RMU); //关闭BOR,2ua
   
    /* 关闭其他外设 */
    FL_VREF_Disable(VREF); //关闭VREF1p2
    //FL_SVD_DisableADCMonitor(SVD); //关闭ADC电源检测
    FL_ADC_Disable(ADC); //关闭ADC使能
   
    /* 进入低功耗 */
    FL_PMU_SetLowPowerMode(PMU,FL_PMU_POWER_MODE_SLEEP_OR_DEEPSLEEP); //选择睡眠模式
    __WFI(); //开始休眠
}





fxliuqq 发表于 2022-4-2 21:02:04

我也遇到了,好像与PMU_Sleep中的关闭其他外设的三句代码有关,把下面三句都屏蔽掉试试。


    /* 关闭其他外设 */
    FL_VREF_Disable(VREF); //关闭VREF1p2
    FL_SVD_DisableADCMonitor(SVD); //关闭ADC电源检测
    FL_ADC_Disable(ADC); //关闭ADC使能

interFF 发表于 2022-4-6 11:47:19

已验证,的确是跟这三行代码有关,多谢指导
页: [1]
查看完整版本: 【SVD】低功耗模式使用SVD手动查询问题