STM32的RTC时钟配置

2023-10-26

STM32的时钟可以使用内部RTC产生时钟日历,也可以使用外部芯片产生更为精确的时钟,如DS3231时钟芯片。本文介绍使用内部RTC产生时钟。

RTC的时钟源有以下三种:                                                                                                              ─ HSE时钟除以128;                                                                                                                      ─ LSE振荡器时钟;(常用的是外部低速,稳定精准,重要的是VDD掉电后可有后备供电区域给它供电)                                                                                                                                              ─ LSI振荡器时钟。

一般情况下,为了VDD掉电后可使用后备供电区域给它供电,可以使用LSE振荡器时钟

RTC时钟配置的一般步骤:

1:使能PWR时钟:RCC_APB1PeriphClockCmd();
2:使能后备寄存器访问: PWR_BackupAccessCmd();
3:配置RTC时钟源,使能RTC时钟:
        RCC_RTCCLKConfig();
        RCC_RTCCLKCmd();
        如果使用LSE,要打开LSE:RCC_LSEConfig(RCC_LSE_ON);
4:初始化RTC(同步/异步分频系数和时钟格式):RTC_Init ();

5:设置时间:RTC_SetTime ();
6:设置日期:RTC_SetDate();

7:开启相关中断(可选)

8:编写中断函数(可选,如果第7开启中断的话)


相应的库函数代码:

  RTC_InitTypeDef RTC_InitStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR时钟
  PWR_BackupAccessCmd(ENABLE);    //使能后备寄存器访问   
  if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x5152)        //是否第一次配置?
    {   
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);        //设置RTC时钟(RTCCLK),选择LSE作为RTC时钟    
        RCC_RTCCLKCmd(ENABLE);    //使能RTC时钟 

        RCC_LSEConfig(RCC_LSE_ON);//LSE 开启

    RTC_InitStructure.RTC_AsynchPrediv = 0x7F;//RTC异步分频系数(1~0X7F)
    RTC_InitStructure.RTC_SynchPrediv  = 0xFF;//RTC同步分频系数(0~7FFF)
    RTC_InitStructure.RTC_HourFormat   = RTC_HourFormat_24;//RTC设置为,24小时格式
    RTC_Init(&RTC_InitStructure);
 
        RTC_Set_Time(12,0,0,RTC_H12_AM);    //设置时间
        RTC_Set_Date(17,11,1,3);        //设置日期
        RTC_WriteBackupRegister(RTC_BKP_DR0,0x5152);    //标记已经初始化过了
    } 

如果有中断 唤醒,7,8的中断配置步骤如下;

1:如上,配置好RTC初始化相关参数。
2:关闭WakeUp:RTC_WakeUpCmd(DISABLE);
3:配置WakeUp时钟分频系数/来源: RTC_WakeUpClockConfig();
4:设置WakeUp自动装载寄存器:RTC_SetWakeUpCounter();
5:使能WakeUp : RTC_WakeUpCmd( ENABLE);
6:开启配置闹钟中断:
        RTC_ITConfig();
        EXTI_Init();
        NVIC_Init();
7:编写中断服务函数: RTC_WKUP_IRQHandler();

相应库函数代码如下:

 EXTI_InitTypeDef   EXTI_InitStructure; 
  NVIC_InitTypeDef   NVIC_InitStructure;
      
  RTC_WakeUpCmd(DISABLE);//关闭WAKE UP  
  RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);//唤醒时钟选择  
  RTC_SetWakeUpCounter(0);//设置WAKE UP自动重装载寄存器  
         
  RTC_ITConfig(RTC_IT_WUT,ENABLE);//开启WAKE UP 定时器中断  
  RTC_WakeUpCmd( ENABLE);//开启WAKE UP 定时器   
      
  EXTI_InitStructure.EXTI_Line = EXTI_Line22;//LINE22  
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件  
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发   
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能LINE22  
    EXTI_Init(&EXTI_InitStructure);//配置  
   
  NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;   
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = RTCWKUP_PRIORITY;//抢占优先级1  
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = RTCWKUP_SUBPRIORITY;//子优先级2  
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道  
    NVIC_Init(&NVIC_InitStructure);//配置 

void RTC_WKUP_IRQHandler(void)
{
    if(RTC_GetITStatus(RTC_IT_WUT)){
        RTC_ClearITPendingBit(RTC_IT_WUT);
        RTC_GetTime(RTC_Format_BCD, (RTC_TimeTypeDef*)&systemtime.time);
        RTC_GetDate(RTC_Format_BCD, (RTC_DateTypeDef*)&systemtime.date);
    }
    
    EXTI_ClearITPendingBit(EXTI_Line22);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32的RTC时钟配置 的相关文章

随机推荐

  • 旧视频调整为4k视频提高分辨率Topaz Video Enhance AI

    Topaz Video Enhance AI是Mac上的提升视频分辨率的工具 也是拍摄出色画面 并将其变得完美方法 借助软件Topaz Video Enhance AI 可以将您的素材从标清转换为高清 并不会发生模糊 且会得到质量的提升 非
  • Java并发编程系列 - 互斥锁:解决原子性问题

    Java并发编程系列 互斥锁 解决原子性问题 原子的意思代表着 不可分 那么如果我们要保证原子性就必须满足 同一时刻只有一个线程执行 称之为互斥 如果我们能够保证对 共享变量的修改是互斥的 那么 无论是单核 CPU 还是多核 CPU 就都能
  • Elasticsearch框架基础概念

    Elasticsearch ES 是一个基于Lucene构建开源分布式搜索引擎并提供Restful接口 Es是一个分布式文档数据库 JSON数据格式存储 类似MongoDB JSON中的每个字段数据都可作为搜索条件 并且能够扩展至数以百计的
  • Mysql查询数据库表中前几条记录

    Mysql查询数据库表中前几条记录问题 我想好多朋友也会碰到 下面我简单的说下我遇到的情况 且解决方法 希望对好多朋友有许多帮助 下面是我数据库test中表student的数据 其中第二条记录被我删除了 在查询分析器中输入select fr
  • Deep Learning:基于pytorch搭建神经网络的花朵种类识别项目(内涵完整文件和代码)—超详细完整实战教程

    基于pytorch的深度学习花朵种类识别项目完整教程 内涵完整文件和代码 相关链接 超详细 CNN卷积神经网络教程 零基础到实战 大白话pytorch基本知识点及语法 项目实战 文章目录 基于pytorch的深度学习花朵种类识别项目完整教程
  • Java集合 —— Map集合

    目录 1 Map接口和Collection接口的不同 2 Map集合的特点 3 Map集合的功能 4 HashMap原理 谈谈你对HashMap的理解 HashMap的数据插入原理是怎样的 5 HashTable特点 6 LinkedHas
  • Unity游戏开发 怪物巡逻AI

    今天实现的内容是怪物AI 看了一些网上的AI 不是特别符合我的需求 于是就自己研究了一种AI 大致和魔兽类的RPG游戏效果差不多 AI效果如下 1 将怪物分为如下几个状态 待机状态 该状态内有3种行为 原地呼吸 原地观察 和游走 可通过权重
  • 汇编语言(王爽第三版)实验九

    实验九 题目与个人思路 编程 在屏幕中间分别显示绿色 绿底红色 白底蓝色的字符串 welcome to masm 在80 25彩色字符模式下 显示器可以显示25行 每行80个字符 根据题意大致效果如下图所示 11行的起始地址计算10 80
  • C语言典型例题二——杨辉三角

    C语言典型例题二 杨辉三角 杨辉三角 C语言中的位运算有哪些操作符 杨辉三角 1 杨辉三角最本质的特征是 它的两条斜边都是由数字1组成的 而其余的数则是等于它肩上的两个数之和 这就是我们用C语言写杨辉三角的关键之一 杨辉三角是一种数学工具
  • Android Looper原理源码分析

    概要 在很久以前的时候转载了一小篇文章 Android Message Queue Message Looper Handler 白话介绍了一下Android Message Queue Looper Handler这几个概念之间的关系 其
  • windows下 mysql忘记root的密码怎么办

    如果mysql忘记密码无法登入 可以通过绕开输入密码登入的方式进行修改 步骤如下 1 右击 此电脑 点击 管理 打开 计算机管理 点击 服务与应用程序 点击 服务 2 找到mysql 先右击停用 再次右击mysql的打开属性对话框 3 在属
  • 942、增减字符串匹配——贪心+vector初始化方法

    文章目录 一 题目描述 二 题目分析 三 代码实现 四 总结 1 回顾一下 vector texttt vector vector 容器的几种初始化操作 一 题目描述 942 增减字符串匹配 由范围 0 n 内所有整数组成的 n
  • Go中 go-sql-driver 的使用

    go sql driver 是 Go 语言中一个常用的 MySQL 数据库驱动程序 支持 MySQL5 5 MySQL5 6 和 MySQL5 7 本文将介绍如何使用 go sql driver 包连接 MySQL 数据库 安装 在命令行中
  • linux计划任务5个*分表代表什么,linux 設置定時任務crontab

    前言 做自動化測試寫的腳本需要設置定制任務 在指定的時間去執行 這就需要用到定時任務 之前用jenkins可以在里面設置定時任務 很好用 其實在linux上也可以用crontab做定時任務 cron 在LINUX中 周期執行的任務一般由cr
  • Python在工业自动化领域的应用详解

    当我们开始讨论在工业自动化应用中使用哪种编程语言时 通常我们会首先谈论IEC 61131 3标准中用于可编程逻辑控制器 PLC 的语言 比如经典的梯形图 LD 或结构化文本 ST 对于机器人等应用 我们经常看到低级编译语言 比如C语言 这几
  • python代码规范快捷键_VS Code写Python的一些小技巧

    原标题 VS Code写Python的一些小技巧 本文基于 VS Code 1 36 1 为什么要用 VS Code 用 PyCharm 不好吗 VS Code 是开源免费的 PyCharm 是收费的 VS Code 除了 Python 还
  • Glcm 灰度共生矩阵,保姆级别教程,获取图片的Glcm和基于Glcm的纹理特征,附讲解思路,python代码的实现

    保姆级别教程 获取图片的Glcm和基于Glcm的纹理特征 附讲解思路 python代码的实现 网络上Glcm的原理很多 但是实现的python代码我确实没找到 讲的也不是很清楚 此文介绍了如何在一张图片中得到Glcm灰度共生矩阵 并基于Gl
  • opencv中矩阵运算

    opencv中矩阵运算 标签 1 cvLoadImage 将图像文件加载至内存 2 cvNamedWindow 在屏幕上创建一个窗口 3 cvShowImage 在一个已创建好的窗口中显示图像 4 cvWaitKey 使程序暂停 等待用户触
  • 理解ROC曲线,TPR与FPR

    在垃圾邮件判别模型中 邮件被判别为垃圾邮件为positive 被判别为非垃圾邮件为negative 那么 TPR TP TP FN 的含义是 垃圾邮件被正常判别为垃圾邮件的比例 FPR FP FP TN 的含义是 非垃圾邮件被判别为垃圾邮件
  • STM32的RTC时钟配置

    STM32的时钟可以使用内部RTC产生时钟日历 也可以使用外部芯片产生更为精确的时钟 如DS3231时钟芯片 本文介绍使用内部RTC产生时钟 RTC的时钟源有以下三种 HSE时钟除以128 LSE振荡器时钟