手机网站报名链接怎么做,苏州建站费用,网页搜索快捷键,室内装修设计图效果图前言#xff1a;本篇笔记参考嘉立创文档#xff0c;连接放在最后
#RTC相关概念定义 Real-Time Clock 缩写 RTC 翻译 实时时钟#xff0c;是单片机片内外设的一种#xff0c;作用于提供准确的时间还有日期#xff0c;这个外设有独立的电源#xff0c;当单片机停止供电… 前言本篇笔记参考嘉立创文档连接放在最后
#RTC相关概念定义 Real-Time Clock 缩写 RTC 翻译 实时时钟是单片机片内外设的一种作用于提供准确的时间还有日期这个外设有独立的电源当单片机停止供电的时候仍能保持准确的时间。 RTC由晶振还有计数器组成晶振产生一个固定频率的信号计数器对这些信号进行计数RTC本质上就是一个1S计数器由此换算出时间除此之外RTC是一个独立的BCD定时器/计数器F4的RTC提供一个日历时钟两个闹钟中断一个可编程唤醒标志。
#RTC外设电源的选择
RTC电源供电选择有 VDD BAT如果选择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)