caizhiwei 发表于 2020-9-2 14:10

【分享】HC32F072的LVD模块试用心得(用于掉电检测)

挺好用的,直接就用上了,看看手册就搞定了!最大的优点是可以选择不同的引脚。

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输出不受限制

}
掉电检测需要配置 上升沿,原因是内部有反相器了。


zeshoufx 发表于 2020-9-2 15:21

谢谢分享【HC32F072的LVD模块试用心得】

不知道取啥名 发表于 2020-12-30 11:13

谢谢分享

aoo 发表于 2020-12-31 17:16

千人QQ群:206032332
页: [1]
查看完整版本: 【分享】HC32F072的LVD模块试用心得(用于掉电检测)