STM32的实时时钟是一个独立的定时器

通常会在后备区域供电端加一个纽扣电池,当主电源没有电的时,RTC不会停止工作

若VDD电源有效,RTC可以触发秒中断、溢出中断和闹钟中断

备份寄存器BKP

备份寄存器是42个16位的寄存器,他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒或系统复位或电源复位时,他们也不会被复位

RTC配置步骤

1.使能电源时钟和后备区域时钟

2.取消后备区域的写保护,DBP

3.复位备份区域

4.外部低速振荡器使能,LSE

5.RTC时钟源选择,LSE

6.RTC时钟使能

7.进入配置模式

8.设置RTC预分频装载值

9.设置RTC计数器值

10.退出配置模式

11.初始化NVIC外设,设置RTC中断优先级

12.编写RTC中断处理函数

举例

typedef struct
{
u32 hour;
u32 min;
u32 sec;
}time_t;
time_t g_time; void RTC_get()
{
u32 counter; counter = RTC_GetCounter(); //读取计数器值
g_time.hour = counter / 3600;
g_time.min = (counter % 3600) / 60 ;
g_time.sec = counter % 60 ;
} void RTC_IRQHandler()
{
if(RTC_GetFlagStatus(RTC_FLAG_SEC) == SET)
{
RTC_get();
printf("time %02d:%02d:%02d\n", g_time.hour, g_time.min, g_time.sec);
}
RTC_ClearFlag(RTC_FLAG_SEC);
} void RTC_init()
{
u16 bkp_data = 0xa5a5;
u16 prescaler = 32768 - 1;
NVIC_InitTypeDef nvic =
{
RTC_IRQn,
2,
2,
ENABLE
}; RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能电源时钟和后备区域时钟 PWR_BackupAccessCmd(ENABLE); //取消后备区域的写保护 if(BKP_ReadBackupRegister(BKP_DR1) != bkp_data) //读备份数据
{
BKP_DeInit(); //复位备份区域 RCC_LSEConfig(RCC_LSE_ON); //外部低速振荡器使能
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) != SET)
{
delay_ms(10);
} RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //LSE振荡器作为RTC时钟
RCC_RTCCLKCmd(ENABLE); //RTC时钟开启
RTC_WaitForLastTask(); //RTC操作关闭(上一次对RTC寄存器的写操作已经完成)
RTC_WaitForSynchro(); //寄存器同步标志(寄存器已经被同步) RTC_ITConfig(RTC_IT_SEC, ENABLE); //屏蔽中断请求(允许秒中断)
RTC_WaitForLastTask(); RTC_EnterConfigMode(); //配置标志(进入配置模式) RTC_SetPrescaler(prescaler); //预分频装载值
RTC_WaitForLastTask(); RTC_SetCounter(0xf73f); //设置计数器值(17:34:55)
RTC_WaitForLastTask(); RTC_ExitConfigMode(); //退出配置模式(开始更新RTC寄存器) BKP_WriteBackupRegister(BKP_DR1, bkp_data); //写备份数据
}
else
{
RTC_WaitForSynchro();
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
} NVIC_Init(&nvic); RTC_get();
}

stm32 rtc 实时时钟的更多相关文章

  1. stm32——RTC实时时钟

    stm32——RTC实时时钟 一.关于时间 2038年问题 在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作.所有使用UNIX时间表示时间的程序都将将受其影响,因为它们以自19 ...

  2. 第43章 RTC—实时时钟

    第43章     RTC—实时时钟 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fireg ...

  3. 教你在树莓派使用上RTC实时时钟,不用再担心断电后时间归零的问题,开机后自动同步RTC时钟!!!

    准备工作:1.系统建议使用官方最新的镜像文件 2.RTC时钟模块板(I2C接口)建议使用DS1307时钟模块,或者RTC时钟模块RTC时钟模块: 大家知道arduino的电平是5V,树莓派是3.3V, ...

  4. 第43章 RTC—实时时钟—零死角玩转STM32-F429系列

    第43章     RTC—实时时钟 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fireg ...

  5. RTC实时时钟驱动

    RTC(Real-Time Clock)实时时钟为操作系统提供了一个可靠的时间,并且在断电的情况下,RTC实时时钟也可以通过电池供电,一直运行下去. RTC通过STRB/LDRB这两个ARM指令向CP ...

  6. RTC实时时钟

    作者:宋老师,华清远见嵌入式学院讲师. 1.1 RTC介绍 在 一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备 ...

  7. RTC实时时钟-备份区域BKP--原理讲解

    RTC(Real Time Clock):实时时钟 BCD码:用4位2进制来表示10以内的十进制的形式. RTC的时钟源:LSE(32.768KHZ).HSE_RTC.LSI.经过一个精密校准(RTC ...

  8. 【iCore3 双核心板】例程十:RTC实时时钟实验——显示日期和时间

    实验指导书及代码包下载: http://pan.baidu.com/s/1jHuZcnc iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  9. 【iCore4 双核心板_ARM】例程十:RTC实时时钟实验——显示时间和日期

    实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ RTC_TimeTypeDef sTime; RTC_DateTypeDef sDate; ; ...

随机推荐

  1. CYLTabBarController的简单使用

    #pragma mark- 登录成功跳转至主页 -(void)jumpToMainVC { [UIApplication sharedApplication].statusBarStyle = UIS ...

  2. CentOS 7中安装和配置Promethues

    Prometheus 是什么? Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的.随着发展,越来越多公司和组织接受采用Prome ...

  3. 【c# 学习笔记】使用virtual和override关键字实现方法重写

    只有基类成员声明为virtual或abstract时,才能被派生类重写:而如果子类想改变虚方法的实现行为,则必须使用override关键字. public class Animal { private ...

  4. ubuntu 12.04 下LVS的一些搭建心得和资料整理

    最近项目上需要使用到IPVS进行负载均衡,针对外部传来的HTTP请求,分摊到多台服务器上进行处理,所以看了一下这方面的资料,在这里纪录一下. Lvs是基于IP层和内容分发请求的负载均衡方法(所以也可以 ...

  5. 静态链表过程演示及代码实现(A - B) U (B - A)

    静态链表说明 使用数组来实现链式存储结构,目的是方便在不设指针类型的高级程序设计语言中使用链式结构 c语言定义数据结构 #define MAX_SIZE 1000 // 所有的类型都统一定义为Elem ...

  6. 【miscellaneous】GStreamer下的音视频播放

    Gst-launch命令: gst-launch filesrc location=*.* ! demux name=demux demux.video_00 ! queue ! decoder ! ...

  7. Vue双向数据绑定简易实现

    一.vue中的双向数据绑定主要使用到了Object.defineProperty(新版的使用Proxy实现的)对Model层的数据进行getter和setter进行劫持,修改Model层数据的时候,在 ...

  8. Redis List集合 使用

    列表类型(list)用于存储一个有序的字符串列表,常用的操作是向队列两端添加元素或者获得列表的某一片段.列表内部使用的是双向链表(double linked list)实现的,所以向列表两端添加元素的 ...

  9. linux系统中RAID10磁盘冗余阵列配置

    介绍:RAID10:需要至少四块(含)硬盘,兼具速度和安全性,但成本很高,RAID10用两个磁盘做RAID0,用其他两个做RAID1当备份. 配置流程: 第一步:在原有基础上为磁盘再填入五块磁盘(至少 ...

  10. python 修改文件内容3种方法

    原文链接:https://www.cnblogs.com/wc-chan/p/8085452.html def alter(file,old_str,new_str): ""&qu ...