发新帖我要提问
12
返回列表
打印
[应用相关]

STM32 RTC介绍

[复制链接]
楼主: junpeng324
手机看帖
扫描二维码
随时随地手机跟帖
21
junpeng324|  楼主 | 2018-5-29 09:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
RTC 初始化写入时间函数如下:
void clockinit_RTC()
{
if(BKP_ReadBackupRegister(BKP_DR1)!=0XA5A5)//从指定的后备寄存器中读出数据
{
//第一次运行 初始化设置
//RTC 初始化
rtc_init();
RTC_WaitForLastTask();//等待最近一次对 RTC 寄存器的写操作完成
RTC_SetCounter(0x9f92);//设置 RTC 计数器的值 11:20:50
RTC_WaitForLastTask();
BKP_WriteBackupRegister(BKP_DR1,0xA5A5);
}
else
{
RTC_WaitForSynchro();//等待 RTC 寄存器同步
RTC_WaitForLastTask();//等待写 RTC 寄存器完成
RTC_ITConfig(RTC_IT_SEC,ENABLE);//使能 RTC 秒中断
RTC_WaitForLastTask();//等待写 RTC 寄存器完成
}
RCC_ClearFlag();//清除复位标志;
}

使用特权

评论回复
22
junpeng324|  楼主 | 2018-5-29 09:43 | 只看该作者
RTC 中断函数:
void RTC_IRQHandler() //RTC 实时时钟
{
if(RTC_GetITStatus((RTC_IT_SEC))!=RESET)
{
RTC_ClearITPendingBit(RTC_IT_SEC);
timebz=1;
}
}

使用特权

评论回复
23
junpeng324|  楼主 | 2018-5-29 09:43 | 只看该作者
u16 hour=0,min=0,sec=0;
u32 timedata=0;
rtc_init(); //RTC 配置初始化
clockinit_RTC(); //时间初始化
printf_init(); //printf 初始化
while(1)
{
if(timebz==1)  //时钟秒中断
{
timebz=0;  //清零
timedata=RTC_GetCounter();//获取 RTC 计数器的值
hour=timedata/3600; //以秒为单位计算时间
min=(timedata%3600)/60;
sec=timedata%60;
printf("RTC time is: %0.2d:%0.2d:%0.2d\r\n",hour,min,sec);
}
}

使用特权

评论回复
24
junpeng324|  楼主 | 2018-5-29 09:44 | 只看该作者
主程序的效果是,中断一次就读取 RTC 计数器的值,通过数据转换,将读取的时分秒通过
printf 输出到串口助手上

使用特权

评论回复
25
junpeng324|  楼主 | 2018-5-29 09:49 | 只看该作者
RTC的时间被打印出来。

使用特权

评论回复
26
junpeng324|  楼主 | 2018-5-29 09:50 | 只看该作者
tomyoct 发表于 2018-5-29 09:13
支持下,但是这个RTC确实没有DS1302等方便的,自动计算时间。

这个可以不用再外接IO了,也不用添加硬件,还是比较方便的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则