#天空星RTC

news/2024/10/7 23:16:16/

一、选择时钟源为LSI

二、频率为32.768kHz

三、配置注意:

1.电源管理时钟

2.RTC备份寄存器(每次上电先检测RTC之前是否初始化过)

3.时钟源:LSE or LSI

4.写保护

5.编辑模式

6.日期时间获取

四、代码

/** 立创开发板软硬件资料与相关扩展板软硬件资料官网全部开源* 开发板官网:www.lckfb.com* 技术支持常驻论坛,任何技术问题欢迎随时交流学习* 立创论坛:club.szlcsc.com* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!* 不靠卖板赚钱,以培养中国工程师为己任*/
#include "board.h"
#include "bsp_uart.h"
#include "stdio.h"
#include "sys.h"void RTC_SetDateTime(uint8_t year, uint8_t month, uint8_t date, uint8_t week, uint8_t hour, uint8_t minute, uint8_t second, uint8_t RTC_H12);
void RTC_DateTimeGet(uint8_t *year, uint8_t *month, uint8_t *date, uint8_t *week, uint8_t *hour, uint8_t *minute, uint8_t *second);
void RTC_CheckInit(void);int main(void)
{uint8_t year,month,date,week,hour,minute,second;board_init();uart1_init(115200);/*RTC初始化*/RTC_CheckInit();while(1){       RTC_DateTimeGet(&year,&month,&date,&week,&hour,&minute,&second);printf("the date is : \r\n");printf("%d-%d-%d   %d\r\n",year,month,date,week);printf("the time is : \r\n");printf("%d:%d:%d \r\n",hour,minute,second);delay_ms(1000);}
}/**初始化RTC*/
void RTC_CheckInit(void)
{//1.打开电源管理时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//2.使能备份寄存器操作PWR_BackupAccessCmd(ENABLE);//3.打开LSIRCC_LSICmd(ENABLE);//4.配置RTC时钟源RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//5.使能RTC时钟RCC_RTCCLKCmd(ENABLE);//6.等待时钟同步RTC_WaitForSynchro();//7.检查RTC初始化没有if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x2003){printf("SET TIME...\r\n");//8.没有初始化则初始化一个时间日期RTC_SetDateTime(24,4,25,4,14,30,15,RTC_H12_AM);printf("SET TIME END\r\n");}//9.关闭备份寄存器PWR_BackupAccessCmd(DISABLE);
}/**RTC设置时间和日期*/
void RTC_SetDateTime(uint8_t year, uint8_t month, uint8_t date, uint8_t week, uint8_t hour, uint8_t minute, uint8_t second, uint8_t RTC_H12)
{//10.关闭写保护RTC_WriteProtectionCmd(DISABLE);//11.RTC进入编辑模式RTC_InitTypeDef RTC_InitStruct;RTC_EnterInitMode();  //进入编辑模式RTC_InitStruct.RTC_AsynchPrediv=0x7F;RTC_InitStruct.RTC_HourFormat=RTC_HourFormat_24;  //24小时制RTC_InitStruct.RTC_SynchPrediv=0xFF;RTC_Init(&RTC_InitStruct);//12.设置时间RTC_TimeTypeDef RTC_TimeStruct;RTC_TimeStruct.RTC_H12=RTC_H12;RTC_TimeStruct.RTC_Hours=hour;RTC_TimeStruct.RTC_Minutes=minute;RTC_TimeStruct.RTC_Seconds=second;RTC_SetTime(RTC_Format_BIN,&RTC_TimeStruct);  //二进制设置时间//13.设置日期RTC_DateTypeDef RTC_DateStruct;RTC_DateStruct.RTC_Date=date;RTC_DateStruct.RTC_Month=month;RTC_DateStruct.RTC_WeekDay=week;RTC_DateStruct.RTC_Year=year;RTC_SetDate(RTC_Format_BIN,&RTC_DateStruct);  //二进制设置日期//14.RTC退出编辑模式RTC_ExitInitMode();//15.初始化完成,设置备注RTC_WriteBackupRegister(RTC_BKP_DR0,0x2003);//16.RTC开启写保护RTC_WriteProtectionCmd(ENABLE);
}/**获取时间*/
void RTC_DateTimeGet(uint8_t *year, uint8_t *month, uint8_t *date, uint8_t *week, uint8_t *hour, uint8_t *minute, uint8_t *second)
{//17.定义日期结构体RTC_DateTypeDef RTC_DateStruct;//18.获取日期RTC_GetDate(RTC_Format_BIN,&RTC_DateStruct);*year=RTC_DateStruct.RTC_Year;*month=RTC_DateStruct.RTC_Month;*date=RTC_DateStruct.RTC_Date;*week=RTC_DateStruct.RTC_WeekDay;//19.定义时间结构体RTC_TimeTypeDef RTC_TimeStruct;//20.获取时间RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);*hour=RTC_TimeStruct.RTC_Hours;*minute=RTC_TimeStruct.RTC_Minutes;*second=RTC_TimeStruct.RTC_Seconds;
}


http://www.ppmy.cn/news/1443952.html

相关文章

按键冲突ctrl和ctrl+z

在开发当中,我分别在keydown和keyup中编写了ctrl的事件。 是为了按住ctrl时进入特定的场景编辑模式,送开始消除特殊的模式。 当我编写ctrlz的功能时,bug出现了 当我按住ctrlz时,再松开特殊场景模式没有消除。 原因是我将ctrlz事件…

2024年深圳杯东三省数学建模联赛赛题浅析

深圳杯&东三省数学建模联赛赛题浅析 赛题难度 一图如下所示 题目复杂性技术需求数据处理主要难点总体评估A题:多个火箭残骸的准确定位222精确处理误差和定位精度1B题:批量工件并行切割下料问题344最大化材料利用率和多动态切割头协调3C题&#xff…

go圣经 ——方法

这里只是记录了自己学过一遍但是在圣经(狼吞虎咽)中又看到的新鲜玩意 我们又称之为选择器 package mainimport "fmt"type Rect struct {width, height float64 }// 定义一个方法来计算矩形的面积 func (r Rect) Area() float64 {return r.wi…

重学java 26.面向对象 内部类⭐

“别担心,你一定能如愿。” —— 24.4.29 1.什么时候使用内部类: 当一个事物的内部,还有一个部分需要完整的结构去描述,而内部的完整结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类 比如&#xff1…

【C++】C++11 的 auto 和 decltype 两个关键字的应用

auto 和 decltype 是 C11 引入的两个关键字,它们增强了类型推导机制,使得代码更加简洁、灵活且易于维护。下面是对这两个关键字的说明以及使用案例。 1. auto auto 关键字允许编译器根据初始化表达式自动推导出变量的类型。这在处理复杂类型或者避免重…

一文解读 SQL 生成工具

SQL 生成工具可用于测试 Parser 与其他数据库产品的兼容性,通过解析 YACC 语法文件中的产生式,生成对应的 SQL 语句,再使用数据库执行该 SQL,根据结果判断语句是否与其他数据库语法兼容。 01工具使用 语法文件预处理 预处理目的…

JAVA 每日面试题(二)

Java 高级面试问题及答案 1. 什么是Java内存模型(JMM)?它在多线程编程中扮演什么角色? 答案: Java内存模型(JMM)是一个抽象的概念,它定义了Java程序在执行时,变量的访问…

C++初阶-----对运算符重载的进一步理解

1.对于运算符重载的进一步理解 (1)运算符重载就是运算符重新定义的意思,我们如果想要比较两个整形数据的大小,这个是很容易的,但是当我们定义一个类之后,使用这个类创建对象,想要直接比较这两个…