• #天空星RTC


    一、选择时钟源为LSI

    二、频率为32.768kHz

    三、配置注意:

    1.电源管理时钟

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

    3.时钟源:LSE or LSI

    4.写保护

    5.编辑模式

    6.日期时间获取

    四、代码

    1. /*
    2. * 立创开发板软硬件资料与相关扩展板软硬件资料官网全部开源
    3. * 开发板官网:www.lckfb.com
    4. * 技术支持常驻论坛,任何技术问题欢迎随时交流学习
    5. * 立创论坛:club.szlcsc.com
    6. * 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
    7. * 不靠卖板赚钱,以培养中国工程师为己任
    8. */
    9. #include "board.h"
    10. #include "bsp_uart.h"
    11. #include "stdio.h"
    12. #include "sys.h"
    13. 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);
    14. void RTC_DateTimeGet(uint8_t *year, uint8_t *month, uint8_t *date, uint8_t *week, uint8_t *hour, uint8_t *minute, uint8_t *second);
    15. void RTC_CheckInit(void);
    16. int main(void)
    17. {
    18. uint8_t year,month,date,week,hour,minute,second;
    19. board_init();
    20. uart1_init(115200);
    21. /*RTC初始化*/
    22. RTC_CheckInit();
    23. while(1)
    24. {
    25. RTC_DateTimeGet(&year,&month,&date,&week,&hour,&minute,&second);
    26. printf("the date is : \r\n");
    27. printf("%d-%d-%d %d\r\n",year,month,date,week);
    28. printf("the time is : \r\n");
    29. printf("%d:%d:%d \r\n",hour,minute,second);
    30. delay_ms(1000);
    31. }
    32. }
    33. /*
    34. *初始化RTC
    35. */
    36. void RTC_CheckInit(void)
    37. {
    38. //1.打开电源管理时钟
    39. RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
    40. //2.使能备份寄存器操作
    41. PWR_BackupAccessCmd(ENABLE);
    42. //3.打开LSI
    43. RCC_LSICmd(ENABLE);
    44. //4.配置RTC时钟源
    45. RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
    46. //5.使能RTC时钟
    47. RCC_RTCCLKCmd(ENABLE);
    48. //6.等待时钟同步
    49. RTC_WaitForSynchro();
    50. //7.检查RTC初始化没有
    51. if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x2003)
    52. {
    53. printf("SET TIME...\r\n");
    54. //8.没有初始化则初始化一个时间日期
    55. RTC_SetDateTime(24,4,25,4,14,30,15,RTC_H12_AM);
    56. printf("SET TIME END\r\n");
    57. }
    58. //9.关闭备份寄存器
    59. PWR_BackupAccessCmd(DISABLE);
    60. }
    61. /*
    62. *RTC设置时间和日期
    63. */
    64. 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)
    65. {
    66. //10.关闭写保护
    67. RTC_WriteProtectionCmd(DISABLE);
    68. //11.RTC进入编辑模式
    69. RTC_InitTypeDef RTC_InitStruct;
    70. RTC_EnterInitMode(); //进入编辑模式
    71. RTC_InitStruct.RTC_AsynchPrediv=0x7F;
    72. RTC_InitStruct.RTC_HourFormat=RTC_HourFormat_24; //24小时制
    73. RTC_InitStruct.RTC_SynchPrediv=0xFF;
    74. RTC_Init(&RTC_InitStruct);
    75. //12.设置时间
    76. RTC_TimeTypeDef RTC_TimeStruct;
    77. RTC_TimeStruct.RTC_H12=RTC_H12;
    78. RTC_TimeStruct.RTC_Hours=hour;
    79. RTC_TimeStruct.RTC_Minutes=minute;
    80. RTC_TimeStruct.RTC_Seconds=second;
    81. RTC_SetTime(RTC_Format_BIN,&RTC_TimeStruct); //二进制设置时间
    82. //13.设置日期
    83. RTC_DateTypeDef RTC_DateStruct;
    84. RTC_DateStruct.RTC_Date=date;
    85. RTC_DateStruct.RTC_Month=month;
    86. RTC_DateStruct.RTC_WeekDay=week;
    87. RTC_DateStruct.RTC_Year=year;
    88. RTC_SetDate(RTC_Format_BIN,&RTC_DateStruct); //二进制设置日期
    89. //14.RTC退出编辑模式
    90. RTC_ExitInitMode();
    91. //15.初始化完成,设置备注
    92. RTC_WriteBackupRegister(RTC_BKP_DR0,0x2003);
    93. //16.RTC开启写保护
    94. RTC_WriteProtectionCmd(ENABLE);
    95. }
    96. /*
    97. *获取时间
    98. */
    99. void RTC_DateTimeGet(uint8_t *year, uint8_t *month, uint8_t *date, uint8_t *week, uint8_t *hour, uint8_t *minute, uint8_t *second)
    100. {
    101. //17.定义日期结构体
    102. RTC_DateTypeDef RTC_DateStruct;
    103. //18.获取日期
    104. RTC_GetDate(RTC_Format_BIN,&RTC_DateStruct);
    105. *year=RTC_DateStruct.RTC_Year;
    106. *month=RTC_DateStruct.RTC_Month;
    107. *date=RTC_DateStruct.RTC_Date;
    108. *week=RTC_DateStruct.RTC_WeekDay;
    109. //19.定义时间结构体
    110. RTC_TimeTypeDef RTC_TimeStruct;
    111. //20.获取时间
    112. RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);
    113. *hour=RTC_TimeStruct.RTC_Hours;
    114. *minute=RTC_TimeStruct.RTC_Minutes;
    115. *second=RTC_TimeStruct.RTC_Seconds;
    116. }

  • 相关阅读:
    借助模糊逻辑将文化算法与和谐搜索相结合进行学习(Matlab代码实现)
    Java-反射:实现map自动封装进实体类中 理解springmvc 参数封装底层原理
    正确设置PyTorch训练时使用的GPU资源
    springcloud适配mysql和oracle数据库
    Android 应用开发-实现将公共存储空间内的文件复制到应用的私用存储空间中
    浙大工商管理硕士(MBA)创客班适合哪些人群申请报考?
    什么是网络安全?如何让小白简单的学习网络安全
    数据的标准化处理——基于python
    std::atomic
    yolov5使用GPU
  • 原文地址:https://blog.csdn.net/byhyf83862547/article/details/138189439