标题: STM32低压监测保护程序 [打印本页]

作者: niujia    时间: 2015-7-17 23:47
标题: STM32低压监测保护程序
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);   //退出前清中断标志位
}








欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1