实时时钟的特征和原理

RTCCLK:时钟来源

RTC的时钟有哪些来源呢?

如图,有3个渠道

  • 来自于外部的LSE也就是外部的晶振
  • 来自于HSE的128分频
  • 来自于LSI

一般情况下我们都是采用外部晶振来提供时钟的,因为它还是很精确的。

BKP备份寄存器

RTC相关寄存器

具体设置可查看datasheet。

配置RTC寄存器

读RTC寄存器

RTC相关库函数

RTC一般配置步骤

源码

建议使用pc端浏览源码

rtc.h

#ifndef __RTC_H

#define __RTC_H

//时间结构体

typedef struct

{

vu8 hour;

vu8 min;

vu8 sec;

//公历日月年周

vu16 w_year;

vu8 w_month;

vu8 w_date;

vu8 week;

}_calendar_obj;

extern _calendar_obj calendar;//日历结构体

extern u8 const mon_table[12];//月份日期数据表

void Disp_Time(u8 x,u8 y,u8 size);//在制定位置开始显示时间

void Disp_Week(u8 x,u8 y,u8 size,u8 lang);//在指定位置显示星期

u8 RTC_Init(void); //初始化RTC,返回0,失败;1,成功;

u8 Is_Leap_Year(u16 year);//平年,闰年判断

u8 RTC_Alarm_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec);

u8 RTC_Get(void); //更新时间

u8 RTC_Get_Week(u16 year,u8 month,u8 day);

u8 RTC_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec);//设置时间

#endif

rtc.c

#include "delay.h"

#include "usart.h"

#include "rtc.h"

_calendar_obj calendar;//时钟结构体

static void RTC_NVIC_Config(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;//RTC全局中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//先占优先级1位,从优先级3位

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//先占优先级0位,从优先级4位

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能该通道中断

NVIC_Init(&NVIC_InitStructure);//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

}

//实时时钟配置

//初始化RTC时钟,同时检测时钟是否工作正常

//BKP->DR1用于保存是否第一次配置的设置

//返回0:正常

//其他:错误代码

u8 RTC_Init(void)

{

//检查是不是第一次配置时钟

u8 temp=0;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);//使能PWR和BKP外设时钟

PWR_BackupAccessCmd(ENABLE);//使能后备寄存器访问

if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050)//从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎

{

BKP_DeInit();//复位备份区域

RCC_LSEConfig(RCC_LSE_ON);//设置外部低速晶振(LSE),使用外设低速晶振

while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET&&temp<250)//检查指定的RCC标志位设置与否,等待低速晶振就绪

{

temp++;

delay_ms(10);

}

if(temp>=250)return 1;//初始化时钟失败,晶振有问题

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//设置RTC时钟(RTCCLK),选择LSE作为RTC时钟

RCC_RTCCLKCmd(ENABLE);//使能RTC时钟

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

RTC_WaitForSynchro();//等待RTC寄存器同步

RTC_ITConfig(RTC_IT_SEC, ENABLE);//使能RTC秒中断

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

RTC_EnterConfigMode();/// 允许配置

RTC_SetPrescaler(32767); //设置RTC预分频的值

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

RTC_Set(2015,1,14,17,42,55); //设置时间

RTC_ExitConfigMode(); //退出配置模式

BKP_WriteBackupRegister(BKP_DR1, 0X5050);//向指定的后备寄存器中写入用户程序数据

}

else//系统继续计时

{

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

RTC_ITConfig(RTC_IT_SEC, ENABLE);//使能RTC秒中断

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

}

RTC_NVIC_Config();//RCT中断分组设置

RTC_Get();//更新时间

return 0; //ok

}

//RTC时钟中断

//每秒触发一次

//extern u16 tcnt;

void RTC_IRQHandler(void)

{

if (RTC_GetITStatus(RTC_IT_SEC) != RESET)//秒钟中断

{

RTC_Get();//更新时间

}

if(RTC_GetITStatus(RTC_IT_ALR)!= RESET)//闹钟中断

{

RTC_ClearITPendingBit(RTC_IT_ALR);//清闹钟中断

RTC_Get();//更新时间

printf("Alarm Time:%d-%d-%d %d:%d:%d

esp32 rtc 时钟设置不对_「STM32」实时时钟(RTC)实验相关推荐

  1. esp32 rtc 时钟设置不对_咱们RTC时钟案例的时间为什么开始的时候总是2014年,怎么改呢?...

    [mw_shl_code=c,true]u8 RTC_Init(void) { //检查是不是第一次配置时钟 u8 temp=0; RTC_NVIC_Config(); //if(BKP->DR ...

  2. axi dma 寄存器配置_「STM32」DMA采集单通道,简单数据分析

    什么是DMA DMA,Direct Memory Access,直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式.在DMA模式下,CPU只需要向DMA控制器下达指令,传输数据由DMA ...

  3. esp32 rtc 时钟设置不对_STM32入门系列-STM32时钟系统,STM32时钟树

    时钟对于单片机来说是非常重要的,它为单片机工作提供一个稳定的机器周期从而使系统能够正常运行.时钟系统犹如人的心脏,一旦有问题整个系统就崩溃.我们知道STM32属于高级单片机,其内部有很多的外设,但不是 ...

  4. stm32之实时时钟RTC(掉电计时保持、秒中断、闹钟中断、溢出中断)

    前言:stm32系列产品普遍都有实时时钟RTC模块,它提供一个掉电保持计时功能,掉电后由后备供电区域供电.除了提供时间和日期之外,还可以设置闹钟提醒,且可以在待机模式下设置闹钟唤醒系统.在一些小容量. ...

  5. imx6 linux 时钟,迅为-iMX6开发板-驱动-实时时钟RTC以及Linux-c测试例程

    当Linux开发者谈论一个实时时钟,他们通常指的是某种能记录墙上时间,并且有备用电 池,以至于在系统关机的时候仍然可以工作的器件. Linux 有两个系列广泛兼容的用户空间 RTC 设备节点: /de ...

  6. tomcat 不支持put 高版本_「MG6_DCT280」湿式七档双离合版本-性价比并不高

    上汽名爵_MG6定义为「掀背式运动轿车」,设计感很有些英伦风格,性能也确实可圈可点.然而这台车只有MT版本值得选择,即使在新款升级"DCT280"湿式七档双离合变速箱后也不例外.因 ...

  7. idea findbugs使用_「测试」 - 静态测试 amp; FindBugs

    在阅读Kafka和RocketMQ对比的文章中,看到一些有关质量的话题,通过IntelliJ的FindBugs插件进行静态代码扫描,相较于sonar更加轻巧,更适合「单元测试」阶段进行. <Ap ...

  8. 用typescript完成倒计时_「干货」将数十万行CoffeeScript代码迁移到TypeScript

    作者 | David Goldstein 译者 | 王强 策划 | 小智 转发链接:https://mp.weixin.qq.com/s/TK7kWXX4hR3e-jtpVMuBnw 序言 2017 ...

  9. java正则匹配英文句号_「正则表达式」王国奇遇记

    第一回 初来乍到 NPC: "欢迎来到正则表达式的国度,勇士!这里的每一个人都使用正则表达式,我是这里的 NPC,每一个来到这里的人都将由我代为介绍正则世界的规则,至于能领悟到何种境界,就看 ...

最新文章

  1. google浏览器的地址栏(url)和文本框中英文字母都是全角
  2. 谁说被吃是鸡的宿命?这只鸡长了个价值三个诺奖的肿瘤
  3. python闭包、装饰器
  4. 【hadoop】Yarn【label-based scheduling】实战总结
  5. 用Visio画流程图
  6. java nio书籍_《Java NIO》这本书
  7. 九宫格按键输入(java)
  8. 商业智能BI全解,一文让你明白才是商业智能(BI)
  9. Java 添加 Excel 文本水印和图片水印及,及其他操作文档
  10. 多源异构数据整合在多规合一中的应用
  11. 怎样通俗易懂地解释内卷是什么意思?
  12. 有属性的自定义注解,如何获取到post请求中RequestBody中对象的一个属性值?
  13. 一款适合IT团队的在线API文档、技术文档工具-showdoc介绍
  14. 一个实习生的CnosDB之旅
  15. 皮肤黑的人穿什么颜色的衣服比较好
  16. 拜日式精准引导词_瑜伽 拜日式引导词 分享
  17. 图片无限放大不失真android
  18. redhat php 5.3 apache,linux服务器安装(centos5.3 apache php mysql)
  19. 人口流向数据_数读:全国各省人口流入流出图
  20. 网页设计:30个灰常漂亮的老外网页设计作品

热门文章

  1. AAAI 2022 | 基于词对关系建模的统一NER,刷爆14个中英NER数据集
  2. 科研助力 | 牛津,MIT导师计算机科研项目招生(仅限AI,机器学习,深度学习方向)...
  3. 清华大学人工智能研究院成立智能信息获取研究中心
  4. 论文落地 101:算法工程化的那些坑
  5. mysql错误修改数据_使用正则表达式快速修改mysql中错误的varchar类型数据
  6. matlibplot 一张图画多个曲线_一文读懂磁滞回曲线
  7. 网站如何接入微信支付功能?微信支付详细教程它来了(建议收藏)
  8. MyBatis——动态SQL语句——if标签和where标签复合使用
  9. 2019牛客暑期多校训练营(第二场)
  10. Little Sub and Sequence