1、关于LVD功能的描述
LVD的功能是检测VDD/VDDA供电电压是否低于低电压检测阈值,该阈值由电源控制寄存器
(PMU_CTL)中的LVDT[2:0]位进行配置。LVD通过LVDEN置位使能,位于电源状态寄存器
(PMU_CS)中的LVDF位表示低电压事件是否出现,该事件连接至EXTI的第16线,用户可以
通过配置EXTI的第16线产生相应的中断。
2、相关寄存器
主要关注PMU_CTL
寄存器中的·LVDT和LVDEN字段
3、LVD中断
4、LVD阈值波形图
LVD阈值波形图显示了VDD / VDDA供电电压和LVD输出信号的关系。(LVD中断信号依赖于EXTI第16线的上升或下降沿配置)。迟滞电压Vhyst值为100mV。
这里要特别说明下:电压上升时,配置的是下降沿,电压下降时,配置的是上升沿。
5、相关库函数
void pmu_lvd_select(uint32_t lvdt_n); //阈值配置,同时使能lvd功能
void pmu_lvd_disable(void); //失能lvd功能
6、核心代码实现
void lvd_init(void) {
pmu_lvd_select(PMU_LVDT_5);
nvic_irq_enable(LVD_IRQn, 13U, 0U);
exti_init(EXTI_16, EXTI_INTERRUPT, EXTI_TRIG_RISING);
exti_interrupt_flag_clear(EXTI_16);
exti_interrupt_enable(EXTI_16);
}
void LVD_IRQHandler(void) {
if (exti_interrupt_flag_get(EXTI_16) == SET) {
exti_interrupt_flag_clear(EXTI_16);
dbg_info("%s", "low voltage\r\n");
/* 此处加入应用代码 */
}
}
7、测试
使用可调稳压电源,给mcu供电,将电压调至设定的阈值,即可产生LVD中断。