STMF4学习笔记RTC(天空星)

news2024/11/29 12:29:36

        前言:本篇笔记参考嘉立创文档,连接放在最后

#RTC相关概念定义

        Real-Time Clock  缩写  RTC 翻译  实时时钟,是单片机片内外设的一种,作用于提供准确的时间还有日期,这个外设有独立的电源,当单片机停止供电的时候,仍能保持准确的时间。

       RTC由晶振还有计数器组成,晶振产生一个固定频率的信号,计数器对这些信号进行计数,RTC本质上就是一个1S计数器,由此换算出时间,除此之外RTC是一个独立的BCD定时器/计数器,F4的RTC提供一个日历时钟,两个闹钟中断,一个可编程唤醒标志。

#RTC外设电源的选择
        RTC电源供电选择有 VDDBAT,如果选择VDD进行供电,在掉电之后,数据不会进行保存,如果使用BAT,也就是纽扣电池进行供电,数据将备份在 备份寄存器中,系统复位,或者系统从待机模式唤醒时,RTC设置与时钟都保持不变。
           
#RTC常用的功能介绍

时间和日期表示:RTC可以表示时间日期,他可以跟踪年,月,日,分钟和秒的信息

闹钟功能:通过设置时间还有日期触发闹钟发生中断。

定时器功能:RTC支持定时器功能,可以实现周期性的定时触发。

外部中断触发:可以通过外部中断输入来触发中断事件。

        总结:RTC 实时时钟,主要应用就是在掉电或者复位之后,可以准确的提供时间。(使用BAT电源)

#RTC相关代码表示

  RTC模块是在后备区域,但是在系统复位或者从待机模式唤醒后,会自动禁止访问后备寄存器和RTC,防止对后备区域的意外操作,所以在配置RTC的时候,要取消备份区域的写保护

使能对RTC访问:使能对后备寄存器和RTC的访问权限。

设置RTC时钟源:选择外部时钟源和分频系数。

配置RTC结构体:配置RTC结构体基本结构

关闭RTC配置模式:配置结束关闭RTC配置模式

void  RTC_ClockInit(void)
{
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//开启时钟
	PWR_BackupAccessCmd(ENABLE);//使能备份寄存器

	RCC_LSICmd(ENABLE);//开启LSI外置低俗晶振
	RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//配置RTC时钟来源
	
	RCC_RTCCLKCmd(ENABLE);
	RTC_WaitForSynchro();
	if(RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x2002)   //一个变量,看看RTC初始化没
    {
            printf("Set Time and Date.....\r\n");
            Rtc_TimerConfig();
            printf("Set End!!\r\n");
    }
    PWR_BackupAccessCmd(DISABLE); // 关闭备份寄存器
	
}
void Rtc_TimerConfig(void)
{
	RTC_WriteProtectionCmd(DISABLE);//关闭系统自动的读写保护
	
	RTC_InitTypeDef RTC_InitStruct;
	RTC_InitStruct.RTC_AsynchPrediv = RTC_HourFormat_24;
	RTC_InitStruct.RTC_HourFormat =(uint32_t)0x7F;
	RTC_InitStruct.RTC_SynchPrediv =(uint32_t)0xFF; 
	RTC_Init(&RTC_InitStruct);
	
	
	RTC_TimeTypeDef RTC_TimerStruct;
	RTC_TimerStruct.RTC_H12 = RTC_H12_AM;
	RTC_TimerStruct.RTC_Hours = 18;
	RTC_TimerStruct.RTC_Minutes = 10;
	RTC_TimerStruct.RTC_Seconds = 1;
	
	RTC_SetTime(RTC_Format_BIN,&RTC_TimerStruct);
	
	RTC_DateTypeDef  RTC_DataStruct;
	RTC_DataStruct.RTC_Date = 11; 
	RTC_DataStruct.RTC_Month = RTC_Month_March ;
	RTC_DataStruct.RTC_WeekDay = 1;
	RTC_DataStruct.RTC_Year = 24;
	
	RTC_SetDate(RTC_Format_BIN,&RTC_DataStruct);
	RTC_EnterInitMode();//关闭RTC编辑模式
	RTC_WriteBackupRegister(RTC_BKP_DR0,0x2002);
	RTC_WriteProtectionCmd(ENABLE);


}
void RtcShowTime(void)
{
    // 时间结构体
    RTC_TimeTypeDef RTC_TimeStructure;
    // 日期结构体
    RTC_DateTypeDef RTC_DateStructure;        
    
    // 获取RTC日期
    RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);  
    // 获取RTC时间
    RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);
                
    //将获取到的RTC时间BIN二进制再通过串口输出
    printf("Current time: %d:%d:%d  ", \
    RTC_TimeStructure.RTC_Hours,  
    RTC_TimeStructure.RTC_Minutes, 
    RTC_TimeStructure.RTC_Seconds);
            
    printf("%d-%d-%d\n\r", \
    RTC_DateStructure.RTC_Year, 
    RTC_DateStructure.RTC_Month, 
    RTC_DateStructure.RTC_Date);
}
int BcdToDecimal(int bcd) 
{
    int decimal = 0;
    int temp = 1;
    int number = 0;
            
    if( bcd >= 0x0A ) // 如果大于或等于10
    {
        while(bcd > 0) 
        {
            number = bcd % 16;
            decimal += number * temp;
            temp *= 10;
            bcd /= 16;
        }
        return decimal;
    }
    return bcd;

}
int main(void)
{
	 board_init();
    uart1_init(115200U);

    printf("RTC Init Start.....\r\n");
    RTC_ClockInit(); // RTC 初始化
    printf("RTC Init Successful!!\r\n");
    
    while(1)
    {
            //获取RTC时间并通过串口输出
            RtcShowTime();  
            delay_ms(1000);
    }

}
#相关实验现象

     

                                        欢迎指正,希望对你,有所帮助!!!

‍​‍​‍​​​‍⁠‍​​​⁠​​​‌​​⁠​​⁠‍​‬​​‍‬​‬‍​‍​​​‬⁠‌​⁠【立创·天空星STM32F407VET6】入门手册 - 飞书云文档 (feishu.cn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1902544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++之static关键字

文章目录 前提正文多重定义extern关键字使用staticstatic 全局变量(在.cpp文件中定义)static变量存放在哪里static变量可不可以放在.h文件中 static 函数static局部变量static 成员变量static 成员函数 总结参考链接 前提 好吧,八股,我又回来了。这次想…

【wordpress教程】wordpress博客网站添加非法关键词拦截

有的网站经常被恶意搜索,站长们不胜其烦。那我们如何屏蔽恶意搜索关键词呢?下面就随小编一起来解决这个问题吧。 后台设置预览图: 设置教程: 1、把以下代码添加至当前主题的 functions.php 文件中: add_action(admi…

I2C接口+高度集成的电源管理芯片(PMIC)-iML1942

电源管理芯片 - iML1942是一个高度集成的电源管理IC为TFT液晶面板。它具有完整的I2C接口来编程各种参数。该设备包括一个针对AVDD的电流模式升压调节器,一个针对VBK1的同步升压转换器。VGL可选的反相转换器或负电荷泵调节器,VSS1负线性调节器&#xff0c…

基于python的数据分解-趋势-季节性-波动变化

系列文章目录 前言 时间序列数据的分解,一般分为趋势项,季节变化项和随机波动项。可以基于加法或者乘法模型。季节变化呈现出周期变化,因此也叫季节效应(周期)。 一、数据分解步骤 (1)估计时间序列的长期…

相关向量机RVM算法介绍继承sklearn-SVM-API实现回归预测算例

一、相关向量机RVM与支持向量机SVM对比 1、相关向量机(RVM) ①定义与原理 相关向量机(Relevance Vector Machine, RVM)是一种基于概率模型的机器学习算法,主要用于分类和回归分析。基于稀疏贝叶斯学习框架&#xff…

杰理科技AD142A语音芯片,语音玩具方案—云信通讯

语音玩具产品市场的需求量比较大,从前简单的发光玩具,到各种动作的电子玩具,再到如今的语音录音灯光动作玩具,可见玩具行业也是在不断地演变。 杰理语音芯片AD142A4的优势主要是支持录音、录变音、语音播放,广泛应用于…

kubernetes集群部署:node节点部署和CRI-O运行时安装(三)

关于CRI-O Kubernetes最初使用Docker作为默认的容器运行时。然而,随着Kubernetes的发展和OCI标准的确立,社区开始寻找更专门化的解决方案,以减少复杂性和提高性能。CRI-O的主要目标是提供一个轻量级的容器运行时,它可以直接运行O…

给我的 IM 系统加上监控两件套:【Prometheus + Grafana】

监控是一个系统必不可少的组成部分,实时,准确的监控,将会大大有助于我们排查问题。而当今微服务系统的话有一个监控组合很火那就是 Prometheus Grafana,嘿你别说 这俩兄弟配合的相当完美,Prometheus负责数据采集&…

手写实现一个ORM框架

手写实现一个ORM框架 什么是ORM框架、ORM框架的作用效果演示框架设计代码细节SqlBuilderSqlExecutorStatementHandlerParameterHandlerResultSetHandler逆序生成实体类 大家好,本人最近写了一个ORM框架,想在这里分享给大家,让大家来学习学习。…

10、matlab中字符、数字、矩阵、字符串和元胞合并为字符串并将字符串以不同格式写入读出excel

1、前言 在 MATLAB 中,可以使用不同的数据类型(字符、数字、矩阵、字符串和元胞)合并为字符串,然后将字符串以不同格式写入 Excel 文件。 以下是一个示例代码,展示如何将不同数据类型合并为字符串,并以不…

【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)

文章目录 定义装饰模式的结构 快速入门 | Demo顶层抽象DataSource数据源接⼝具体实现类引入BASE**64**编码装饰器客户端Client 定义 所谓装饰器模式其实就是在原有的功能上做一个增强!! 换句话说:以前你妈妈揍你的时候用的巴掌,但…

Android 简单快速实现 下弧形刻度尺(滑动事件)

效果图: 直接上代码: package com.my.view;import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Pai…

SQL注入【1】——通用漏洞/SQL注入/mysql跨库/ACCESS偏移

一、知识点: 1、脚本代码与数据库前置知识 2、Access数据库注入-简易&偏移 3、MYSQL数据库注入-简易:权限跨库 二、前置知识: (一)SQL注入漏洞产生原理分析 SQL注入产生条件:根本条件:可控变量、特定函数。 脚本代码在实现…

一气之下,关闭成都400多人的游戏公司

关注卢松松,会经常给你分享一些我的经验和观点。 最近,多益网络宣布关闭成都公司,在未来三年内,关闭成都所有的相关公司。原因竟然是输掉了劳动仲裁,赔偿员工38万多,然后一气之下要退出成都,…

windows下编译ffmpeg 最详细教程

1 Ffmpeg下载地址:FFmpeg 使用命令下载 git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 下载完成后会发现如下目录: 2 msys2下载地址:MSYS2 解压好后,选择一个非空路径安装,安装好后路径如下: 为…

基于STM32的通用红外遥控器设计: 解码、学习与发射(代码示例)

摘要: 本文将带你使用STM32打造一款功能强大的万能红外遥控器,它可以学习和复制多种红外信号,并通过OLED屏幕和按键实现便捷操作。我们将深入探讨红外通信原理、STM32编程、OLED显示和EEPROM数据存储等关键技术,并提供完整的代码示…

【Qt】day3 自定义控件、框架、定时器、QPainter、QFile

文章目录 自定义控件封装自定义框架定时器第一种方式第二种方式 (推荐) 事件分发器QPainter基本操作高级设置抗锯齿移动坐标原点 画家画资源图片,并实现手动移动 作业QPaintDevice绘图设备QPixmapQimageQPicture QFile文件读写操作QFileInfo文…

FPGA_GTX:简要版

1. GTX介绍 Xilinx FPGA的GT意思是Gigabyte Transceiver。通常称呼为Serdes、高速收发器。GT在xilinx不同系列有着不同的产品,从7系列到UltraScale系列分别有GTP、GTX、GTZ、GTH、GTY和GTM。不同GT整体结构上类似,为了支持越来越高的line rate&#xff…

virtualbox窗口和win10窗口的切换

1、问题: 从windows切换到虚拟机可以用快捷键 ALTTAB,但是从虚拟机到windows使用 ALTTAB 无法成功切换 2、解决方法: 注意:发现设置为ctrlAlt会导致打开终端快捷键(CtrlAltT)失效,建议这里设置…

Lua语言入门

目录 Lua语言1 搭建Lua开发环境1.1 安装Lua解释器WindowsLinux 1.2 IntelliJ安装Lua插件在线安装本地安装 2 Lua语法2.1 数据类型2.2 变量全局变量局部变量命名规范局部变量作用域 2.3 注释单行注释多行注释 2.4 赋值2.5 操作符数学操作符比较操作符逻辑操作符连接操作符取长度…