(总结)STM32关于可编程电压检测器的运用
来源:互联网 发布:网络大专读什么专业好 编辑:程序博客网 时间:2024/06/09 14:00
在实际工程运用中需要对突发情况作出及时的相应,通常都需要考虑当系统电压下降或断电时,需要对控制系统加以保护。这时候就需要在程序中加入系统电压监测(PVD)。供电电压降低到某一个电压值时,需要系统进入保护状态,执行紧急关闭任务(对系统数据进行保存,并对外设进行相应的保护操作)。传统单片机例如STC12C60S2,其自带A/D,可以利用A/D对工作电压进行检测,每隔一段时间进行比较,如果异常进入保护模式,进行相关的保护措施。但是这种方法不但会占用MCU处理时间,而且利用ADC也增加了系统的功耗。STM32就可以很完美的解决这一问题,其内部自带了一个可编程电压检测器(PVD),对VDD的电压进行监控可以通过电源控制寄存器PLS[ 2:0 ]位来设置监控电压的阀值,这样通过与VDD电压比较达到了监控电压的目的。电源控制状态寄存器(PWR_CSR)中的PVDO用来表明VDD是高于还是低于PVD的电压阀值。当VDD下降到PVD阀值以下或VDD上升到PVD阀值之上时,通过外部中断16线上升或下降边沿触发设置,产生PVD中断。在中断处理函数中做相应的保护措施。具体由以下两表所示。
表1 阀值与PVD输出关系
表二 具体寄存器参数
相应示例代码
PWR_PVDLevelConfig(PWR_PVDLevel_2V8); // 设定监控阀值PWR_PVDCmd(ENABLE); // 使能PVD EXTI_StructInit(&EXTI_InitStructure); EXTI_InitStructure.EXTI_Line = EXTI_Line16; // PVD连接到中断线16上 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //使用中断模式 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Raising;//电压低于阀值时产生中断 EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 使能中断线 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /**************************************************************************//Function : void PVD_NVIC_Configuration(void) //Description : //Input : none; //Output : none //created by : **************************************************************************/ void PVD_NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //point it;cann't lose it NVIC_Init(&NVIC_InitStructure); } 中断函数: extern void dev_pvd_irq_handle(void); void PVD_IRQHandler(void) { dev_pvd_irq_handle(); } /************************************************************************** //Function : void dev_pvd_irq_handle(void) //Description : PVD handle function; //Input : none; //Output : none //created by : **************************************************************************/ extern u8 is_power_on; void dev_pvd_irq_handle(void) { EXTI_ClearITPendingBit(EXTI_Line16);//clear bit; if(PWR_GetFlagStatus(PWR_FLAG_PVDO)) { dev_misc_power_on(0); } } //主函数中的操作: Main() { … … PVD_NVIC_Configuration(); EXTI_Configuration(); PWR_PVDLevelConfig(PWR_PVDLevel_2V9);//2.8V;added for PDV;//有范围的; PWR_PVDCmd(ENABLE); //added for PDV; … … } //(除了用中断的方式,也可以用查询的方式:) if(PWR_GetFlagStatus(PWR_FLAG_PVDO)) { … … }
- (总结)STM32关于可编程电压检测器的运用
- stm32的可编程电压检测PVD
- STM32 可编程电压监测器(PVD)
- stm32 PVD 可编程电压监测器
- STM32关于PVD低电压能检测的知识
- STM32内置参照电压的使用(转)
- STM32内置参照电压的使用
- STM32内部参照电压VREFIN的使用
- STM32内部参照电压VREFIN的使用
- 关于STM32 64引脚和48引脚VDDA电压值
- CPU的工作电压(核心电压,I/O电压)
- STM32的ADC(DMA)读取电位器外设的电压值
- STM32芯片ADC内部的CH17参考电压的用途(转)
- 【程序】STM32单片机操作ST93C46存储器的程序(3.2V电压)
- 关于stm32库函数应用的总结
- 关于使用STM32 SPI3的一些总结
- 关于 stm32 启动文件的总结
- 关于指针运用的一点总结
- LINUX 信号机制
- 百度地图api之如何自定义标注图标
- 13-7-30 上下文菜单(contextMenu)
- Android的数据存取
- 制作 ramdisk.img,使用cpio 和 gzip
- (总结)STM32关于可编程电压检测器的运用
- fortran基础
- 文件过滤器
- Blender及其游戏引擎
- WPF学习开拔
- 1058. A+B in Hogwarts (20)- PAT
- 详解MyEclipse10 安装Spket 1.6.23(支持Extjs4.1.1及jQuery1.8)
- 学习运维
- 骑车与走路(二用到动态数组)