配置RTC寄存器的详细步骤 RTC相关库函数说明

描述

配置RTC寄存器:
1.查询RTOFF位,知道RTOFF的值为1.

2.置CNF值为1,进入配置模式。

3.对一个或者多个RTC寄存器进行写操作。

4.清除CNF标志位,退出配置模式。

5.查询RTOFF,直到RTOFF位变1,已确认写操作已经完成。

仅当CNF标志位被清除时,写操作才能进行,这个操作至少需要3个RTCCLK周期。

RTC

RTC相关库函数

RTC时钟源和时钟操作函数:

 

void RCC_RTCCLKConfig(uint32_t  CLKSource);//时钟源选择
void RCC_RTCCLKCmd(FunctionalState NewState)//时钟使能

RTC配置函数(预分频,计数值):

void RTC_SetPrescaler(uint32_t PrescalerValue);//预分频配置:PRLH/PRLL
void RTC_SetCounter(uint32_t CounterValue);//设置计数器值:CNTH/CNTL
void RTC_SetAlarm(uint32_t AlarmValue);//闹钟设置:ALRH/ALRL

RTC中断设置函数:

void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState);//CRH

RTC配置函数:

void RTC_EnterConfigMode(void);//允许RTC配置 :CRL位 CNF
void RTC_ExitConfigMode(void);//退出配置模式:CRL位 CNF

RTC同步函数:

void RTC_WaitForLastTask(void);//等待上次操作完成:CRL位RTOFF
void RTC_WaitForSynchro(void);//等待时钟同步:CRL位RSF

相关状态位获取清除函数:

FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG);
void RTC_ClearFlag(uint16_t RTC_FLAG);
ITStatus RTC_GetITStatus(uint16_t RTC_IT);
void RTC_ClearITPendingBit(uint16_t RTC_IT);

其他相关函数(BKP等)

PWR_BackupAccessCmd();//BKP后备区域访问使能
RCC_APB1PeriphClockCmd();//使能PWR和BKP时钟
RCC_LSEConfig();//开启LSE,RTC选择LSE作为时钟源 
PWR_BackupAccessCmd();//BKP后备区域访问使能
uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR);//读BKP寄存器
void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data);//写BKP

配置RTC步骤
①使能PWR和BKP时钟:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
1
② 使能后备寄存器访问:
PWR_BackupAccessCmd(ENABLE); //使能 RTC 和后备寄存器访问
1
③复位备份区域,开启外部低速振荡器。
BKP_DeInit();//复位备份区域
1
④ 配置RTC时钟源,使能RTC时钟:
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //选择 LSE 作为 RTC 时钟(RCC_RTCCLKSource_LSI 和 RCC_RTCCLKSource_HSE_Div128)
RCC_RTCCLKCmd(ENABLE); //使能 RTC 时钟
1
2
⑤ 设置RTC预分频系数:RTC_SetPrescaler();
RTC_EnterConfigMode();/// 允许配置 
RTC_SetPrescaler(32767); //设置RTC预分频的值
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成

⑥ 设置时间:

RTC_SetCounter();
RTC_EnterConfigMode();/// 允许配置
void RTC_SetCounter(uint32_t CounterValue);
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成

⑦开启相关中断(可选):

void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState);//RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能 RTC 秒中断

⑧编写中断服务函数:

RTC_IRQHandler();

⑨部分操作要等待写操作完成和同步。

  RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成
  RTC_WaitForSynchro(); //等待RTC寄存器同步

具体的代码,库函数写的太多了,我会用CubeMx配置下,用HAL库写一个例程,几十行就可以解决RTC
 

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分