• STM32 RTC实验


    RTC时钟简介

    STM32F103的实时时钟(RTC)是一个独立的定时器。
    STM32的RTC模块拥有一组连续计数的计数器,在相对应的软件配置下,可提供时钟日历的功能。
    修改计数器的值可以重新设置系统的当前时间和日期。

    RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系统复位或从待机模式唤醒后RTC的设置和时间维持不变,只要后备区域供电正常,那么RTC将可以一直运行。

    但是在系统复位后,会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的意外写操作。所以在设置时间之前,先要取消备份区域(BKP)的写保护。

    实时时钟(Real Time Clock,RTC),本质是一个计数器,计数频率常为秒专门用来记录时间。

    在这里插入图片描述
    普通定时器不能拿来作时钟,因为普通定时器无法掉电运行。

    RTC特性

    1. 能提供时间(秒钟数)
    2. 能在MCU掉电后运行
    3. 低功耗

    常见的RTC方案

    在这里插入图片描述
    芯片上自带有RTC

    在这里插入图片描述
    对比
    在这里插入图片描述

    1. 一般都需要设计RTC外围电路。
    2. 一般都可以给RTC设置独立的电源。
    3. 多数RTC的寄存器采用BCD码存储时间信息。(F1使用16进制)

    在这里插入图片描述

    1. RTC预分频器
      在这里插入图片描述
      RTC_PRL预分频值=32767,也就是32768分频,得到频率1Hz。
    2. 32位可编程计数器
    3. 待机唤醒
    4. RTC控制寄存器与APB1接口

    RTC工作在后备区域,VDD掉电仍正常。
    在这里插入图片描述

    后备寄存器和RTC寄存器特性

    1. 部分寄存器写保护:RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器不会被系统复位。
    2. 数据存储功能:RTC和后备寄存器不会被系统或电源复位源复位;当从待机模式唤醒时,也不会被复位。后备寄存器可用于保存掉电时的数据。
    3. RTC和后备寄存器通过一个开关供电,在VDD有效时该开关选择VDD供电,否则由VBAT引脚供电。在VBAT供电时仍可继续工作。
    4. 2个独立复位:APB1接口由系统复位;RTC核心只能由后备域复位。

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    RTC基本驱动步骤(F1)

    1. 使能电源时钟并使能后备域访问:__HAL_RCC_PWR_CLK_ENABLE 使能电源时钟
      __HAL_RCC_BKP_CLK_ENABLE 使能电源时钟
      HAL_PWR_EnbaleBkUpAccess 使能备份访问
    2. 开启LSE/选择RTC时钟源/使能RTC时钟
      在这里插入图片描述
    3. 初始化RTC,设置分频值以及工作参数。
      在这里插入图片描述
    4. 设置RTC的日期和时间:操作寄存器方式实现rtc_set_time
    5. 获取RTC当前日期和时间:rtc_get_time

    F1的RTC没有日历寄存器,使用时只存储总秒数,不利于直接设置和显示,所以还需要编写函数把时间变成我们日常的日历时间。

    在这里插入图片描述
    在这里插入图片描述

    编程实战

    驱动RTC,使用串口打印当前时间。

  • 相关阅读:
    如何使用宝塔面板部署MySQL数据库,并结合内网穿透实现固定公网地址远程连接
    PHP:namespace 关键字和 __NAMESPACE__ 常量
    ConcurrentHashMap(JDK1.8)中红黑树的实现
    Springboot毕设项目车辆管理系统1200l(java+VUE+Mybatis+Maven+Mysql)
    PSU 19.19安装
    C++DAY49
    LCR 147.最小栈
    如何实现一个优秀的 HashTable 散列表?
    JSP Taglib指令具有什么功能呢?
    点分治学习笔记 / 洛谷 P3806【点分治】
  • 原文地址:https://blog.csdn.net/Caramel_biscuit/article/details/132615926