esp32 rtc 时钟设置不对_咱们RTC时钟案例的时间为什么开始的时候总是2014年,怎么改呢?...
[mw_shl_code=c,true]u8 RTC_Init(void)
{
//檢查是不是第一次配置時鐘
u8 temp=0;
RTC_NVIC_Config();
//if(BKP->DR1!=0X5050)//第一次配置
if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050)//從指定的后備寄存器中讀出數據:讀出了與寫入的指定數據不相等
{
/* Enable PWR and BKP clocks */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);//使能PWR和BKP外設時鐘
/* Allow access to BKP Domain */
PWR_BackupAccessCmd(ENABLE);//使能RTC和后備寄存器訪問
/* Reset Backup Domain */
BKP_DeInit();//將外設BKP的全部寄存器重設為缺省值
/* Enable LSE */
RCC_LSEConfig(RCC_LSE_ON);//設置外部低速晶振(LSE),使用外設低速晶振
/* Wait till LSE is ready */
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)//檢查指定的RCC標志位設置與否,等待低速晶振就緒
{
temp++;
delay_ms(10);
}
if(temp>=250)return 1;//初始化時鐘失敗,晶振有問題
/* Select LSE as RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//設置RTC時鐘(RTCCLK),選擇LSE作為RTC時鐘
/* Enable RTC Clock */
RCC_RTCCLKCmd(ENABLE);//使能RTC時鐘
/* Wait for RTC registers synchronization */
RTC_WaitForSynchro();//等待最近一次對RTC寄存器的寫操作完成
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();//等待最近一次對RTC寄存器的寫操作完成
/* Enable the RTC Second */
RTC_ITConfig(RTC_IT_SEC, ENABLE);//使能RTC秒中斷
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();//等待最近一次對RTC寄存器的寫操作完成
/* Set RTC prescaler: set RTC period to 1sec */
/* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
RTC_SetPrescaler(32767); //設置RTC預分頻的值
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();//等待最近一次對RTC寄存器的寫操作完成
RTC_Set(2011,12,20,10,0,0); //設置時間
BKP_WriteBackupRegister(BKP_DR1, 0X5050);//向指定的后備寄存器中寫入用戶程序數據
}
else//系統繼續計時
{
/* Check if the Power On Reset flag is set */
if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)//檢查指定的RCC標志位設置與否
OR/PDR復位
{
//printf("\rPower On Reset occurred....");
}
/* Check if the Pin Reset flag is set */
else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET)//檢查指定的RCC標志位設置與否:管腳復位
{
//printf("\rExternal Reset occurred....");
}
//printf("\rNo need to configure RTC....");
/* Wait for RTC registers synchronization */
RTC_WaitForSynchro();//等待最近一次對RTC寄存器的寫操作完成
/* Enable the RTC Second */
RTC_ITConfig(RTC_IT_SEC, ENABLE);//使能RTC秒中斷
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();//等待最近一次對RTC寄存器的寫操作完成
}
RTC_Get();//更新時間
/* Clear reset flags */
RCC_ClearFlag();//清除RCC的復位標志位
return 0; //ok
}[/mw_shl_code]
注意看這句,一般沒有電池的時候就是2011年了。
RTC_Set(2011,12,20,10,0,0); ?//設置時間
總結
以上是生活随笔為你收集整理的esp32 rtc 时钟设置不对_咱们RTC时钟案例的时间为什么开始的时候总是2014年,怎么改呢?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读后感300字作文大全
- 下一篇: python技术是什么_学 Python