[STM32H5] 【NUCLEO- H563ZI 测评】+RTC实现与电子时钟

[复制链接]
 楼主| jinglixixi 发表于 2023-7-23 08:59 | 显示全部楼层 |阅读模式
前面已实现了TFT屏的显示驱动,将它与片内的RTC计时器相配合即可快速实现一个电子时钟的制作,其显示效果如下图所示。
1.jpg
电子时钟显示效果图


利用函数MX_RTC_Init()可完成RTC的初始化,并进而完成起始时间的设置,其具体内容如下:
  1. static void MX_RTC_Init(void)
  2. {
  3.   RTC_PrivilegeStateTypeDef privilegeState = {0};
  4.   RTC_TimeTypeDef sTime = {0};
  5.   RTC_DateTypeDef sDate = {0};
  6.   RTC_AlarmTypeDef sAlarm = {0};
  7.   hrtc.Instance = RTC;
  8.   hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  9.   hrtc.Init.AsynchPrediv = RTC_ASYNCH_PREDIV;
  10.   hrtc.Init.SynchPrediv = RTC_SYNCH_PREDIV;
  11.   hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  12.   hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
  13.   hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  14.   hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  15.   hrtc.Init.OutPutPullUp = RTC_OUTPUT_PULLUP_NONE;
  16.   hrtc.Init.BinMode = RTC_BINARY_NONE;
  17.   if (HAL_RTC_Init(&hrtc) != HAL_OK)
  18.   {
  19.     Error_Handler();
  20.   }
  21.   privilegeState.rtcPrivilegeFull = RTC_PRIVILEGE_FULL_NO;
  22.   privilegeState.backupRegisterPrivZone = RTC_PRIVILEGE_BKUP_ZONE_NONE;
  23.   privilegeState.backupRegisterStartZone2 = RTC_BKP_DR0;
  24.   privilegeState.backupRegisterStartZone3 = RTC_BKP_DR0;
  25.   if (HAL_RTCEx_PrivilegeModeSet(&hrtc, &privilegeState) != HAL_OK)
  26.   {
  27.     Error_Handler();
  28.   }
  29.   sTime.Hours = 0x8;
  30.   sTime.Minutes = 0x30;
  31.   sTime.Seconds = 0x0;
  32.   sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  33.   sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  34.   if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
  35.   {
  36.     Error_Handler();
  37.   }
  38.   sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  39.   sDate.Month = RTC_MONTH_JULY; //RTC_MONTH_FEBRUARY;
  40.   sDate.Date = 0x20;
  41.   sDate.Year = 0x23;
  42.   if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
  43.   {
  44.     Error_Handler();
  45.   }
  46.   sAlarm.AlarmTime.Hours = 0x2;
  47.   sAlarm.AlarmTime.Minutes = 0x20;
  48.   sAlarm.AlarmTime.Seconds = 0x30;
  49.   sAlarm.AlarmTime.SubSeconds = 0x56;
  50.   sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
  51.   sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
  52.   sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_WEEKDAY;
  53.   sAlarm.AlarmDateWeekDay = RTC_WEEKDAY_MONDAY;
  54.   sAlarm.Alarm = RTC_ALARM_A;
  55.   sAlarm.FlagAutoClr = ALARM_FLAG_AUTOCLR_DISABLE;
  56.   if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK)
  57.   {
  58.     Error_Handler();
  59.   }
  60. }
复制代码

为了完成计时值的显示,需对RTC的时间显示函数加以修改,其修改后的内容为:
  1. static void RTC_TimeShow(uint8_t *showtime)
  2. {
  3.   RTC_DateTypeDef sdatestructureget;
  4.   RTC_TimeTypeDef stimestructureget;
  5.   HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);
  6.   sprintf((char *)showtime, "%02d:%02d:%02d", stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);
  7.         LCD_ShowString(50,90,showtime);
  8.         HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);
  9.         sprintf((char *)showtime, "20%02d:%02d:%02d", sdatestructureget.Year, sdatestructureget.Month, sdatestructureget.Date);
  10.         LCD_ShowString(50,120,showtime);
  11. }
复制代码

实现电子时钟显示效果的主程序为:
  1. int main(void)
  2. {
  3.   HAL_Init();
  4.   SystemClock_Config();
  5.   MX_GPIO_Init();
  6.   MX_RTC_Init();
  7.   MX_ICACHE_Init();
  8.   BSP_LED_Init(LED1);
  9.   BSP_LED_Init(LED3);
  10.   RTCStatus = 1;
  11.   tft_gpio();
  12.   tft_Init();
  13.   BACK_COLOR=BLACK;
  14.   LCD_Clear(BLACK);
  15.   POINT_COLOR=GREEN;
  16.   LCD_ShowString(50,30,"NUCLEO_H563ZI");
  17.   POINT_COLOR=YELLOW;
  18.   LCD_ShowString(50,60,"RTC & TFT Test");
  19.   LCD_ShowString(50,260,"jinglixixi");
  20.   while (1)
  21.   {
  22.       RTC_TimeShow(aShowTime);
  23.   }
  24. }
复制代码

这样,就将TFT屏的显示功能与RTC的计时功能结合了起来,并实现了具体的应用。

huangcunxiake 发表于 2023-8-17 17:05 | 显示全部楼层
太模糊了。挺不错的,32就是好上手。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

518

主题

2935

帖子

39

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