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

四、实验现象

相关推荐
REDcker8 天前
WebCodecs VideoDecoder 的 hardwareAcceleration 使用
前端·音视频·实时音视频·直播·webcodecs·videodecoder
YYDataV数据可视化8 天前
【P2P音视频通信系统】之 WebRTC Android平台 aar 下载
webrtc·实时音视频
YYDataV数据可视化9 天前
【P2P音视频通信系统】之TURN 服务详解
音视频·webrtc·实时音视频·ai编程
TSINGSEE9 天前
EasyGBS视频质量诊断:告别人工盯屏,AI智能巡检如何“主动”发现11种画质异常?
人工智能·音视频·实时音视频·视频质量诊断·画面冻结·画面抖动·偏色检测
zymill9 天前
hysAnalyser和flvAnalyser对比
音视频·实时音视频·视频编解码·h.264·智能电视·视频分析·mpeg-2
YYDataV数据可视化10 天前
WebRTC ICE 候选类型详解:对等反射候选者(Peer Reflexive Candidate)
webrtc·实时音视频·ai编程
YYDataV数据可视化10 天前
【音视频通话系统】架构详解
音视频·webrtc·实时音视频
REDcker11 天前
RTP、RTCP 与 SRTP 协议详解
网络·音视频·webrtc·实时音视频·rtp·rtcp
linux_cfan16 天前
Chrome 彻底封杀 Flash 后,安防监控如何实现 RTSP 流无插件播放?(2026解决方案)
javascript·安全·实时音视频·html5
REDcker22 天前
Oryx开发者快速入门
服务器·后端·音视频·实时音视频·srs·流媒体·oryx