微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > stm32 利用备份寄存器保存实时时钟数据

stm32 利用备份寄存器保存实时时钟数据

时间:11-09 来源:互联网 点击:
stm32f10x_it.c
/** Function Name  : RTC_IRQHandler* Description    : This function handles RTC global interrupt request.* Input          : None* Output         : None* Return         : None*/void RTC_IRQHandler(void){if(RTC_GetITStatus(RTC_IT_SEC) != RESET)				 //读取秒中断状态{RTC_ClearITPendingBit(RTC_IT_SEC);					 //清除秒中断标志			    /* 时钟更新标志置位 */TimeDisplay = 1;	  RTC_WaitForLastTask();							     //等待上一次对RTC寄存器的写操作是否已经完成    if(RTC_GetCounter() == 0x0001517F)				     //当前时间是23:59:59时 复位为0:0:0 	    {RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);PWR->CR|=1<8;                  					 //取消备份区写保护RTC_EnterConfigMode();						     //允许配置 	  				RTC_WaitForLastTask();                             //等待上一次对RTC寄存器的写操作是否已经完成 RTC_SetCounter(0x0);								 //写入复位值RTC_WaitForLastTask();							 //等待上一次对RTC寄存器的写操作是否已经完成 CalenderCount();BKP_WriteBackupRegister(BKP_DR2,GetYear());BKP_WriteBackupRegister(BKP_DR3,GetMonth());  BKP_WriteBackupRegister(BKP_DR4,GetDay());}else if(RTC_GetCounter() > 0x0001517F)				 //当再次上电后计数值超过0x00015180, 复位为当前值取模0x00015180。	    {RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);PWR->CR|=1<8;                                     //取消备份区写保护RTC_EnterConfigMode();			                 //允许配置 RTC_WaitForLastTask();                             //等待上一次对RTC寄存器的写操作是否已经完成    RTC_SetCounter(RTC_GetCounter()%0x0001517F);		 //写入复位值RTC_WaitForLastTask();							 //等待上一次对RTC寄存器的写操作是否已经完成 CalenderCount();BKP_WriteBackupRegister(BKP_DR2,GetYear());BKP_WriteBackupRegister(BKP_DR3,GetMonth());  BKP_WriteBackupRegister(BKP_DR4,GetDay());}}}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top