打印
[STM32WB]

【STM32WB09KE测评】+RTC与电子时钟

[复制链接]
1034|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2024-11-9 09:42 编辑

RTC是一个独立的定时器,拥有一个连续计数的计数器,可以在相应的软件配置下提供时钟日历的功能。通过修改计数器的值,可以重新设置系统当前的时间和日期。
RTC的功能包括计时和提供当前的时间和日期。它包含两个32位的寄存器,分别用于存储秒、分钟、小时(1224小时制)、星期几、日期、月份和年份。RTC还可以自动补偿月份的天数,并提供二进制格式的亚秒值。RTC在通过主板电池供电的情况下,即使开发板断电也能独立运行。
在嵌入式系统中,RTC主要用于提供准确的时间。

RTC的内部结构框图如图1所示:
1 结构框图

对RTC初始化的函数为:
static void MX_RTC_Init(void)
{
  RTC_TimeTypeDef sTime = {0};
  RTC_DateTypeDef sDate = {0};
  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 127;
  hrtc.Init.SynchPrediv = 255;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
    Error_Handler();
  }
  //  if (HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x32F2)
  sTime.Hours = 0x23;
  sTime.Minutes = 0x58;
  sTime.Seconds = 0x0;
  sTime.SubSeconds = 0x0;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
  {
    Error_Handler();
  }
  // HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR0, 0x32F2);
  sDate.WeekDay = RTC_WEEKDAY_WEDNESDAY;
  sDate.Month = RTC_MONTH_NOVEMBER;
  sDate.Date = 0x2;
  sDate.Year = 0x24;
  if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
  {
    Error_Handler();
  }
  __HAL_RCC_CLEAR_RESET_FLAGS();
}

LCD屏显示功能的配合下,其获取并显示时间的函数为:
static void RTC_CalendarShow(uint8_t *showtime, uint8_t *showdate)
{
    RTC_DateTypeDef sdatestructureget;
    RTC_TimeTypeDef stimestructureget;
    HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);
    HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);
    LCD_ShowNum(20,30,stimestructureget.Hours,2,YELLOW);
    LCD_ShowNum(44,30,stimestructureget.Minutes,2,YELLOW);
    LCD_ShowNum(68,30,stimestructureget.Seconds,2,YELLOW);
}

实现电子时钟计时功能的主程序为:
int main(void)
{
  HAL_Init();
  BSP_LED_Init(LD1);
  BSP_LED_Init(LD3);
  BSP_LED_Init(LD2);
  SystemClock_Config();
  PeriphCommonClock_Config();
  MX_GPIO_Init();
  MX_RTC_Init();
  BSP_LED_On(LD1);
  RTCStatus = 1;
  LCD_GPIO();
  Lcd_Init();
  LCD_Clear(RED);
  LCD_ShowString(10,10,"STM32WB09KE",YELLOW);
  LCD_ShowString(10,30,"jinglixixi",YELLOW);
  HAL_Delay(2000);
  LCD_Clear(RED);
  LCD_ShowChar(36,30,':',1,YELLOW);
  LCD_ShowChar(60,30,':',1,YELLOW);
  while (1)
  {
      RTC_CalendarShow(aShowTime, aShowDate);
      HAL_Delay(500);
  }
}

经程序的编译与下载,其显示效果如图2所示。
2 连接与显示

3 显示效果



使用特权

评论回复
沙发
AdaMaYun| | 2024-11-11 19:06 | 只看该作者
RTC与电子时钟学习

使用特权

评论回复
板凳
yangjiaxu| | 2024-11-29 14:12 | 只看该作者
RTC确实很多项目都在使用,这个RTC不知道准不准确,我们一般都是使用的外置的RTC

使用特权

评论回复
地板
jinglixixi|  楼主 | 2024-11-29 16:42 | 只看该作者
yangjiaxu 发表于 2024-11-29 14:12
RTC确实很多项目都在使用,这个RTC不知道准不准确,我们一般都是使用的外置的RTC ...

一般短时间使用没问题,长时间使用可能累计偏差会大一些。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

464

主题

2778

帖子

38

粉丝