前言:有时在电池供电场景或者电表的场景下可能会出现电池电压低需要更换电池突然停电需要保存数据。此时低电压监测就起到了作用。
提供了两种精度模式:高精度监控和低精度监控模式
高精度模式:210ua的额外功耗
低精度模式:1ua的额外功耗
/** * @brief wakeup mode define */ typedef enum { /* 下面等级将使用高精度监控,210uA消耗 */ HALevel_1V9 = 0, // 1.7-1.9 HALevel_2V1, // 1.9-2.1 HALevel_2V3, // 2.1-2.3 HALevel_2V5, // 2.3-2.5 /* 下面等级将使用低功耗监控,1uA消耗 */ LPLevel_1V8 = 0x80, LPLevel_1V9, LPLevel_2V0, LPLevel_2V1, LPLevel_2V2, LPLevel_2V3, LPLevel_2V4, LPLevel_2V5, } VolM_LevelypeDef;
实际使用:
//低精度
PowerMonitor(ENABLE,LPLevel_2V5); PFIC_EnableIRQ(WDOG_BAT_IRQn );
__INTERRUPT
__HIGH_CODE
void WDOG_BAT_IRQHandler(void)
{
// PRINT("R8_BAT_STATUS=%x. \n",R8_BAT_STATUS);
// while(R8_BAT_STATUS&RB_BAT_STAT_LOWER) //等电压恢复
// {
// PRINT("BAT low.. \n");
// }
// PRINT("BAT normal.. \n");
}
//高精度
PowerMonitor(ENABLE,HALevel_2V5);
__INTERRUPT
__HIGH_CODE
void NMI_IRQHandler(void)
{
// PRINT("R8_BAT_STATUS=%x. \n",R8_BAT_STATUS);
// while(R8_BAT_STATUS&RB_BAT_STAT_LOWER) //等电压恢复
// {
// PRINT("BAT low.. \n");
// }
// PRINT("BAT normal.. \n");
}
如果使用低功耗:
添加这个配置PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE|RB_SLP_BAT_WAKE, Long_Delay);
且需要在睡眠函数将关闭电压监控屏蔽:
仅是个人学习分享;如有任何错漏敬请留言指正。