此功能适用于HC32的M0系列;
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输出不受限制
- }
[color=rgb(51, 102, 153) !important]复制代码
掉电检测需要配置 上升沿,原因是内部有反相器了。
挺好用的,直接就用上了,看看手册就搞定了!最大的优点是可以选择不同的引脚。