[开发板与模块] 【HT32F52352 Starter Kit测评】+RTC的使用

[复制链接]
 楼主| jinglixixi 发表于 2022-4-28 21:59 | 显示全部楼层 |阅读模式
本帖最后由 werasd 于 2022-5-25 15:09 编辑

HT32F52352芯片内部配有RTC实时时钟电路,它包括APB接口、一个32-bit向上计数器、一个控制寄存器、一个预分频器、一个比较寄存器和一个状态寄存器。
通过RTC与OLED屏相配合,就可快速地构建一个电子时钟,其计时效果如图1和图2所示所示。
1.jpg
图1  RTC计时效果

2.jpg
图2  串口输出效果
要使RTC实现电子时钟的功能,必须对ht32f5xxxx_01_it.c中的原中断处理函数加以修改。
原中断函数是一个空函数,其内容为:
void RTC_IRQHandler(void)
{
}
该函数修改后的内容为:
  1. void RTC_IRQHandler(void)
  2. {
  3.   extern vu32 gwTimeDisplay;
  4.   u8 bFlags;
  5.   bFlags = RTC_GetFlagStatus();
  6.   if (bFlags & RTC_FLAG_CSEC)
  7.   {
  8.     gwTimeDisplay = 1;
  9.   }
  10. }

RTC配置函数:
  1. void RTC_Configuration(void)
  2. {
  3.   PWRCU_DeInit();
  4.   #if (EXAMPLE_NO_LSE == 0) && (LIBCFG_LSE == 1)
  5.   RTC_LSESMConfig(RTC_LSESM_FAST);
  6.   RTC_LSECmd(ENABLE);
  7.   while (CKCU_GetClockReadyStatus(CKCU_FLAG_LSERDY) == RESET);
  8.   RTC_ClockSourceConfig(RTC_SRC_LSE);
  9.   #else
  10.   RTC_ClockSourceConfig(RTC_SRC_LSI);
  11.   #endif
  12.   RTC_IntConfig(RTC_INT_CSEC, ENABLE);
  13.   RTC_SetPrescaler(RTC_RPRE_32768);
  14. }

另外,此外还需要为RTC设置一个初始的计时值。由于开发板上并没有配置相应的用户键,在未进行扩展的情况下,只好由函数Time_Regulate(void)直接进行设置。
相应的函数内容为:
  1. u32 Time_Regulate(void)
  2. {
  3.     u32 Tmp_HH = 0xFF, Tmp_MM = 0xFF, Tmp_SS = 0xFF;
  4.          printf("\r\n==============Time Settings=====================================");
  5.          Tmp_HH = 23;
  6.          Tmp_MM = 59;
  7.          Tmp_SS = 52;
  8.     return((Tmp_HH * 3600 + Tmp_MM * 60 + Tmp_SS));
  9. }

此外,为了显示计时值所使用的函数为:
  1. void Time_Display(u32 wTimeVar)
  2. {
  3.     u32 THH = 0, TMM = 0, TSS = 0;
  4.     wTimeVar %= 86400;
  5.     THH = wTimeVar/3600;
  6.     TMM = (wTimeVar % 3600)/60;
  7.     TSS = (wTimeVar % 3600)% 60;
  8.          OLED_ShowNum(20,6,THH,2,16);
  9.          OLED_ShowNum(44,6,TMM,2,16);
  10.          OLED_ShowNum(68,6,TSS,2,16);
  11. }

完成电子时钟功能的主程序为:
  1. int main(void)
  2. {
  3.     {
  4.         CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
  5.         CKCUClock.Bit.BKP   = 1;
  6. CKCU_PeripClockConfig(CKCUClock, ENABLE);
  7.     }
  8. #if (!LIBCFG_NO_PWRCU_TEST_REG)
  9.     if (PWRCU_CheckReadyAccessed() != PWRCU_OK)
  10.     {
  11.         while (1);
  12.     }
  13.     #endif
  14.     HT32F_DVB_LEDInit(HT_LED1);
  15.     RETARGET_Configuration();
  16.     NVIC_EnableIRQ(RTC_IRQn);
  17.     RTC_Configuration();
  18.     printf("\r\n RTC configured....");
  19.     TimeReg = Time_Regulate();
  20.     RTC_Cmd(ENABLE);
  21.     oled_GPIO_Configuration();
  22.     OLED_Init();

  23.     OLED_Clear();
  24.      OLED_ShowString(20,0,"OLED & RTC",16);
  25.     OLED_ShowString(20,2,"HT32F52352",16);
  26.          OLED_ShowString(20,6,"  :  :",16);
  27.     while (1)
  28.     {
  29.         if (gwTimeDisplay == 1)
  30.         {
  31.               Time_Display(RTC_GetCounter() + TimeReg);
  32.               gwTimeDisplay = 0;
  33.                               HT32F_DVB_LEDToggle(HT_LED1);
  34.          }
  35.     }
  36. }

因此可见,RTC的使用还是比较方便的。为了便于时间的调整,可外接一个按键模块来辅助时间参数的设置。

sesefadou 发表于 2022-5-16 10:05 | 显示全部楼层
HT32F52352 还不错呢。   
lzmm 发表于 2022-5-16 12:11 | 显示全部楼层
怎么开启RTC中断呢?
typeof 发表于 2022-5-16 12:31 | 显示全部楼层
会不会存在不能保存时间的现象呢
hudi008 发表于 2022-5-16 15:37 | 显示全部楼层
有闹钟的功能吗   
linfelix 发表于 2022-5-16 16:05 | 显示全部楼层
这个的偏差是多少?  
u1011 发表于 2022-5-16 17:02 | 显示全部楼层
lzmm 发表于 2022-5-16 12:11
怎么开启RTC中断呢?

楼主有提到RTC配置函数:RTC_Configuration

开RTC中断简单总结是要有RTC_IntConfig,和NVIC_EnableIRQ(RTC_IRQn);
u1011 发表于 2022-5-16 17:05 | 显示全部楼层
typeof 发表于 2022-5-16 12:31
会不会存在不能保存时间的现象呢

时间保存在RAM/寄存器内,只要不断电就没有关系。
u1011 发表于 2022-5-16 17:07 | 显示全部楼层
linfelix 发表于 2022-5-16 16:05
这个的偏差是多少?

这个的确是很多人关心的问题,RTC偏差量来自外部32767晶振的精度,普通32768晶振精度可以到5ppm。
 楼主| jinglixixi 发表于 2022-5-16 17:48 | 显示全部楼层
typeof 发表于 2022-5-16 12:31
会不会存在不能保存时间的现象呢

肯定会,因为它没有配置后备电池来为RTC供电。
 楼主| jinglixixi 发表于 2022-5-16 17:51 | 显示全部楼层
hudi008 发表于 2022-5-16 15:37
有闹钟的功能吗

这个可以有,只不过这里没使用。
asmine 发表于 2022-5-17 21:26 | 显示全部楼层
nice,新板子上手好快啊
htmlme 发表于 2022-5-28 13:43 | 显示全部楼层
支持闹钟的吗?
uytyu 发表于 2022-5-28 14:54 | 显示全部楼层
RTC可以校准吗  
 楼主| jinglixixi 发表于 2022-5-29 23:42 | 显示全部楼层

可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则

518

主题

2935

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部