OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3809|回复: 3

STM32 PVD断电检测

[复制链接]

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2017-8-11
在线时间
14 小时
发表于 2017-9-30 13:32:54 | 显示全部楼层 |阅读模式
2金钱
void PVD_Config(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
           /* Enable the PVD Interrupt */
   NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
   NVIC_Init(&NVIC_InitStructure);
          /* Configure EXTI Line16(PVD Output) to generate an interrupt on rising  edges */
   EXTI_ClearITPendingBit(EXTI_Line16);
   EXTI_InitStructure.EXTI_Line = EXTI_Line16;
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
   EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising; //电压从高电压下降到低于电压的阀值产生中断
   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
   EXTI_Init(&EXTI_InitStructure);         
         PWR_PVDLevelConfig(PWR_PVDLevel_2V9);
         PWR_PVDCmd(ENABLE);
}

void PVD_IRQHandler(void)
{  
         u16 ledflag[2]={7,6};
         if(PWR_GetFlagStatus(PWR_FLAG_PVDO))
         {
            EXTI_ClearITPendingBit(EXTI_Line16);
                  STMFLASH_Write(writeAddr,ledflag,2);          
         }
}

u16 led[2]={0};
int main(void)
{   
    u8 i=0;               
    RCC_Configuration();
          delay_init();
          LED_Init();
          PVD_Config();
                                                          
          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
          
          STMFLASH_Read(writeAddr,led,2);
          while(1)
                {      
                         if(led[0]==7)
                         {
                                  GPIO_ResetBits(GPIOE,GPIO_Pin_5);
                                  delay_ms(1000);
                                  GPIO_SetBits(GPIOE,GPIO_Pin_5);
                                  delay_ms(1000);
                         }
                         if(led[1]==8)
                         {
                                  GPIO_ResetBits(GPIOB,GPIO_Pin_5);
                                  delay_ms(1000);
                                  GPIO_SetBits(GPIOB,GPIO_Pin_5);
                                  delay_ms(1000);
                         }
                 }                                                
}
断电时,把局部数组的值写入Flash,  然后上电读出数据,判断数据点亮LED。  现在是第一次断电,上电后LED正常工作;第二次断电,上电后LED不工作;第三次断电,上电后工作LED;第四次断电,上电后不工作。 求大神指导

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-10-9 00:34:08 | 显示全部楼层
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2017-10-25
在线时间
17 小时
发表于 2017-10-25 12:31:05 | 显示全部楼层
电源换个大点儿电容试试,有可能掉电太快了
回复

使用道具 举报

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2017-8-11
在线时间
14 小时
 楼主| 发表于 2018-3-9 14:06:18 | 显示全部楼层
MortonTan 发表于 2017-10-25 12:31
电源换个大点儿电容试试,有可能掉电太快了

没用的
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-20 11:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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