请问我这个在里面已经设置了年月日 时分秒 但是 我串口打印的时候总是2000-0-0 但是秒数是有的不知道为什么?
/* 包含的头文件 --------------------------------------------------------------*/
#include "rtc.h"
/* 变量 ----------------------------------------------------------------------*/
__IO uint32_t AsynchPrediv = 0, SynchPrediv = 0;
#define RTC_CLOCK_SOURCE_LSI //使用LSI时钟
#define RTC_FLAG_BKP 0xA55A //标志
/************************************************
函数名称 : RTC_Configuration
功 能 : RTC配置
参 数 : 无
返 回 值 : 无
作 者 : MCD Application Team
*************************************************/
void RTC_Configuration(void)
{
/* 1、使用LSI时钟 */
#if defined (RTC_CLOCK_SOURCE_LSI)
RCC_LSICmd(ENABLE); //使能LSI时钟
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
{ //等待LSI就绪
}
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); //选择LSI时钟
SynchPrediv = 0x18F;
AsynchPrediv = 0x63;
/* 2、使用LSE时钟 */
#elif defined (RTC_CLOCK_SOURCE_LSE)
RCC_LSEConfig(RCC_LSE_ON); //使能LSI时钟
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{ //等待LSI就绪
}
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //选择LSI时钟
SynchPrediv = 0xFF;
AsynchPrediv = 0x7F;
#else
#error Please select the RTC Clock source inside the main.c file
#endif
RCC_RTCCLKCmd(ENABLE); //使能RTC
RTC_WaitForSynchro(); //等待同步
}
/************************************************
函数名称 : RTC_Initializes
功 能 : RTC初始化
参 数 : 无
返 回 值 : 无
作 者 : Huang Fugui
*************************************************/
void RTC_Initializes(void)
{
RTC_InitTypeDef RTC_InitStructure;
RTC_DateTimeTypeDef RTC_DateTimeStructure;
PWR_BackupAccessCmd(ENABLE); //允许操作RTC
if(RTC_ReadBackupRegister(RTC_BKP_DR0) != RTC_FLAG_BKP)
{
RTC_Configuration(); //配置RTC
RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv;
RTC_InitStructure.RTC_SynchPrediv = SynchPrediv;
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
if(RTC_Init(&RTC_InitStructure) == ERROR)
{
while(1); //初始化失败
}
RTC_DateTimeStructure.Year = 16;
RTC_DateTimeStructure.Month = 6;
RTC_DateTimeStructure.Date = 5;
RTC_DateTimeStructure.Week = 7;
RTC_DateTimeStructure.Hour = 1;
RTC_DateTimeStructure.Minute = 1;
RTC_DateTimeStructure.Second = 0;
RTC_SetDateTime(RTC_DateTimeStructure); //首次初始化RTC(2016年6月5日 周七 12:00:00)
RTC_WriteBackupRegister(RTC_BKP_DR0, RTC_FLAG_BKP);
}
else
{
#ifdef RTC_CLOCK_SOURCE_LSI
RCC_LSICmd(ENABLE);
#endif
RTC_WaitForSynchro(); //等待RTC与RTC_APB时钟同步
}
}
/************************************************
函数名称 : RTC_DateRegulate
功 能 : RTC日期矫正
参 数 : RTC_DateTimeStructure -- RTC结构体
返 回 值 : RTC_OK ----------------- 成功
RTC_ERR ---------------- 错误
作 者 : Huang Fugui
*************************************************/
RTC_RESULT RTC_DateRegulate(RTC_DateTimeTypeDef RTC_DateTimeStructure)
{
RTC_DateTypeDef RTC_DateStructure;
RTC_DateStructure.RTC_Year = RTC_DateTimeStructure.Year;
RTC_DateStructure.RTC_Month = RTC_DateTimeStructure.Month;
RTC_DateStructure.RTC_Date =RTC_DateTimeStructure.Date;
RTC_DateStructure.RTC_WeekDay = RTC_DateTimeStructure.Week;
if(RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure) == SUCCESS)
{
return RTC_OK;
}
else
{
return RTC_ERR;
}
}
/************************************************
函数名称 : RTC_TimeRegulate
功 能 : RTC时间矫正
参 数 : RTC_DateTimeStructure -- RTC结构体
返 回 值 : RTC_OK ----------------- 成功
RTC_ERR ---------------- 错误
作 者 : Huang Fugui
*************************************************/
RTC_RESULT RTC_TimeRegulate(RTC_DateTimeTypeDef RTC_DateTimeStructure)
{
RTC_TimeTypeDef RTC_TimeStructure;
RTC_TimeStructure.RTC_H12 = RTC_H12_AM;
RTC_TimeStructure.RTC_Hours = RTC_DateTimeStructure.Hour;
RTC_TimeStructure.RTC_Minutes = RTC_DateTimeStructure.Minute;
RTC_TimeStructure.RTC_Seconds = RTC_DateTimeStructure.Second;
if(RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure) == SUCCESS)
{
return RTC_OK;
}
else
{
return RTC_ERR;
}
}
/************************************************
函数名称 : RTC_SetDateTime
功 能 : RTC日期时间设置
参 数 : RTC_DateTimeStructure -- RTC结构体
返 回 值 : RTC_OK ----------------- 成功
RTC_ERR ---------------- 错误
作 者 : Huang Fugui
*************************************************/
RTC_RESULT RTC_SetDateTime(RTC_DateTimeTypeDef RTC_DateTimeStructure)
{
if(RTC_ERR == RTC_DateRegulate(RTC_DateTimeStructure))
{
return RTC_ERR;
}
if(RTC_ERR == RTC_TimeRegulate(RTC_DateTimeStructure))
{
return RTC_ERR;
}
return RTC_OK;
}
/************************************************
函数名称 : RTC_GetDateTime
功 能 : 读取RTC日期时间(含日历、星期)
参 数 : RTC_DateTimeStructure -- RTC结构体
返 回 值 : 无
作 者 : Huang Fugui
*************************************************/
void RTC_GetDateTime(RTC_DateTimeTypeDef *RTC_DateTimeStructure)
{
RTC_DateTypeDef RTC_DateStructure;
RTC_TimeTypeDef RTC_TimeStructure;
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
RTC_DateTimeStructure->Year = RTC_DateStructure.RTC_Year;
RTC_DateTimeStructure->Month = RTC_DateStructure.RTC_Month;
RTC_DateTimeStructure->Date = RTC_DateStructure.RTC_Date;
RTC_DateTimeStructure->Week = RTC_DateStructure.RTC_WeekDay;
RTC_DateTimeStructure->Hour = RTC_TimeStructure.RTC_Hours;
RTC_DateTimeStructure->Minute = RTC_TimeStructure.RTC_Minutes;
RTC_DateTimeStructure->Second = RTC_TimeStructure.RTC_Seconds;
}
/**** Copyright (C)2016 strongerHuang. All Rights Reserved **** END OF FILE ****/
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我也发现RTC init返回ERROR;
跟踪下来是RTC_EnterInitMode 里面的判断返回错误导致;请问有遇到么?
RTC_EnterInitMode entry isr 7
RTC_EnterInitMode to 10000 isr 87
RTC_EnterInitMode st 0
rtc init fail !
一周热门 更多>