找回密码
 注册
关于网站域名变更的通知

STM32的RTC怎么配置

2025-3-21 14:08| 查看: 85| 评论: 0

摘要: RTC配置:1.打开电源管理和备份寄存器时钟。这个在RCC配置中打开。RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);2.使能RTC和备份寄存器的访问(复位默认关闭)。PWR_BackupAccessCmd(ENA ...
RTC配置:
1.打开电源管理和备份寄存器时钟。这个在RCC配置中打开。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
2.使能RTC和备份寄存器的访问(复位默认关闭)。
PWR_BackupAccessCmd(ENABLE);
3.检查电池是否断电过(是否RTC初始化过),通过的话直接跳到第4步。
if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)
{
A. BKP_DeInit();//BKP寄存器全部设为缺省值
B. RCC_LSEConfig(RCC_LSE_ON); //RCC打开了LSE时钟
C. while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);//等待LSE就绪,如果谐振不对,就会死在这里.
D. RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//RTC使用时钟源LSE
E. RCC_RTCCLKCmd(ENABLE);//RTC的时钟开启
F. RTC_WaitForSynchro();//RTC等待同步
G. RTC_WaitForLastTask();//等待就绪
H. RTC_ITConfig(RTC_IT_SEC, ENABLE); // 使能RTC秒中断
I. RTC_SetPrescaler(32767);//RTC预分频,32768HZ
J. RTC_WaitForLastTask();
K. BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);//往备份域寄存器中写一个特殊的字符
L. SetDateTime((TagDateTime *)&DefaultSystime); //设置一个初始时间
PWR_BackupAccessCmd(DISABLE);//禁止RTC后备寄存器的写???
M. RCC_CleaRFlag(); //清除RCC重启标志
}
else
{
4.RTC_WaitForSynchro();//RTC等待同步
5.AdjustRtcTime();//配置系统时间,主要是考虑到断电重启如何恢复系统时间
6.RTC_ITConfig(RTC_IT_SEC, ENABLE); // 使能RTC秒中断
7.RTC_WaitForLastTask();
PWR_BackupAccessCmd(DISABLE);//禁止RTC后备寄存器的写???
8.RCC_ClearFlag(); //清除RCC重启标志
}
对了前提还必须对RTC中断进行配置:

NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
注意:
1. 上电后要检查备份电池有没有断过电。如何检查? 恩,RTC的示例代码中已经明示:
往备份域寄存器中写一个特殊的字符(0xA5A5),备份域寄存器是和RTC一起在断电下能保存数据的。
上电后检查下这个特殊字符是否还存在,如果存在,ok,RTC的数据应该也没丢,不需要重新配置它
如果那个特殊字符丢了,那RTC的定时器数据一定也丢了,那我们要重新来配置RTC了
这个过程包括时钟使能、RTC时钟源切换、设置分频系数等等,这个可以参考FWLibexampleRTCCalendar的代码
在我的这个实例里,检查备份域掉电在Init.c的RTC_Conig()中,函数内若检测到BKP掉电,则会调用RTC_Configuration()

2. 因为RTC的一些设置是保存在后备域中的,so,操作RTC的设置寄存器前,要打开后备域模块中的写保护功能。
3. RTC设定值写入前后都要检查命令有没有完成,调用RTC_WaitForLastTask();

STM32的32.768K 晶振,必须要小心!!
一定要使用6pf负载电容的晶振。
STM32的32.768Hz的晶振要求使用6pf负载电容的晶振,也就是说购买时要指定这种晶振,同时晶振两端的电容也要用6pf的电容。
试验的时候发现12.5pf的晶振好像也能工作,其实不然,环境温度一降低,晶振启动时间就显著加长(其实是在加热,温度够热差不多能启动起来)。


本站资讯文章系编辑转载,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!
[声明]本站文章版权归原作者所有 内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。
本站拥有对此声明的最终解释权。
收藏 邀请
关闭

推荐内容上一条 /1 下一条

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-3 02:54 , Processed in 0.109375 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

返回顶部