STMF4学习笔记RTC(天空星)

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

#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)

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 20:26:05       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 20:26:05       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 20:26:05       45 阅读
  4. Python语言-面向对象

    2024-07-09 20:26:05       55 阅读

热门阅读

  1. 使用nodejs输出著作权申请所需的word版源码

    2024-07-09 20:26:05       23 阅读
  2. Linux Conda 入门案例教程

    2024-07-09 20:26:05       22 阅读
  3. HTTP Client

    2024-07-09 20:26:05       30 阅读
  4. `mysql`常用的的CIL命令行工具

    2024-07-09 20:26:05       45 阅读
  5. 在 Windows PowerShell 中模拟 Unix/Linux 的 touch 命令

    2024-07-09 20:26:05       21 阅读
  6. LVS+keepalived群集

    2024-07-09 20:26:05       26 阅读
  7. qt udp通讯应用举例

    2024-07-09 20:26:05       24 阅读
  8. Vuetify3:v-data-table增加下拉筛选

    2024-07-09 20:26:05       16 阅读