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

四、实验现象

相关推荐
TEL189246224772 天前
IT6636:3输入1输出HDMI 2.1V重定时开关,内置MCU
音视频·实时音视频·视频编解码
简鹿视频2 天前
怎么把mkv视频格式转换为asf视频格式
ffmpeg·音视频·实时音视频·视频编解码·格式工厂
Smile_2542204183 天前
vlc的使用
网络·webrtc·实时音视频
Nautiluss3 天前
一起玩XVF3800麦克风阵列(十)
linux·人工智能·python·音频·语音识别·实时音视频·dsp开发
沃达德软件5 天前
智能警务视频侦查系统
大数据·人工智能·数据挖掘·数据分析·实时音视频·视频编解码
沟通qq 8762239656 天前
用元胞自动机模拟增材制造微观组织:Matlab 实现枝晶生长
实时音视频
小曾同学.com7 天前
SRT协议推拉流
ffmpeg·实时音视频·vlc·obs·srt协议·srt推拉流
qq_411262429 天前
TG1WDT_SYS_RST / RTC_SW_SYS_RST 这类复位原因
实时音视频
简鹿视频10 天前
视频转mp4格式具体作步骤
ffmpeg·php·音视频·实时音视频
小曾同学.com10 天前
为什么过滤 rtmpt 而不是 rtmp?
wireshark·实时音视频·抓包·rtmp·rtmpt