此功能适用于HC32的M0系列;


LVD 简介
LVD 可用于监测 VCC 及芯片管脚的电压。当被监测电压与 LVD 阈值的比较结果满足
触发条件时,
LVD 会产生中断或复位信号,用户可根据该信号执行一些紧急任务。
LVD 具有以下特性:
 4 路监测源, AVCCPC13PB08PB07
 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]复制代码


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

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