学习STM32第十八天

RTC外设详解

一、RTC实时时钟实验

RTC配置流程如下

  • 解锁备份域写保护
    RTC核心寄存器在备份域内,备份域归属PWR,因此需要开启PWR时钟再使能备份与中寄存器的写访问。
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);					//电源控制寄存器在APB1总线PWR_BackupAccessCmd(ENABLE);										//使能对备份域的访问
  • 设置时钟源
    如板载外部RTC晶振,则选择LSE时钟,同时需要对RTC时钟源配置分频系数以及时制。
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);								//RTC时钟源
//若LSE无法起振会卡死在此,则设置为内部低速时钟
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
  • 开启RTC外设
    RTC模块是一个独立的实时时钟模块,可以提供高精度时间计数和时钟功能。在配置RTC之前,一般需要等待RTC寄存器更新的同步,即确保前一个RTC操作的设置已经完成并生效
	RCC_RTCCLKCmd(ENABLE);												//使能RTCRTC_WaitForSynchro();												//等待RTC寄存器更新同步
  • 配置日历时间
    结构体RTC_TimeTypeDefRTC_DateTypeDef可以配置RTC外设的日历时间,再通过相应的函数将配置的参数设置到RTC外设寄存器中。先进行设置,后进行读取。

二、代码实现

  1. 初始化函数
void MyRTC_Init()
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);					//电源控制寄存器在APB1总线RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE);             //备份域寄存器在AHB1总线PWR_BackupAccessCmd(ENABLE);										//使能对备份域的访问RCC_LSEConfig(RCC_LSE_ON);											//开启LSE时钟while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) != SET);					//等待LSE稳定启动RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);								//RTC时钟源RCC_RTCCLKCmd(ENABLE);												//使能RTCRTC_WaitForSynchro();												//等待RTC寄存器更新同步,包含对上一次写入操作完成的等待if(RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x2002)					//查看RTC是否完成初始化{MyRTCTimeConfig(24, 4, 24, 3, 16, 59, 20, RTC_H12_AM);}PWR_BackupAccessCmd(DISABLE); 										//关闭备份域访问
}
  1. 辅助函数
void MyRTCTimeConfig(uint8_t year, uint8_t month, uint8_t date, uint8_t week,uint8_t hour, uint8_t minute, uint8_t second, uint8_t RTC_H12)
{RTC_WriteProtectionCmd(DISABLE);									//打开写保护//配置RTC时钟,LSE = 32.768KHz -》 32768 = 128 * 256RTC_InitTypeDef RTC_InitStructure;RTC_EnterInitMode();												//使能RTC编辑模式RTC_InitStructure.RTC_AsynchPrediv = 0x7F;							//设置7位异步分频值,RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;				//设置为24小时制RTC_InitStructure.RTC_SynchPrediv = 0xFF;							//设置15位同步分频值RTC_Init(&RTC_InitStructure);//时间设定RTC_TimeTypeDef RTC_TimeStructure;RTC_TimeStructure.RTC_H12 = RTC_H12;RTC_TimeStructure.RTC_Hours = hour;RTC_TimeStructure.RTC_Minutes = minute;RTC_TimeStructure.RTC_Seconds = second;RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);					//BCD格式设定时间//日期设定RTC_DateTypeDef RTC_DataStructure;RTC_DataStructure.RTC_Date = date;RTC_DataStructure.RTC_Month = month;RTC_DataStructure.RTC_WeekDay = week;RTC_DataStructure.RTC_Year = year;RTC_SetDate(RTC_Format_BCD, &RTC_DataStructure);					//BCD格式设定日期RTC_ExitInitMode();													//关闭RTC编辑模式RTC_WriteBackupRegister(RTC_BKP_DR0, 0x2024);						//设定一个初始化完成标志RTC_WriteProtectionCmd(ENABLE);										//使能写保护
}/*			BCD转换为十进制			*/
uint8_t BCDtoDecimal(int BCDnum)
{uint8_t decimal = 0, temp = 1, num = 0;if(BCDnum >= 0x0A)													//如果大于等于10{while(BCDnum > 0){num = BCDnum % 16;decimal += num * temp;temp *= 10;BCDnum /= 16;}return decimal;}return BCDnum;
}/*			读取时间			*/
RTC_time MyRTCTimeShow(void)
{RTC_TimeTypeDef RTC_TimeStructure;      // 获取RTC日期RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);  RTC_time Time_temp;Time_temp.Hours = RTC_TimeStructure.RTC_Hours;Time_temp.Minutes = RTC_TimeStructure.RTC_Minutes;Time_temp.Seconds = RTC_TimeStructure.RTC_Seconds;return Time_temp;
}	
/*			读取日期			*/
RTC_date MyRTCDateShow()
{RTC_DateTypeDef RTC_DateStructure;// 获取RTC时间RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);RTC_date Date_temp;Date_temp.Date = RTC_DateStructure.RTC_Date;Date_temp.Month = RTC_DateStructure.RTC_Month;Date_temp.Year = RTC_DateStructure.RTC_Year;return Date_temp;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/828068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分类预测 | Matlab实现RIME-BP霜冰优化BP神经网络多特征分类预测

分类预测 | Matlab实现RIME-BP霜冰优化BP神经网络多特征分类预测 目录 分类预测 | Matlab实现RIME-BP霜冰优化BP神经网络多特征分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.RIME-BP霜冰优化BP神经网络多特征分类预测(Matlab实现完整源码和数据&a…

免杀技术之白加黑的攻击防御

一、介绍 1. 什么是白加黑 通俗的讲白加黑中的白就是指被杀软列入到可信任列表中的文件。比如说微软自带的系统文件或者一些有有效证书签名的文件,什么是微软文件,或者什么是有效签名文件在后面我们会提到他的辨别方法。黑就是指我们自己的文件,没有有…

【MCU】栈溢出问题

项目场景: 硬件:STM32F407,操作系统:rt_thread master分支 问题描述 问题栈溢出 id 499 ide 00 rtr 00 len 8 9 Function[rt_completion_wait] shall not be used in ISR (0) assertion failed at function:rt_completion_wait,…

屏幕状态自动检测+鼠标自动操作

目录 一、写在前面 1.1适用场景 1.2涉及到的库 二、函数库 2.1pyautogui-屏幕截图&鼠标操作 2.1.1屏幕截图screenshot函数 2.1.2鼠标移动及单击 2.2Opencv-模板匹配 2.2.1matchTemplate函数 2.2.2minMaxLoc函数 2.2.3相关代码 2.3base64-图片转base64 2.3.1在线…

Spring MVC和Spring Boot

上节已经提到过请求,这次梳理响应。 响应 响应基本上都要被Controller所托管,告诉Spring帮我们管理这个代码,我们在后面需要访问时,才可以进行访问,否则将会报错。并且其是由RestController分离出来的,Re…

java使用trim方法和replaceAll方法去除空格之后,还存在空格

今天使用其他人的一个功能,发现生成的映射少了一个,后面去代码里面debug发现是字符串中左边空格没有去除导致。查看代码,里面是使用了字符串.trim().replaceAll(" ", "")去除空格的。这个代码虽然能去除(半角…

[Java EE] 多线程(四):线程安全问题(下)

1.5 volatile关键字 我们在了解这个关键字之前,我们首先要把产生线程安全的第4个原因补齐,我们来说说由于内存可见性引起的线程安全问题. 我们来看下面这样一段代码: import java.util.Scanner;public class Demo16 {public static int count 0;public static void main(Str…

深度学习算法简介(一)

目录 ⛳️推荐 前言 1、深度神经网络(DNN) 2、卷积神经网络(CNN) 3、残差网络(ResNet) 4、LSTM(长短时记忆网络) 5、Word2Vec 6、Transformer 7、生成对抗网络(…

kmeans实现图像像素分类

代码 import tkinter as tkfrom tkinter import filedialogfrom PIL import Image, ImageTkimport numpy as np import random import mathclass Cluster(object):def __init__(self):# pixels是像素的意思,这里定义一个像素组用来存放像素的值self.pixels []# 创…

HubSpot功能有哪些?

HubSpot是一个功能丰富的平台,主要涵盖市场营销、销售、客户服务和客户关系管理(CRM)等领域。以下是HubSpot的一些主要功能: 市场营销自动化:HubSpot允许用户制定和执行多渠道的市场营销活动,包括创建和管…

力扣HOT100 - 105. 从前序与中序遍历序列构造二叉树

解题思路&#xff1a; 分治 以中序遍历为参照&#xff0c;用前序遍历的节点构建二叉树。 root 1 index - left表示前序遍历右子树的开始节点&#xff0c;即当前节点的下一个节点左子树长度。 class Solution {int[] preorder;HashMap<Integer, Integer> map new Ha…

C#基础:WPF中常见控件的布局基础

一、用ViewBox实现放缩控件不变 二、布局代码 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"Title"MainWindow"…

小瓶清洗桶抗酸碱耐高温PFA清洗器半导体实验清洗用

PFA清洗桶&#xff0c;也叫PFA清洗器、PFA小瓶清洗桶&#xff0c;主要用于清洗浸泡实验室小型PFA溶样罐和烧杯等&#xff0c;带有密封螺纹盖&#xff0c;可以用于摇晃&#xff0c;高纯耐高温材质可放置电热板上加热使用。 特点&#xff1a;可拆卸倒酸口&#xff0c;可安全倒出酸…

ctfshow菜狗杯 web 无算力以及easyPytHon_P

web签到题 error_reporting(0); highlight_file(__FILE__);eval($_REQUEST[$_GET[$_POST[$_COOKIE[CTFshow-QQ群:]]]][6][0][7][5][8][0][9][4][4]);套娃传参 中文要编码 Cookies &#xff1a;CTFshow-QQ%E7%BE%A4:a POST:ab GET:?bc&c[6][0][7][5][8][0][9][4][4]syste…

干货收藏:CRM系统帮助中心设计教程

CRM系统&#xff0c;也就是客户关系管理系统&#xff0c;是企业运营中的得力助手&#xff0c;但太复杂的CRM系统有时候用起来也挺让人头疼的。所以&#xff0c;一个好用、易懂的帮助中心就显得尤为重要啦&#xff01;今天我来跟大家分享一下关于CRM系统帮助中心的设计教程。 1.…

09 MySQL--操作真题

1. not in 用一条 SQL 语句&#xff0c;查询出每门课程都大于 80 分的人。 分析&#xff1a; 去重查询出存在课程小于 80 分的人&#xff0c;设为集合A查询不在集合 A 中的人 # 第一步&#xff1a;找小于等于80分的学员姓名 select distinct name from t_student where fens…

Transformer - 特征预处理

Transformer - 特征预处理 flyfish 原始数据 train_data.values [[ 5.827 2.009 1.599 0.462 4.203 1.34 30.531][ 5.76 2.076 1.492 0.426 4.264 1.401 30.46 ][ 5.76 1.942 1.492 0.391 4.234 1.31 30.038][ 5.76 1.942 1.492 0.426 4.234 1.31…

Linux命令超详细介绍

目录 安装 Linux的目录结构&#xff1a; Linux命令入门&#xff1a; Linux命令的基础格式&#xff1a; 例子&#xff1a; ls 参数 选项 注意&#xff1a; 目录切换命令&#xff1a;cd/pwd cd: pwd: 相对路径和绝对路径&#xff1a; mkdir 不用参数&#xff1a; …

【Node.js工程师养成计划】之打造自己的脚手架工具

一、创建全局的自定义命令 1、打开一个空文件夹&#xff0c;新建一个bin文件夹&#xff0c;在bin文件夹下新建cli.js文件&#xff0c;js文件可以命名为cli.js&#xff08;您随意&#xff09; 2、在cli.js文件中的开头&#xff08;&#xff01;&#xff01;&#xff09;写下面这…

NeRF in the Wild: Neural Radiance Fields for Unconstrained Photo Collections

NeRF in the Wild: Neural Radiance Fields for Unconstrained Photo Collections(野外的 NERF: 用于无约束照片采集的神经辐射场&#xff09; Abstract 我们提出了一种基于学习的方法来合成新的视图的复杂场景使用只有非结构化的收集野生照片。我们建立在神经辐射场(neRF)的…