本文主要是介绍STM32标准库开发—实时时钟(BKP+RTC),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
BKP配置结构
注意事项
BKP基本操作
时钟初始化
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);PWR_BackupAccessCmd(ENABLE);//设置PWR_CR的DBP,使能对PWR以及BKP的访问
读写寄存器操作
uint16_t ArrayWrite[] = {0x1234, 0x5678};BKP_WriteBackupRegister(BKP_DR1, ArrayWrite[0]);BKP_WriteBackupRegister(BKP_DR2, ArrayWrite[1]);uint16_t ArrayRead[2];ArrayRead[0] = BKP_ReadBackupRegister(BKP_DR1);ArrayRead[1] = BKP_ReadBackupRegister(BKP_DR2);
RTC配置结构
RTC实现实时时钟
设置时间函数,已经手动更改为东八区时间,默认情况下time.h里为伦敦时区
void MyRTC_SetTime(void)
{time_t time_cnt;struct tm time_date;time_date.tm_year = MyRTC_Time[0] - 1900;time_date.tm_mon = MyRTC_Time[1] - 1;time_date.tm_mday = MyRTC_Time[2];time_date.tm_hour = MyRTC_Time[3];time_date.tm_min = MyRTC_Time[4];time_date.tm_sec = MyRTC_Time[5];time_cnt = mktime(&time_date) - 8 * 60 * 60;RTC_SetCounter(time_cnt); //设置CNT寄存器的值RTC_WaitForLastTask();
}
RTC初始化函数,32.768KHZ晶振
void MyRTC_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//时钟初始化RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);//时钟初始化PWR_BackupAccessCmd(ENABLE);if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)//如果系统完全断电才需初始化{RCC_LSEConfig(RCC_LSE_ON);//选择LSE的时钟while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) != SET);RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);RCC_RTCCLKCmd(ENABLE);//为了防止时钟不同步,必须写入以下这俩条RTC_WaitForSynchro(); //查询RSF标志位RTC_WaitForLastTask(); //查询RTOFF标志位RTC_SetPrescaler(32768 - 1);RTC_WaitForLastTask();MyRTC_SetTime();BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);//设置BKP的值}else{RTC_WaitForSynchro();RTC_WaitForLastTask();}
}
时钟旁路选择
RCC_LSEConfig可以选择Bypass,旁路时钟信号,这意味着可以外部生成电平信号作为时钟信号,而这个信号的引脚名称是OSE32_IN
这篇关于STM32标准库开发—实时时钟(BKP+RTC)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!