找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4002|回复: 0
收起左侧

STM32低压监测保护程序

[复制链接]
ID:85764 发表于 2015-7-17 23:47 | 显示全部楼层 |阅读模式
STM32内部自带PVD功能,用于对MCU供电电压VDD进行监控。通过电源控制寄存器中的PLS[2:0]位可以用来设定监控电压的阀值,通过对外部电压进行比较来监控电源。当条件触发,需要系统进入特别保护状态,执行紧急关闭任务:对系统的一些数据保存起来,同时对外设进行相应的保护操作。
源码实现: void PVD_Config(void)
{
   EXTI_InitTypeDef EXTI_InitStructure;
   NVIC_InitTypeDef NVIC_InitStructure;
   //掉电时钟开启,必须开启
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
  
   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_Rising---表示电压从高下降到低于设定阀值时产生中断;
   //EXTI_Trigger_Falling---表示电压从低上升到高于设定阀值时产生中断;
   //EXTI_Trigger_Rising_Falling---表示电压上升或下降越过设定阀值时都产生中断。
   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//电压低于阀值时产生中断
   EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 使能中断线
   EXTI_Init(&EXTI_InitStructure); //初始


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组,2及抢占,2级优先
NVIC_InitStructure.NVIC_IRQChannel=PVD_IRQn;//设置中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级2
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;//使能中断
NVIC_Init(&NVIC_InitStructure);


PWR_PVDLevelConfig(PWR_PVDLevel_2V9); //设定监控阀值:2.9V  
       PWR_PVDCmd(ENABLE); //使能PVD
}

void PVD_IRQHandler(void)
{
   if(EXTI_GetITStatus(EXTI_Line16)!=RESET)
   {
printf("电压不足\n\r");
LED1(ON);
//用户添加紧急处理代码处
   }
   EXTI_ClearITPendingBit(EXTI_Line16);   //退出前清中断标志位
}



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表