学习STM32第十八天

ops/2024/9/24 5:23:10/

RTC外设详解

一、RTC实时时钟实验

RTC配置流程如下

  • 解锁备份域写保护
    RTC核心寄存器在备份域内,备份域归属PWR,因此需要开启PWR时钟再使能备份与中寄存器的写访问。
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);					//电源控制寄存器在APB1总线PWR_BackupAccessCmd(ENABLE);										//使能对备份域的访问
  • 设置时钟源
    如板载外部RTC晶振,则选择LSE时钟,同时需要对RTC时钟源配置分频系数以及时制。
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);								//RTC时钟源
//若LSE无法起振会卡死在此,则设置为内部低速时钟
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
  • 开启RTC外设
    RTC模块是一个独立的实时时钟模块,可以提供高精度时间计数和时钟功能。在配置RTC之前,一般需要等待RTC寄存器更新的同步,即确保前一个RTC操作的设置已经完成并生效
	RCC_RTCCLKCmd(ENABLE);												//使能RTCRTC_WaitForSynchro();												//等待RTC寄存器更新同步
  • 配置日历时间
    结构体RTC_TimeTypeDefRTC_DateTypeDef可以配置RTC外设的日历时间,再通过相应的函数将配置的参数设置到RTC外设寄存器中。先进行设置,后进行读取。

二、代码实现

  1. 初始化函数
void MyRTC_Init()
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);					//电源控制寄存器在APB1总线RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE);             //备份域寄存器在AHB1总线PWR_BackupAccessCmd(ENABLE);										//使能对备份域的访问RCC_LSEConfig(RCC_LSE_ON);											//开启LSE时钟while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) != SET);					//等待LSE稳定启动RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);								//RTC时钟源RCC_RTCCLKCmd(ENABLE);												//使能RTCRTC_WaitForSynchro();												//等待RTC寄存器更新同步,包含对上一次写入操作完成的等待if(RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x2002)					//查看RTC是否完成初始化{MyRTCTimeConfig(24, 4, 24, 3, 16, 59, 20, RTC_H12_AM);}PWR_BackupAccessCmd(DISABLE); 										//关闭备份域访问
}
  1. 辅助函数
void MyRTCTimeConfig(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)
{RTC_WriteProtectionCmd(DISABLE);									//打开写保护//配置RTC时钟,LSE = 32.768KHz -》 32768 = 128 * 256RTC_InitTypeDef RTC_InitStructure;RTC_EnterInitMode();												//使能RTC编辑模式RTC_InitStructure.RTC_AsynchPrediv = 0x7F;							//设置7位异步分频值,RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;				//设置为24小时制RTC_InitStructure.RTC_SynchPrediv = 0xFF;							//设置15位同步分频值RTC_Init(&RTC_InitStructure);//时间设定RTC_TimeTypeDef RTC_TimeStructure;RTC_TimeStructure.RTC_H12 = RTC_H12;RTC_TimeStructure.RTC_Hours = hour;RTC_TimeStructure.RTC_Minutes = minute;RTC_TimeStructure.RTC_Seconds = second;RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);					//BCD格式设定时间//日期设定RTC_DateTypeDef RTC_DataStructure;RTC_DataStructure.RTC_Date = date;RTC_DataStructure.RTC_Month = month;RTC_DataStructure.RTC_WeekDay = week;RTC_DataStructure.RTC_Year = year;RTC_SetDate(RTC_Format_BCD, &RTC_DataStructure);					//BCD格式设定日期RTC_ExitInitMode();													//关闭RTC编辑模式RTC_WriteBackupRegister(RTC_BKP_DR0, 0x2024);						//设定一个初始化完成标志RTC_WriteProtectionCmd(ENABLE);										//使能写保护
}/*			BCD转换为十进制			*/
uint8_t BCDtoDecimal(int BCDnum)
{uint8_t decimal = 0, temp = 1, num = 0;if(BCDnum >= 0x0A)													//如果大于等于10{while(BCDnum > 0){num = BCDnum % 16;decimal += num * temp;temp *= 10;BCDnum /= 16;}return decimal;}return BCDnum;
}/*			读取时间			*/
RTC_time MyRTCTimeShow(void)
{RTC_TimeTypeDef RTC_TimeStructure;      // 获取RTC日期RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);  RTC_time Time_temp;Time_temp.Hours = RTC_TimeStructure.RTC_Hours;Time_temp.Minutes = RTC_TimeStructure.RTC_Minutes;Time_temp.Seconds = RTC_TimeStructure.RTC_Seconds;return Time_temp;
}	
/*			读取日期			*/
RTC_date MyRTCDateShow()
{RTC_DateTypeDef RTC_DateStructure;// 获取RTC时间RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);RTC_date Date_temp;Date_temp.Date = RTC_DateStructure.RTC_Date;Date_temp.Month = RTC_DateStructure.RTC_Month;Date_temp.Year = RTC_DateStructure.RTC_Year;return Date_temp;
}

http://www.ppmy.cn/ops/13291.html

相关文章

二次封装el-carousel

我们创建了一个名为MyCarousel的组件&#xff0c;它接受el-carousel的一些常用属性作为props&#xff0c;并默认提供了一些值。我们还通过setup函数返回了所有props&#xff0c;以便它们可以在模板中被使用。 1.MyCarousel.vue组件 <!-- 轮播图片 --> <template>…

【配电网故障定位】基于二进制混合灰狼粒子群算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#79】

文章目录 【获取资源请见文章第6节&#xff1a;资源获取】1. 配电网故障定位2. 二进制混合灰狼粒子群算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节&#xff1a;资源获取】 1. 配电网故障定位 配电系统故障定位&#xff0c;即在配电网络…

Music Tag Editor Pro for Mac:音乐标签编辑软件

Music Tag Editor Pro for Mac是一款功能强大的音乐标签编辑软件&#xff0c;专为Mac用户设计&#xff0c;旨在帮助用户轻松管理音乐库中的标签信息。 Music Tag Editor Pro for Mac v8.0.0中文激活版下载 该软件支持多种音频格式&#xff0c;包括MP3、M4A、FLAC、APE等&#x…

测试开发面经记录

目录 字节测试&#xff08;1h&#xff09; 米哈游业务测试&#xff08;40min&#xff09; 美团测开&#xff08;50min&#xff09; 美图测试&#xff08;1h30min&#xff09; 腾讯云智测试&#xff08;24min&#xff09; 腾讯测试一面&#xff08;35min&#xff0c;凉&am…

MySQL数据库基础

目录 1. 数据库的操作 1.1 显示当前的数据库 1.2 创建数据库 1.3 使用/选中 数据库 1.4 删除数据库 2. 常用数据类型 2.1 数值类型 2.2 字符串类型 2.3 日期类型 3. 表的操作 ​编辑 3.1 查看所有表 3.2 创建表 3.3 查看表结构 3.4 删除表 练习: 1. 数据库的操作 1.1 …

unity学习(87)——断线的原因--客户端堆栈溢出1

无论unity还是exe问题都是一样的&#xff0c;都是客户端一直在发123&#xff0c;但收不到124&#xff0c;退出时服务器能发126&#xff0c;但是客户端压根接受不到126。一下确实解决不了问题&#xff0c;但其实已经十分接近了&#xff01; 客户端断线后就再也收不到任何包了&a…

微信认证后端轻松搞定,MemFire Cloud 助力应用开发

在当今移动互联网时代&#xff0c;微信认证已成为众多应用必不可少的身份验证方式。然而&#xff0c;对于开发者来说&#xff0c;微信认证的后端工作往往是一项繁琐且耗时的任务。MemFire Cloud提供了一套即用型解决方案&#xff0c;开发者可以轻松解决微信认证的后端难题&…

【电控笔记5.8】数字滤波器设计流程频域特性

数字滤波器设计流程&频域特性 2HZ : w=2pi2=12.56 wc=2*pi*5; Ts=0.001; tf_lpf =