当前位置:   article > 正文

#天空星RTC

#天空星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. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/518602
推荐阅读
相关标签
  

闽ICP备14008679号