低电压检测器(LVD)适用于监测VDDA电源电压或外部引脚输入电压,当被监测电压与LVD阈值的比较结果满足触发的条件时,LVD将会产生中断或者复位信号,通常用来处理一些紧急任务。LVD产生的中断或复位标志,只能通过软件程序清零,只有当中断或复位标志被清零后,在再次达到触发条件时,LVD才能再次产生中断或复位信号。本文以CW32L083为例,介绍LVD的使用方法。

低电压检测器(LVD)的主要特性:

1. 4路监测电压源:VDDA电源电压,PA00、PB00、PB11引脚输入

2. 16阶阈值电压,范围2.02V-3.76V

3. 3种触发条件,可以组合使用

电平触发:电压低于阈值

下降沿触发:电压跌落到阈值以下的下降沿

上升沿触发:电压回升到阈值以上的上升沿

4. 可触发产生中断或复位信号,二者不能同时产生

5. 8阶滤波可配置

6. 支持迟滞功能

7. 支持低功耗模式下运行,中断唤醒MCU

上图为CW32L083低电压检测器(LVD)的功能框图,LVD不仅可以监测VDDA电源电压,也可以监测外部引脚 (PA00、PB00、PB11)输入电压,通过控制寄存器LVD_CR0的SOURCE位域来选择,当使用外部引脚来监测电压时,需将对应的GPIO端口配置为模拟输入模式(GPIOx_ANALOG.PINy = 1)。

LVD的输出结果可以从PA01/PA08/PC12/PE02/PF02引脚输出,需将对应的GPIO口配置为数字输出模式,同时选择功能复用,下面为具体配置

//LVD   I/O口初始化void LVD_PortInit(void){GPIO_InitTypeDef GPIO_InitStructure = {0};//打开GPIOA时钟__RCC_GPIOA_CLK_ENABLE();//将PA08设置为LVD比较结果输出GPIO_InitStructure.Pins = GPIO_PIN_8;GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;GPIO_Init(CW_GPIOA, &GPIO_InitStructure);//将PA08复用为LVD比较结果输出PA08_AFx_LVDOUT();//将PA00设置为LVD的输入口PA00_ANALOG_ENABLE();}

迟滞功能

LVD 内置的电压比较器具有迟滞功能,可避免当 LVD 的被监测电压在阈值电压附近时,电压比较器的输出结果发生频繁翻转,增强系统抗干扰能力。只有当被监测电压高于或低于阈值电压达到20mV时,比较器输出信号才会发生翻转。具体波形如下图所示:

LVD的阈值电压根据LVD控制寄存器LVD_CR0的VTH位值决定,有效值0 ~ 15,如下表所示:

数字滤波功能

CW32L083的LVD支持数字滤波功能,以增强系统的鲁棒性,可将LVD电压比较的输出结果信号进行数字滤波,小于滤波宽度的信号被滤除,不会触发中断或复位,如下图所示:

通过设置控制寄存器LVD_CR1的FLTEN位域为1,可使能数字滤波模块。设置控制寄存器 LVD_CR1 的 FLTCLK 位域可以选择数字滤波的时钟:

• FLTCLK位为1,选择HSIOSC作为滤波时钟

• FLTCLK位为0,选择内置RC振荡器时钟作为滤波时钟,其频率约150kHz

相关的宏定义如下所示:

#define LVD_FilterClk_RC150K  ((uint32_t)0x00000000)

#define LVD_FilterClk_HSI   ((uint32_t)0x00000010)

控制寄存器LVD_CR1的FLTTIME位域用于选择数字滤波的时钟个数,如下表所示:

从LVD状态寄存器LVD_SR的FLTV位域,可以读出经LVD数字滤波后的信号电平;当 GPIO 的功能复用为LVD_OUT时,数字滤波后的信号就可以从GPIO输出,以方便观察测量。

LVD中断

LVD支持在低功耗模式下工作,中断输出可将芯片从低功耗模式下唤醒。当被监测电压与LVD阈值的比较结果满足触发条件时,可产生中断或复位信号。产生中断还是复位信号由控制寄存器LVD_CR0的ACTION位域控制:

• ACTION为1,LVD触发产生复位 #define LVD_Action_Reset  ((uint32_t)0x00000002)

• ACTION为0,LVD触发产生中断 #define LVD_Action_Irq   ((uint32_t)0x00000000)

通过设置控制寄存器LVD_CR0的IE位域为1,使能LVD中断,满足触发条件时将产生LVD中断,中断标志位LVD_SR.INTF会被硬件置1,用户可以向INTF位写0,清除中断标志。设置控制寄存器LVD_CR1的LEVEL、FALL、RISE位域,可选择不同的中断或复位触发方式,三者可组合使用:

• LEVEL为1,被监测电压低于阈值时触发中断或产生复位

• FALL为1,被监测电压跌落到阈值以下的下降沿触发中断或产生复位

• RISE为1,被监测电压回升到阈值以上的上升沿触发中断或产生复位

相关的寄存器具体位域可参考下表:

根据上述内容,简单介绍配置电压监测例程。LVD的输入通道设置为PA00,输出端口为PA08,门限电压为2.02V,利用LVD的中断实现当LVD输入通道电压低于或者高于门限电压时刻(利用上升沿和下降沿),PC03输出电平翻转一次。

void LVD_PortInit(void){GPIO_InitTypeDef GPIO_InitStructure = {0};//打开GPIOA时钟__RCC_GPIOA_CLK_ENABLE();//将PA08设置为LVD比较结果输出GPIO_InitStructure.Pins = GPIO_PIN_8;GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;GPIO_Init(CW_GPIOA, &GPIO_InitStructure);//将PA08复用为LVD比较结果输出PA08_AFx_LVDOUT();//将PA00设置为LVD的输入口PA00_ANALOG_ENABLE();}int main(void){LVD_InitTypeDef LVD_InitStruct = {0};//LED初始化LED_Init();//配置测试IO口LVD_PortInit();LVD_InitStruct.LVD_Action = LVD_Action_Irq;    //配置中断功能LVD_InitStruct.LVD_Source = LVD_Source_PA00;  //配置LVD输入口为PA00LVD_InitStruct.LVD_Threshold = LVD_Threshold_2p02V; //配置LVD基准电压为2.02vLVD_InitStruct.LVD_FilterEn = LVD_Filter_Enable;  //LVD滤波模块开启LVD_InitStruct.LVD_FilterClk = LVD_FilterClk_RC150K;//LVD滤波时钟为150KHzLVD_InitStruct.LVD_FilterTime = LVD_FilterTime_4095Clk;LVD_Init(&LVD_InitStruct);LVD_TrigConfig(LVD_TRIG_FALL | LVD_TRIG_RISE, ENABLE); //LVD中断为上升沿和下降沿触发LVD_EnableIrq(LVD_INT_PRIORITY);LVD_ClearIrq();FirmwareDelay(4800);LVD_Enable(); //LVD使能while (1){if (gFlagIrq){PC03_TOG();gFlagIrq = FALSE;}}}/** @brief LED I/O初始化**/void LED_Init(void){GPIO_InitTypeDef GPIO_InitStructure = {0};//打开GPIOC时钟__RCC_GPIOC_CLK_ENABLE();/* Configure the GPIO_LED pin */GPIO_InitStructure.Pins = GPIO_PIN_2 | GPIO_PIN_3;GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;GPIO_Init(CW_GPIOC, &GPIO_InitStructure);//LEDs are off.PC02_SETLOW();PC03_SETLOW();}//LVD中断服务函数void LVD_IRQHandler(void){LVD_ClearIrq();      //清除中断标志gFlagIrq = TRUE;     //将gFlagIrq赋值为TURE,使main函数中的if判断语句生效}

上述例程中的LVD_PortInit()为前文LVD的IO口配置函数,下面例程为通过寄存器配置LVD,具体功能与上述例程一样。

void LVD_PortInit(void){GPIO_InitTypeDef GPIO_InitStructure = {0};//打开GPIOA时钟__RCC_GPIOA_CLK_ENABLE();//将PA08设置为LVD比较结果输出GPIO_InitStructure.Pins = GPIO_PIN_8;GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;GPIO_Init(CW_GPIOA, &GPIO_InitStructure);//将PA08复用为LVD比较结果输出PA08_AFx_LVDOUT();//将PA00设置为LVD的输入口PA00_ANALOG_ENABLE();}int main(void){//LED初始化LED_Init();//配置测试IO口LVD_PortInit();CW_LVD->CR0_f.SOURCE=1;    //选择待监测的电压来源为PA00CW_LVD->CR0_f.VTH=0;       //选择阈值电压为2.02VCW_LVD->CR1_f.FLTTIME=7;   //选择 LVD 滤波宽度为4095个时钟周期信号CW_LVD->CR1_f.FLTCLK=0;    //选择滤波时钟为150KHz的RC振荡时钟CW_LVD->CR1_f.FLTEN=1;    //使能 LVD 滤波CW_LVD->CR1_f.RISE=1;     //下降沿触发CW_LVD->CR1_f.FALL=1;     //上升沿触发CW_LVD->CR0_f.ACTION=0;  //选择LVD触发为中断CW_LVD->CR0_f.IE=1;       //使能LVD中断NVIC_ClearPendingIRQ(LVD_IRQn);  //使能NVIC中断向量表中的LVD中断NVIC_SetPriority(LVD_IRQn, 3);NVIC_EnableIRQ(LVD_IRQn);FirmwareDelay(4800);CW_LVD->CR0_f.EN=1;      //使能LVDCW_LVD->SR_f.INTF=0;     //清除LVD中断标志while (1){if (gFlagIrq){PC03_TOG();gFlagIrq = FALSE;}}}/**@brief LED I/O初始化**/void LED_Init(void){GPIO_InitTypeDef GPIO_InitStructure = {0};//打开GPIOC时钟__RCC_GPIOC_CLK_ENABLE();/* Configure the GPIO_LED pin */GPIO_InitStructure.Pins = GPIO_PIN_2 | GPIO_PIN_3;GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;GPIO_Init(CW_GPIOC, &GPIO_InitStructure);//LEDs are off.PC02_SETLOW();PC03_SETLOW();}//LVD中断服务函数void LVD_IRQHandler(void){LVD_ClearIrq();  //清除中断标志gFlagIrq = TRUE; //将gFlagIrq赋值为TURE,使main函数中的if判断语句生效}

上述例程功能为在PA00的输入电压值低于2.02v或高于2.02v的时刻,LVD会产生中断,PC03的输出电平会产生翻转,可利用CW32L083的开发板和数字电源进行测试,将PA00和数字电源连接,调节数字电源输出电压,在升高至门限电压以上或者下降至门限电压以下,LED1的状态会发生翻转。

LVD的相关函数及功能,可参考下述介绍。

1.void LVD_EnableNvic(uint8_t intPriority);

//使能NVIC中LVD中断

2.void LVD_DisableNvic(void);

//禁止NVIC中LVD中断

3.void LVD_TrigConfig(uint16_t LVD_TRIG, FunctionalState NewState);

//配置LVD中断/系统复位触发方式

4.void LVD_EnableIrq(uint8_t intPriority);

//使能LVD中断

5.void LVD_DisableIrq(void);

//禁止LVD中断

6.void LVD_ClearIrq(void);

//清除LVD中断标志

7.boolean_t LVD_GetIrqStatus(void);

//获取LVD中断标志

8.FlagStatus LVD_GetFlagStatus(uint16_t LVD_FLAG);

//获取LVD指定的状态位

9.boolean_t LVD_GetFilterResult(void);

//获取Filter结果

10.void LVD_Init(LVD_InitTypeDef* LVD_InitStruct);

//LVD初始化

11.void LVD_DeInit(void);

//LVD去初始化

12.void LVD_Enable(void);

//使能LVD

13.void LVD_Disable(void);

//停止LVD

CW32的LVD的使用介绍到此结束。

CW32 低电压检测器介绍相关推荐

  1. Web前端低代码介绍的ppt大纲

    在当今快节奏的数字化时代,许多企业都面临着数字化转型的压力.然而,数字化转型往往需要大量的时间和资源来完成复杂的开发过程,这对于许多企业而言可能是一个巨大的挑战.为了解决这个问题,低代码开发应运而生. ...

  2. 玩转低代码-CSS介绍

    目录 什么是CSS CSS语法 怎么查找CSS支持的模块 实战讲解 低代码是一种使用拖拽可视化开发的工具,使用低代码可以提高软件的开发效率和开发质量.作为小白要想熟练的使用低代码工具一些基础的知识如h ...

  3. 基于低功耗32位MCU CW32系列的智能温控器的应用

    随着社会的发展,温度的测量及控制变得越来越重要.及时准确的获取温度信息并对其进行适当的控制,这在许多场合中都是很重要的环节.对于不同场景要求下的温度控制,所采用的控制方式也不同.目前,学习与应用单片机 ...

  4. Hadoop环境搭建教学(一)运行环境,集群规划介绍;

    文章目录 前言 一.Hadoop的三种运行环境 二.集群规划 三.需要的基本软件安装 下期见 前言 Hadoop的运行环境可以是在Windows上,也可以在linux上,但在Windows上运行效率很 ...

  5. 低代码是什么?有什么优势

    通过简单的拖拉拽操作,而不用编写复杂的代码,实现少写代码或者不写代码,就能快速高效完成业务目标. 01 低代码平台演进 1. 低代码概念 低代码是无需编码(0 代码)或通过少量代码就可以快速生成应用程 ...

  6. 为什么企业需要低代码平台?(一)

    低代码介绍 低代码平台是指一种能够帮助企业快速交付业务应用的平台.自2000年以来,低代码市场一直充斥着40+大大小小的各种玩家,比如国外的Appian.K2.Pega Systems.Salesfo ...

  7. 微信外卖小程序 怎么计算与客户的距离_外卖订单少收益低?开发一个小程序皆可以提解决...

    外卖是大部分上班族解决吃饭问题的不二之选,因此近几年来外卖行业发展的如火如荼.一些商家赚了个"盆满体满",一些商家却遭遇订单数量少.收益低等问题.因此这些商家都非常想知道,怎么做才 ...

  8. 深入解读腾讯云微搭低代码的技术架构

    腾讯云微搭低代码是高效.高性能的企业级低代码平台.帮助开发者快速搭建支持多种业务场景的小程序.H5.PC WEB应用,通过简单的拖拉拽操作,而不用编写复杂的代码,实现少写代码或者不写代码,就能快速高效 ...

  9. 阿里开源项目LowCodeEngine低代码开发引擎

    简介 阿里开源低代码开发引擎"LowCodeEngine"项目,市面上低代码引擎开发平台有很多,阿里低代码开发start并不多. 低代码介绍 零代码.低代码的概念在整个全球行业内已 ...

最新文章

  1. Nginx 配置从零开始
  2. 关于Unity中的声音管理模块(专题七)
  3. 传统的6d位姿估计fangfa1_李飞飞团队最新论文:基于anchor关键点的类别级物体6D位姿跟踪...
  4. 深度重建:基于深度学习的图像重建
  5. Tensorflow--代码1
  6. pc控制iphone的软件_哪个备忘录便签app可以和PC电脑一块儿用
  7. IE浏览器常见CSS兼容性问题及解决办法
  8. Google 要用 Flutter 一统移动、桌面开发江湖?
  9. 文本推理_基于事理图谱的文本推理
  10. 2019年BAT面试通关宝典:数据结构+JVM+并发编程+分布式...
  11. 微分方程传染病模型之指数模型-SI模型-SIS模型-SIR模型
  12. poi excel 隐藏行
  13. 如何查看oracle隐含参数,Oracle如何查看隐含参数
  14. # C语言指数型表达
  15. 威胁猎人 | 2018年上半年短视频行业黑灰产研究报告
  16. javascript实现繁体简体转换
  17. 《Effective C++》读书笔记 条款40:明智而审慎地使用多重继承
  18. mcu和服务器通讯协议pdf,Modbus DTU与服务端间的通讯协议
  19. mac上好用的文档转换器Doxillion Plus
  20. 2W字!梳理50道经典计算机网络面试题(收藏版)

热门文章

  1. 火柴人联盟2服务器维护,火柴人联盟2闪退黑屏原因及解决方法汇总
  2. 十年•杭研技术秀 | “网易云存储服务”从0到1发展之路
  3. 用计算机控制ph,计算机控制实用技术
  4. 学习英文-学以致用【场景:公寓】
  5. 2021镇江 高考 成绩查询,2021年镇江高考成绩排名及成绩公布时间什么时候出来...
  6. MySQL 应用笔记
  7. 调用云服务实现语音识别合成以及感情分析
  8. SAAS-08-员工管理及POI
  9. Windows远程桌面连接 云服务器 ICMP协议 防火墙
  10. Makefile 经典教程(看完这篇就够了,不信你拉拉进度条)