完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 MMCU5721167 于 2017-11-16 15:45 编辑 来源 灵动MM32 在应用开发中,通常需要考虑当系统供电电压下降或掉电突发状况时,需对控制系统加以保护,防止出现意外,故在程序中需要加入对系统电压的监控。当供电电压降低到某一电压值时,需要系统进入特别保护状态,执行紧急关闭任务:对系统的一些数据保存起来,同时对外设进行相应的保护操作。 MM32L0系列产品的工作电压(VDD)为 2.0V ~ 5.5V。通过内置的电压调节器提供所需的 1.5V 电源。 注: VDDA 和 VSSA 必须分别连到 VDD和 VSS。 MM32L0系列产品内部有一个完整的上电复位(POR)和掉电复位(PDR)电路,当供电电压达到 2.0V 时系统才能正常工作。 当 VDD/VDDA 低于指定的限位电压 VPOR/VPDR时,系统保持为复位状态,而无需外部复位电路。 POR = Power On Reset 上电复位;PDR = Power DownReset 掉电复位。 POR的功能是在VDD电压由低向高上升越过规定的阀值之前,保持芯片复位,当越过这个阀值后的一小段时间后(图中的"滞后时间"或表中的"复位迟滞"),结束复位并取复位向量,开始执行指令。当VDD上升越过POR阀值时,内部并不马上结束复位,而是等待一小段时间(Reset temporization)。Reset temporization是为了等待供电电压能够升高到最低可靠工作电压以上,我们看到POR阀值典型值只有1.656V(参考MM32 DS手册表内嵌复位和电源控制模块特性),低于数据手册中给出的最低可靠工作电压2.0V,所以这个滞后时间是十分必要的,如果供电电压上升缓慢,尤其是从1.8V升到2.0V以上超过1~2.5ms,则很可能造成上电复位后MCU不能正常工作的情况。 PDR功能是在VDD电压由高向低下降越过规定的阀值后,将在芯片内部产生复位。 MM32内部自带PVD功能,用于对MCU供电电压VDD进行监控。通过电源控制寄存器中的PLS[12:9]位来设定监控电压的阀值,通过对外部电压进行比较来监控电源。当条件触发,需要系统进入特别保护状态,执行紧急关闭任务:对系统的一些数据保存起来,同时对外设进行相应的保护操作。 用户可以利用 PVD 对 VDD电压与电源控制寄存器(PWR_CTRL)中的PLS[12:9]位进行比较来监控电源,这几位选择监控电压的阀值。 PVD = Programmable Votage Detector 可编程电压监测器,它的作用是监视供电电压,在供电电压下降到给定的阀值以下时,产生一个中断,通知软件做紧急处理。 PLS[12:9]位用于选择PVD监控电源的电压阀值: 0000:1.8V 0101:3.3V 1010:4.8V 0001:2.1V 0110:3.6V 0010:2.4V 0111:3.9V 0011:2.7V 1000:4.2V 0100:3.0V 1001:4.5V 电源控制/状态寄存器(PWR_CSTA)中的 PVDO 标志用来表明 VDD是高于还是低于 PVD 的电压阀值。该事件在内部连接到外部中断的第 16线,如果该中断在外部中断寄存器中是使能的,该事件就会产生中断。当 VDD下降到 PVD 阀值以下和(或)当 VDD 上升到 PVD 阀值之上时,根据外部中断第 16 线的上升/下降边沿触发设置,就会产生 PVD 中断。例如,这一特性可用于用于执行紧急关闭任务。 一、库函数操作流程(中断方式): 1)、电源接口时钟使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE); 2)、PWR_PVDLevelConfig(PWR_PVDLevel_4V2); // 设定监控阀值 3)、PWR_PVDCmd(ENABLE); // 使能PVD 4)、EXTI_ClearITPendingBit(EXTI_Line16);//清中断 5)、EXTI_InitStructure.EXTI_Line = EXTI_Line16; // PVD连接到中断线16上 6)、EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //使用中断模式 7)、EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;//表示电压上升或下降越过设定阀值时都产生中断 8)、EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 使能中断线 9)、EXTI_Init(&EXTI_InitStructure); // 初始化 EXTI_InitStructure.EXTI_Trigger的赋值可选项: EXTI_Trigger_Rising---表示电压从高下降到低于设定阀值时产生中断; EXTI_Trigger_Falling---表示电压从低上升到高于设定阀值时产生中断; EXTI_Trigger_Rising_Falling---表示电压上升或下降越过设定阀值时都产生中断。 10)、中断优先级配置 NVIC_InitStructure.NVIC_IRQChannel =PVD_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority =0; NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE; NVIC_Init(&NVIC_InitStructure); 2、当工作电压低于设定阀值时,将产生PVD中断,在中断程序中进行相应的处理: void PVD_IRQHandler(void) { if( RESET !=EXTI_GetITStatus(EXTI_Line16)) { EXTI_ClearITPendingBit(EXTI_Line16); …… // 用户添加紧急处理代码处 WriteToBackupReg(0x3210);//往BKP寄存器里面存数据 } } 在测试的例程中,配置的PVD工作方式为中断上升和下降沿触发,当VDD高于预设PVD阈值或者低于阈值而产生边沿触发时,都会形成一次PVD中断,然后读取PWR_CSR的PVDO标志位检查是低电压提醒还是高电压提醒,以此来达到监控MCU供电情况的目的。 二、寄存器操作流程(查询方式): 1)、电源接口时钟使能 RCC->APB1ENR |= 0x10000000; 2)、设置阈值电压,电源电压检测器(PVD)使能 PWR->CR =0x1010; //电压检测阈值=4.2v,PVDE=1使能 3)、等待PVDO输出状态 if((PWR->CSR&0x0004) !=0) { SCB->AIRCR =0x05fa0004;//软件复位 } else { WriteToBackupReg(0x3210);//往BKP寄存器里面存数据 return; } 小结: 1、 MM32L0系列产品 PVD所对应的时钟挂在APB1上,在使用PVD功能时需要使能PWR时钟。 2、 使用寄存器配置如何判断掉电过程还是还是上电过程?
|
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
2206个成员聚集在这个小组
加入小组灵动微电子MM32全系列MCU产品应用手册,库函数和例程和选型表
10774 浏览 3 评论
【MM32 eMiniBoard试用连载】+基于OLED12864的GUI---U8G2
5676 浏览 1 评论
【MM32 eMiniBoard试用连载】移植RT-Thread至MM32L373PS
10524 浏览 0 评论
【MM32 eMiniBoard测评报告】+ 开箱 + 初探
4384 浏览 1 评论
灵动微课堂(第106讲) | MM32 USB功能学习笔记 —— WinUSB设备
4078 浏览 1 评论
[MM32软件] MM32F002使用内部flash存储数据怎么操作?
616浏览 1评论
532浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-20 06:04 , Processed in 0.598865 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号