【蓝桥杯嵌入式】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);

四、实验现象

相关推荐
DogDaoDao2 小时前
Android MediaCodec 全面详解:从入门到精通
android·音视频·实时音视频·视频编解码·短视频·视频直播·mediacodec
喵了几个咪5 小时前
Kratos WebRTC 传输中间件:H5游戏P2P实时音视频与数据通信实战
游戏·微服务·中间件·golang·webrtc·实时音视频·kratos
DogDaoDao3 天前
AV1 环路滤波器深度解析:av1_loopfilter.c 源码原理详解
音视频·实时音视频·视频编解码·av1·vp9·libaom·环路滤波
Coovally AI模型快速验证4 天前
IJCV 2026|让重复视频片段拥有“唯一”字幕,判别性提示 CDP,检索性能提升 15%
人工智能·计算机视觉·实时音视频
电子科技圈5 天前
XMOS将亮相台北国际电脑展并演示其在边缘AI和创新音频与互联等领域内的新方案
人工智能·游戏·计算机视觉·视觉检测·音视频·语音识别·实时音视频
深圳市晶科鑫实业有限公司8 天前
RTC模块vs. 32.768KHz晶振:深度对比与选型指南
stm32·单片机·嵌入式硬件·实时音视频·rtc
翼龙云_cloud9 天前
腾讯云代理商:腾讯云qGPU+TRTC实时音视频 AI 处理的黄金组合
人工智能·腾讯云·实时音视频·ai算力·腾讯云qgpu
風清掦12 天前
【STM32学习笔记-12】Unix 时间戳、BKP 备份寄存器与 RTC 实时时钟
笔记·stm32·单片机·嵌入式硬件·学习·实时音视频·unix
byte轻骑兵12 天前
【LE Audio】CAP精讲[1]: 从理论到实操,CAP 协同流程入门全攻略
音视频·实时音视频·le audio·低功耗音频·蓝牙通话
byte轻骑兵16 天前
【LE Audio】BASS精讲[6]: SDP适配全流程,BR/EDR下的BASS服务互通
人工智能·实时音视频·le audio·低功耗音频·bass