|
请问DEEPSLEEP模式下怎样配置SVD手动查询,没有中断?
现象:休眠前,SVD查询方法正常使用,但是休眠唤醒后,SVD查询方法就无效了。我想可能是休眠后SVD配置失效了,于是每次唤醒后重新配置启用SVD,但是依然不起作用,何解?
上代码
SVD配置如下:
- /*
- * @brief SVD初始化
- * @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);
-
- }
- /*
- * @brief SVD查询
- * @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(); //开始休眠
- }
复制代码
|
|