挺好用的,直接就用上了,看看手册就搞定了!最大的优点是可以选择不同的引脚。
LVD 简介
LVD 可用于监测 VCC 及芯片管脚的电压。当被监测电压与 LVD 阈值的比较结果满足
触发条件时, LVD 会产生中断或复位信号,用户可根据该信号执行一些紧急任务。
LVD 具有以下特性:
4 路监测源, AVCC、 PC13、 PB08、 PB07;
16 阶阈值电压, 1.8V~3.3V 可选;
8 种触发条件,高电平、上升沿、下降沿组合;
2 种触发结果,复位、中断;
8 阶滤波配置,防止误触发;
具备迟滞功能,强力抗干扰。
关键核心代码:
void BSP_Lvd_Init(void)
{
stc_lvd_cfg_t stcLvdCfg;
DDL_ZERO_STRUCT(stcLvdCfg); //变量清0
Sysctrl_SetPeripheralGate(SysctrlPeripheralVcLvd, TRUE); //开LVD时钟
stcLvdCfg.enAct = LvdActMskInt; ///< 配置触发产生中断
stcLvdCfg.enInputSrc = LvdInputSrcMskVCC; ///< 配置LVD输入源AVCC
stcLvdCfg.enThreshold = LvdMskTH3_3V; ///< 配置LVD阈值电压
stcLvdCfg.enFilter = LvdFilterMskEnable; ///< 滤波使能
stcLvdCfg.enFilterTime = LvdFilterMsk28_8ms; ///< 滤波时间设置
stcLvdCfg.enIrqType = LvdIrqMskRise; ///< 中断触发类型
Lvd_Init(&stcLvdCfg);
///< 中断开启
Lvd_EnableIrq();
Lvd_ClearIrq();
EnableNvic(VC0_1_2_LVD_IRQn, IrqLevel3, TRUE); ///< NVIC 中断使能
///< LVD 模块使能
Lvd_Enable();
}
///< LVD 中断服务函数,写参数wheel.jinwei到flash.
void Lvd_IRQHandler(void)
{
Lvd_ClearIrq();
//delay1ms(100);
//Gpio_WriteOutputIO(GpioPortA, GpioPin3, TRUE); //中断受触发设置限制,LVD输出不受限制
}
掉电检测需要配置 上升沿,原因是内部有反相器了。
|
掉电检测需要配置 上升沿……是因为LVD的内部比较器,检测端是反相输入的,参考电压在正相输入……