RTC初始化程序如下,试了LSE、LSI都没有效果,请行家指导一下。
u8 user_RTC_Init(void)
{
u8 temp=0;
//RTC_Init(RTC_InitTypeDef * RTC_InitStruct);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //pwr
PWR_BackupAccessCmd(ENABLE); //enable rtc access
if (RTC_ReadBackupRegister(RTC_BKP_DR1) != 0x5050)
{
RCC_LSICmd(ENABLE);
//RCC_LSEConfig(RCC_LSE_ON); //LSE
//while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) //wait for LSE
while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
{
temp++;
}
//if(temp>=250)return 1; //fail
//RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //LSE as rtc clk
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
RCC_RTCCLKCmd(ENABLE); //enable rtc
RTC_WaitForSynchro(); //等待RTC寄存器同步
RTC_ITConfig(RTC_IT_TS, ENABLE); //使能RTC秒中断
RTC_ITConfig(RTC_IT_ALRA, ENABLE);
RTC_EnterInitMode();
//RTC_SetPrescaler(32767); //设置RTC预分频的值
RTC_Set(2009,12,2,10,0,55); //设置时间
RTC_ExitInitMode(); //退出配置模式
}
else //系统继续计时
{
RTC_WaitForSynchro(); //等待最近一次对RTC寄存器的写操作完成
RTC_ITConfig(RTC_IT_TS, ENABLE); //使能RTC秒中断
}
RTC_NVIC_Config(); //RCT中断分组设置
RTC_Get(); //更新时间
return 0; //ok
}
中断程序如下
void RTC_IRQHandler(void)
{
u8 res;
if (RTC_GetITStatus(RTC_IT_TS) != RESET)
{
RTC_Get();
}
if(RTC_GetITStatus(RTC_IT_ALRA)!= RESET)
{
RTC_ClearITPendingBit(RTC_IT_ALRA);
}
RTC_ClearITPendingBit(RTC_IT_TS|RTC_IT_ALRA);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>