STM32CubeMX学习笔记-RTC实时时钟使用

STM32CubeMX学习笔记-RTC实时时钟使用

  • 一、RTC简介
  • 二、新建工程
  • 三、RTC
    • 3.1 选择时钟
    • 3.3 生成代码
    • 3.5 添加读取时间函数

原创链接 1

一、RTC简介

实时时钟(RTC) 是一个独立的 BCD 定时器/计数器。 RTC 提供具有可编程闹钟中断功能的日历时钟/日历。RTC 还包含具有中断功能的周期性可编程唤醒标志。两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时( 12 或 24 小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。只要芯片的备用电源一直供电,RTC上的时间会一直走。

STM32 的 RTC 外设(Real Time Clock),实质是一个掉电后还继续运行的定时器。从定时器的角度来说,相对于通用定时器 TIM 外设,它十分简单,只有很纯粹的计时和触发中断的功能;但从掉电还继续运行的角度来说,它却是 STM32 中唯一一个具有如此强大功能的外设。所以 RTC 外设的复杂之处并不在于它的定时功能,而在于它掉电还继续运行的特性。在主电源 VDD有效的情况下(待机),RTC 还可以配置闹钟事件使 STM32 退出待机模式。

二、新建工程

1. 打开 STM32CubeMX 软件,点击“新建工程”STM32CubeMX学习笔记-RTC实时时钟使用_第1张图片

2. 选择 MCU 和封装
STM32CubeMX学习笔记-RTC实时时钟使用_第2张图片
3. 配置时钟
RCC 设置,选择 HSE(外部高速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器)
开启 LSE(外部低速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器)
STM32CubeMX学习笔记-RTC实时时钟使用_第3张图片

选择 Clock Configuration,配置系统时钟 SYSCLK 为 72MHz
修改 HCLK 的值为 72 后,输入回车,软件会自动修改所有配置
STM32CubeMX学习笔记-RTC实时时钟使用_第4张图片

4. 配置调试模式
非常重要的一步,否则会造成第一次烧录程序后续无法识别调试器

SYS 设置,选择 Debug 为 Serial Wire
STM32CubeMX学习笔记-RTC实时时钟使用_第5张图片

三、RTC

3.1 选择时钟

选择 Clock Configuration,RTC 时钟选择为 外部低速晶振(LSE),频率为 32.768KHz。

RTC 设备因为其独特的运行方式(即掉电依旧运行)使用 HSE 分频时钟或者 LSI 的时候,在主电源 VDD 掉电的情况下,这两个时钟来源都会受到影响,资源消耗太大,小小的纽扣电池根本吃不消。没法保证 RTC 正常工作.所以 RTC 一般都时钟低速外部时钟 LSE。
STM32CubeMX学习笔记-RTC实时时钟使用_第6张图片

3.2 参数配置
Timers 中选择 RTC 设置,并勾选 Activate Clock Source 激活时钟源,勾选 Activate Calendar 激活万年历。
STM32CubeMX学习笔记-RTC实时时钟使用_第7张图片

RTC OUT:Disable(是否使能 tamper(PC13)引脚上输出校正的秒脉冲时钟)
Tamper:不勾选(是否使能tamper(PC13)引脚作为入侵检测功能)

RTC校验功能,使能侵入检测功能。RTC时钟经64分频输出到侵入检测引脚TAMPER上
当 TAMPER引脚上的信号从 0变成1或者从 1变成 0(取决于备份控制寄存器BKP_CR的 TPAL位),会产生一个侵入检测事件。侵入检测事件将所有数据备份寄存器内容清除。

Parameter Settings 进行具体参数配置。
STM32CubeMX学习笔记-RTC实时时钟使用_第8张图片

●Calendar Time

●Data Format(日期格式):BCD data format

STM32CubeMX学习笔记-RTC实时时钟使用_第9张图片

●Hours(小时)
●Minutes(分钟)
●Seconds(秒)

Calendat Date

●Week Day(星期)
●Month(月份)
●Date(日期)
●Year(年份)

3.3 生成代码

输入项目名和项目路径
STM32CubeMX学习笔记-RTC实时时钟使用_第10张图片

选择应用的 IDE 开发环境 MDK-ARM V5
STM32CubeMX学习笔记-RTC实时时钟使用_第11张图片

每个外设生成独立的 ’.c/.h’ 文件
不勾:所有初始化代码都生成在 main.c
勾选:初始化代码生成在对应的外设文件。 如 GPIO 初始化代码生成在 gpio.c 中。
STM32CubeMX学习笔记-RTC实时时钟使用_第12张图片

点击 GENERATE CODE 生成代码
STM32CubeMX学习笔记-RTC实时时钟使用_第13张图片

3.4 添加全局变量
main.c 头部添加 RTC 相关结构体 GetDataGetTime

/* Private variables ---------------------------------------------------------*/
RTC_HandleTypeDef hrtc;

UART_HandleTypeDef huart1;

/* USER CODE BEGIN PV */
RTC_DateTypeDef GetData;  //获取日期结构体
RTC_TimeTypeDef GetTime;   //获取时间结构体
/* USER CODE END PV */

3.5 添加读取时间函数

在while循环中添加:

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* 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_USART1_UART_Init();
  MX_RTC_Init();
  /* USER CODE BEGIN 2 */
  
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* Get the RTC current Time */
    HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);
    /* Get the RTC current Date */
    HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);

    /* Display date Format : yy/mm/dd */
    printf("%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date);
    /* Display time Format : hh:mm:ss */
    printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);

    printf("\r\n");

    HAL_Delay(1000);

    /* USER CODE END WHILE */

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

3.6 查看打印
串口打印功能查看 STM32CubeMX学习笔记(6)——USART串口使用
STM32CubeMX学习笔记-RTC实时时钟使用_第14张图片


  1. 链接:https://www.jianshu.com/p/4a1d0c221a4a 作者:Leung_ManWah ↩︎

你可能感兴趣的:(stm32,学习,笔记)