【蓝桥杯嵌入式】RTC——实时时钟

一、RTC简介

RTC

RTC---real time clock,实时时钟,主要包含日历、闹钟和自动唤醒这三部分的功能,其中的日历功能我们使用的最多。日历包含两个32bit的时间寄存器,可直接输出时分秒,星期、月、日、年。

从Cubemx里的配置选项我们也可以看到功能。

时钟源

  • 其中使用最多的是LSE,LSE由一个外部的32.768KHZ(6PF负载)的晶振提供,精度高,稳定,RTC首选。
  • LSI是芯片内部的30KHZ晶体,精度较低,会有温漂,一般不建议使用。
  • HSE_RTC由HSE分频得到,最高是750khz,使用的也较少。

因为我们的竞赛板子上只有HSE和LSI,并未连接LSE,所以我们这里选用LSI作为时钟源。

预分频器

预分频器PRER由7位的异步预分频器APRE和15位的同步预分频器SPRE组成。异步预分频器时钟CK_APRE用于为二进制 RTC_SSR 亚秒递减计数器提供时钟,同步预分频器时钟CK_SPRE用于更新日历。 异步预分频器时钟fCK_APRE=fRTC_CLK/(PREDIV_A+1), 同步预分频器时钟f:sub:CK_SPRE=fRTC_CLK/(PREDIV_S+1),)。 使用两个预分频器时,推荐将异步预分频器配置为较高的值,以最大程度降低功耗。

二、cubemx配置

模式和时钟源的配置上面已经展示,在此不作展示

  • 配置12小时制还是24小时制
  • 配置异步预分频器APRE和15位的同步预分频器SPRE
  • 配置日历

如有需要自习配置闹钟功能,在闹钟中断服务回调函数里进行代码编写。

cpp 复制代码
// 启动闹钟中断事件
    HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN);

三、RTC时钟实验

cpp 复制代码
int main(void)
{

  /* USER CODE BEGIN 1 */

	RTC_TimeTypeDef S_F_M;
	RTC_DateTypeDef N_Y_R;

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM3_Init();
  MX_TIM6_Init();
  MX_TIM17_Init();
  MX_RTC_Init();
  /* USER CODE BEGIN 2 */
  display_init();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  HAL_TIM_Base_Start_IT(&htim6);  
  while (1)
  {
    HAL_RTC_GetTime(&hrtc,&S_F_M,RTC_FORMAT_BIN);
    HAL_RTC_GetDate(&hrtc,&N_Y_R,RTC_FORMAT_BIN);
    char text[30] ;
    sprintf(text,"  %d.%d.%d",S_F_M.Hours,S_F_M.Minutes,S_F_M.Seconds);//时间
    LCD_DisplayStringLine(Line2,(u8*)text);
    sprintf(text,"  %d.%d.%d",N_Y_R.Year,N_Y_R.Month,N_Y_R.Date);//日期
    LCD_DisplayStringLine(Line3,(u8*)text);
    sprintf(text,"  %d",N_Y_R.WeekDay);//星期几
    LCD_DisplayStringLine(Line4,(u8*)text);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

关键处:①两个结构体

cpp 复制代码
	RTC_TimeTypeDef S_F_M;
	RTC_DateTypeDef N_Y_R;

②获取时间和日期(两个函数必须同时使用)

cpp 复制代码
    HAL_RTC_GetTime(&hrtc,&S_F_M,RTC_FORMAT_BIN);
    HAL_RTC_GetDate(&hrtc,&N_Y_R,RTC_FORMAT_BIN);

四、实验现象

相关推荐
小白|18 小时前
CANN与实时音视频AI:构建低延迟智能通信系统的全栈实践
人工智能·实时音视频
我真会写代码2 天前
WebSocket:告别轮询,实现Web实时通信 WebRTC:无需插件,实现浏览器端实时音视频通信
网络·websocket·网络协议·webrtc·实时音视频
TSINGSEE3 天前
国标GB28181视频质量诊断:EasyGBS服务插件EasyVQD快速识别花屏、蓝屏、画面冻结抖动
人工智能·音视频·实时音视频·视频编解码·视频质量诊断·花屏检测·画面抖动
柒.梧.3 天前
理解WebRTC:浏览器原生实时音视频通信
webrtc·实时音视频
REDcker4 天前
RTSP 直播技术详解
linux·服务器·网络·音视频·实时音视频·直播·rtsp
shansz20206 天前
暂时无法解决的关于STM32F103的RTC日期更新问题
stm32·嵌入式硬件·实时音视频
ZEGO即构开发者7 天前
如何用一句话让AI集成 ZEGO 产品
ai·实时互动·实时音视频·rtc
视频技术分享10 天前
2026年实时音视频服务选型深度解析
音视频·实时音视频·视频
摸摸电10 天前
RTC电路电池寿命计算?
实时音视频
深圳市友昊天创科技有限公司14 天前
友昊天创推出8K ,4K 120Hz 100米延长器方案
音视频·实时音视频·视频编解码