用STM32的PVD功能实现掉电保存,不成功,求帮助

2019-08-14 19:30发布

本帖最后由 rjx007 于 2017-8-2 14:17 编辑

想用STM32的PVD功能来实现掉电保存数据,但不成功,请帮我看看是什么原因。当达到设定的阈值时产生中断,此时将数据写入AT24C02,24C02的写入是没有问题的,已用其他方式试过。

void pvd_init(void)           //
{        

        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;        

        /* 开启PVD时钟 */
         RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);        //开启PVD时钟  

        /* 设置中断的模式 */         
        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);
        
        /* 设置NVIC参数 */        
        //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);                 
        NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;         //打开PVD中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级为0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                  //响应优先级为3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                   //使能
        NVIC_Init(&NVIC_InitStructure);
        
       PWR_PVDCmd(ENABLE);
       PWR_PVDLevelConfig(PWR_PVDLevel_2V9);       // 设定监控阀值            
}


void PVD_IRQHandler()           //PVD中断函数
{
        
        if(PWR_GetFlagStatus(PWR_FLAG_PVDO))
            {
                  
                  AT24CXX_WriteOneByte(0x02,VOLUME_1); //write_eep(0x02,VOLUME_1);         
                  delay_ms(10);                 
           }
        EXTI_ClearITPendingBit(EXTI_Line16);//清除EXTI线路挂起位        
}





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。