×
单片机 > 单片机程序设计 > 详情

stm32F4电源管理PVD掉电数据存储

发布时间:2020-08-28 发布时间:
|

很多时候,我们希望我们的单片机在掉电后,可以对一些数据进行保存,下次上电可以读取这些数据,继续工作。现在我项目用到的是STM32F4单片机,利用STM32F4自带的PVD电源管理配置如下:


初始化PVD:


void PWR_PVD_Init(void) 

NVIC_InitTypeDef NVIC_InitStructure; 

EXTI_InitTypeDef EXTI_InitStructure;


RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR时钟


NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;           //使能PVD所在的外部中断通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;       //子优先级0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;          //使能外部中断通道

NVIC_Init(&NVIC_InitStructure);


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_InitStructure.EXTI_LineCmd = ENABLE;               //使能中断线

EXTI_Init(&EXTI_InitStructure);                         //初始


PWR_PVDLevelConfig(PWR_PVDLevel_7);//设定监控阀值   注意和F1的区别  F1的电压等级就更直观   PWR_PVDLevel_2V8 

PWR_PVDCmd(ENABLE);//使能PVD     


}


中断服务函数: 

void PVD_IRQHandler(void) 

static u16 MOTOR_absolute[4];


if(EXTI_GetITStatus(EXTI_Line16) != RESET)

{

    MOTOR_absolute[0]=Xabsolute;

    MOTOR_absolute[1]=Yabsolute;

    MOTOR_absolute[2]=Zabsolute;

    MOTOR_absolute[3]=Oabsolute;

    //掉电了紧急情况处理


    //写入坐标值到FLASH

    STMFLASH_Write(FLASH_SAVE_ADDR,(u32*)MOTOR_absolute,4);

    printf("%d %d %d %d ",Xabsolute,Yabsolute,Zabsolute,Oabsolute);


//不能写入外部FLASH  可能是电压原因,所以只能写入内部FLASH        

//  res=f_open (&fil,"1:/MOTOR_absolute.txt", FA_CREATE_ALWAYS|FA_WRITE);     //机械手的一些配置信息管理文件

//      

//  for(i=0;i<4;i++)

//  {

//      f_printf(&fil,"%x ",MOTOR_absolute[i]);

//      printf("%d ",MOTOR_absolute[i]);

//  }           


    /* Clear the Key Button EXTI line pending bit */

    EXTI_ClearITPendingBit(EXTI_Line16);

}


}


关键字:stm32F4  电源管理  PVD  掉电数据存储 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式