494|0

113

帖子

1

TA的资源

一粒金砂(高级)

【ST NUCLEO-WB09KE测评】-5-RTC测试 [复制链接]

本帖最后由 慕容雪花 于 2024-9-12 14:28 编辑

本文将体验WB09芯片的RTC特性,开发环境是STM32CubeIDE。

‌RTC是实时时钟。‌ RTC是一个独立的定时器,拥有一个连续计数的计数器,可以在相应的软件配置下提供时钟日历的功能。通过修改计数器的值,可以重新设置系统当前的时间和日期。‌12

RTC的功能包括计时和提供当前的时间和日期。它包含两个32位的寄存器,分别用于存储秒、分钟、小时(12或24小时制)、星期几、日期、月份和年份。RTC还可以自动补偿月份的天数,并提供二进制格式的亚秒值。RTC通过主板电池供电,即使在断电情况下也能独立运行。

RTC在不同领域有不同的应用。例如,在嵌入式系统中,RTC用于提供准确的时间;在计算机系统中,RTC与CMOS集成,通过主板电池供电,确保系统时间在关机后仍然准确;在通信领域,RTC即时通讯用于企业内部的信息交流。

下图所示为RTC模块框图:

image.png  

 

在CubeIDE中配置使能RTC模块,配置时钟:

0.jpg
 
1.jpg

 

之后点击保存,自动生成代码:

static void MX_RTC_Init(void)
{

  /* USER CODE BEGIN RTC_Init 0 */

  /* USER CODE END RTC_Init 0 */

  RTC_TimeTypeDef sTime = {0};
  RTC_DateTypeDef sDate = {0};

  /* USER CODE BEGIN RTC_Init 1 */

  /* USER CODE END RTC_Init 1 */

  /** Initialize RTC Only
  */
  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();
  }

  /* USER CODE BEGIN Check_RTC_BKUP */

  /* USER CODE END Check_RTC_BKUP */

  /** Initialize RTC and set the Time and Date
  */
  sTime.Hours = 0x21;
  sTime.Minutes = 0x0;
  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();
  }
  sDate.WeekDay = RTC_WEEKDAY_WEDNESDAY;
  sDate.Month = RTC_MONTH_SEPTEMBER;
  sDate.Date = 0x11;
  sDate.Year = 0x24;

  if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN RTC_Init 2 */

  /* USER CODE END RTC_Init 2 */

}

添加获取日期,时间函数:

static void RTC_CalendarShow(uint8_t *showtime, uint8_t *showdate)
{
  RTC_DateTypeDef sdatestructureget;
  RTC_TimeTypeDef stimestructureget;

  /* Get the RTC current Time */
  HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);
  /* Get the RTC current Date */
  HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);
  /* Display time Format : hh:mm:ss */
  sprintf((char *)showtime, "%02d:%02d:%02d", stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);
  /* Display date Format : mm-dd-yyyy */
  sprintf((char *)showdate, "%02d-%02d-%02d", sdatestructureget.Month, sdatestructureget.Date, 2000 + sdatestructureget.Year);
}

主程序:

  while (1)
  {

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  static uint8_t i;
	  printf("\r\n idle main loop, current date: %s, current time: %s", aShowDate, aShowTime);
	  OLED_Clear();
	  OLED_ShowString(0,0,"OLED Driven by HwI2C",8,1);
	  OLED_ShowString(0,12,"STM32 WB09KE",8,1);
	  OLED_ShowString(24,24,"Time & Date",16,1);
	  OLED_ShowString(0,48,aShowDate,8,1);
	  OLED_ShowString(80,48,aShowTime,8,1);
	  OLED_Refresh();

	  RTC_CalendarShow(aShowTime, aShowDate);

	  HAL_Delay(100);
  }

 

实物展示:

671642066

 

增加了三个按键分别修改小时,分钟,秒:

void HAL_GPIO_EXTI_Callback(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {

	RTC_TimeTypeDef tempTime = {0};
	/* Prevent unused argument(s) compilation warning */
	UNUSED(GPIO_Pin);

    if (HAL_RTC_GetTime(&hrtc, &tempTime, RTC_FORMAT_BCD) != HAL_OK)
    {
	  Error_Handler();
    }

	if (GPIO_Pin == B1_PIN) {
		BSP_LED_Toggle(LD1);
		printf("\r\n B1 Pressed. Hours++");
		tempTime.Hours++;
	}
	if (GPIO_Pin == B2_PIN) {
		BSP_LED_Toggle(LD2);
		printf("\r\n B2 Pressed. Minutes++");
		tempTime.Minutes++;
	}
	if (GPIO_Pin == B3_PIN) {
		BSP_LED_Toggle(LD3);
		printf("\r\n B3 Pressed. Seconds++");
		tempTime.Seconds++;
	}

    if (HAL_RTC_SetTime(&hrtc, &tempTime, RTC_FORMAT_BCD) != HAL_OK)
    {
	  Error_Handler();
    }

}


 

 

此帖出自RF/无线论坛

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
嵌入式,累死你没商量

做了一段时间嵌入式,发现自己憔悴了很多 又研究硬件,看电路图,DATASHEET,又要搞代码,方案公司的代码长的不得了,有时候真想 ...

【注目】我觉得电子设计大赛最应该注意的

本帖最后由 paulhyde 于 2014-9-15 08:53 编辑 就是评分标准! 正弦信号发生器(A题) 一、任务 设计制作一个正弦信号发生 ...

问一下关99SE的问题

我用的99SE电路板图画完了,可是要怎么样才能生成PCB板啊。我以前会,可是现在忘了。英语还看不懂。

LED驱动电路集锦

50596

「ADI模拟大学堂」电源管理基础知识(2014.3.9)

143760「ADI模拟大学堂」电源管理基础知识(2014.3.9) (每日一份资料)由于「ADI模拟大学堂」差分放大器以及相关设计软件的基础 ...

MSP430fr6989的串口DMA发送实验例程

主要用到这两个寄存器: DMACTL0用于选择DMA通道;比如ADC12,串口 ,IIC,SPI,此处多说一句:DMA是一种方式,而SPI,IIC, ...

VS-rk3399主板adb 链接不上问题如何解决?

VS-rk3399主板adb 链接不上问题如何解决? 近来有不少人都在问,为啥RK3399的android系统,怎么都连接不上adb调试。 具体 ...

MOS管电流方向能反吗?体二极管能过多大电流?

今天来说两个问题: 1、MOS管导通电流能否反着流?D到S,S到D方向随意? 2、MOS管体二极管能过多大的电流? ...

5820A 福禄克FLUKE多功能校准器

刘小姐18124618938 V:18025446127 描述 足够便携和坚固,适合现场应用 用于快速自动校准的五通道选项 外部触发器 ...

小熊派BearPi-Pico H2821星闪开发板测评(七)——传输与功耗测试

本帖最后由 FuShenxiao 于 2024-8-28 22:30 编辑 官方案例中已经编写了测试传输速率的代码。 配置测速跑流模式 Server ...

快速回复 返回顶部 返回列表