STM32F4系列芯片RTC模块介绍
RTC是“实时时钟”的缩写,它是一种芯片,在计算机等电子产品中广泛应用。RTC提供了实时时钟计时功能和存储时间的能力,即时钟模块,常用于控制和记录时间的应用场合。
RTC的工作原理
RTC主要由时钟电路、电源管理电路、晶振电路、计时单元和控制接口等部分组成。其中,时钟电路是实现时间精度的关键,而计时单元则负责计算时间并存储时间的信息。晶振电路,则通过晶振的振荡来提供系统主频,从而保证时钟精度。
RTC的工作方式简单,通常由振荡器驱动,通过预设的计时器和计数器进行计时,不受操作系统的影响也不需要额外的电源支持。此外,RTC不仅可以计时,还能够提供闹钟功能、日期记录、节假日计算等功能。
RTC的用法
RTC在很多嵌入式系统和电子产品中都有广泛的应用,它的使用方法也比较简单,一般需要经历以下几个步骤:
初始化RTC:首先需要对RTC进行初始化设置,包括时钟精度、时区、启用哪些功能等。
发布闹钟:RTC一般都带有闹钟功能,可以设置闹钟时间并将其发布。当闹钟时间到达时,RTC会发出中断信号,通知系统处理。
计时功能:RTC的主要功能是计时,可以用于记录时间、日期等信息。一般常用的RTC芯片数据格式包括BCD码和二进制码,在使用计时功能时需要根据芯片的格式进行设置。
节假日计算:一些高端的RTC芯片可以进行节假日计算,可以根据不同的国家、地区、宗教等计算出对应的节假日并输出。
总的来说,RTC在现代电子产品中应用很广泛,除了常规的计时功能外,还提供了一些辅助功能,可以根据实际需求进行配置和使用。
以STM32F4系列芯片及其标准外设库为例,详细介绍如何使用其RTC模块。
首先,需要初始化RTC模块。可以使用以下代码:
#include "stm32f4xx.h"
#include "stm32f4xx_rtc.h"RTC_InitTypeDef RTC_InitStructure;void RTC_Config(void)
{/* Enable the PWR clock */RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //开启PWR时钟PWR_BackupAccessCmd(ENABLE); //开启后备寄存器访问/* Enable the LSI OSC */RCC_LSICmd(ENABLE);/* Wait till LSI is ready */while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);/* Select the RTC Clock Source */RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);/* Enable the RTC Clock */RCC_RTCCLKCmd(ENABLE);/* Wait for RTC APB registers synchronisation */RTC_WaitForSynchro();/* Configure the RTC data register and RTC prescaler */RTC_InitStructure.RTC_AsynchPrediv = 0x7F;RTC_InitStructure.RTC_SynchPrediv = 0xFF;RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;RTC_Init(&RTC_InitStructure);
}
此代码将启用PWR时钟和后备寄存器存储器访问,并使能LSI振荡器。它等待LSI稳定后,将RTC时钟源设置为LSI,在启用RTC时钟后等待RTC APB寄存器的同步。最后,将RTC数据寄存器和RTC预分频器进行配置。
由于RTC模块操作比较复杂,使用外设库可以简化编程工作。下面是一些使用RTC外设库的例子。
- 此代码演示如何声明一个变量并初始化一个RTC结构:
RTC_InitTypeDef RTC_InitStructure;/* Configure the RTC data register and RTC prescaler */
RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
RTC_InitStructure.RTC_SynchPrediv = 0xFF;
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
/* Initialize the RTC */
RTC_Init(&RTC_InitStructure);
- 以下代码演示如何获取RTC时间和日期:
RTC_TimeStructure RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct);
其中,RTC_Format_BIN表示获取二进制格式的时间和日期,而RTC_Format_BCD表示获取BCD格式的时间和日期。
- 以下代码演示如何设定闹钟:
RTC_AlarmTypeDef RTC_AlarmStructure;/* Configure Alarm */
RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = 0x08;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = 0x30;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = 0x00;
RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay;
RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);
这将在每天的8:30触发闹钟。可以使用RTC_AlarmMask_DateWeekDay选项来指定只在星期和日期不匹配时触发闹钟。
除了上述示例代码外,还有许多其他的RTC操作和功能,开发人员可以根据具体需求进行调整和使用。
以下是使用HAL库函数的RTC初始化例子。
#include "stm32f4xx_hal.h"
#include "stm32f4xx_hal_rtc.h"/* RTC handle declaration */
RTC_HandleTypeDef RTCHandle;void RTC_Init(void)
{/* Enable the RTC Clock */__HAL_RCC_RTC_ENABLE();/* Configure RTC */RTCHandle.Instance = RTC; // Select RTC as the instanceRTCHandle.Init.HourFormat = RTC_HOURFORMAT_24; // Set the hour formatRTCHandle.Init.AsynchPrediv = 0x7F; // Set the asynchronous prescalerRTCHandle.Init.SynchPrediv = 0xFF; // Set the synchronous prescalerRTCHandle.Init.OutPut = RTC_OUTPUT_DISABLE; // Disable RTC outputRTCHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; // Set RTC output polarityRTCHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; // Set RTC output type/* Initialize RTC */HAL_RTC_Init(&RTCHandle);
}
此代码使用了HAL库函数来初始化RTC模块。它首先启用了RTC时钟,然后配置了RTC参数,包括小时格式、异步预分频器、同步预分频器、输出来源、输出极性和输出类型。最后,使用HAL_RTC_Init函数初始化RTC。
与标准库不同,HAL库使用了统一的函数接口,这些函数接口可以用于所有支持的微控制器。这些函数有许多参数,因此它们需要一定的学习成本,但是它们可以大幅减少开发时间并增加代码重用性。
详细讲解一下上面的代码。
- 引入HAL库文件和RTC头文件
#include "stm32f4xx_hal.h"
#include "stm32f4xx_hal_rtc.h"
这两行代码分别引入STM32F4系列芯片的HAL库文件和RTC头文件。
- 声明RTC句柄
RTC_HandleTypeDef RTCHandle;
这行代码声明了一个名为RTCHandle的struct类型变量,用于存储RTC句柄。
- 初始化RTC
void RTC_Init(void)
{/* Enable the RTC Clock */__HAL_RCC_RTC_ENABLE();/* Configure RTC */RTCHandle.Instance = RTC; // Select RTC as the instanceRTCHandle.Init.HourFormat = RTC_HOURFORMAT_24; // Set the hour formatRTCHandle.Init.AsynchPrediv = 0x7F; // Set the asynchronous prescalerRTCHandle.Init.SynchPrediv = 0xFF; // Set the synchronous prescalerRTCHandle.Init.OutPut = RTC_OUTPUT_DISABLE; // Disable RTC outputRTCHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; // Set RTC output polarityRTCHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; // Set RTC output type/* Initialize RTC */HAL_RTC_Init(&RTCHandle);
}
该代码定义了一个名为RTC_Init的函数,它用于初始化RTC模块。此函数的主要步骤如下:
- 首先启用RTC时钟,以确保RTC模块正常工作。
__HAL_RCC_RTC_ENABLE();
- 然后,配置RTC的参数。该代码标识RTC实例并设置其他参数,如小时格式,异步预分频器,同步预分频器,输出来源,输出极性和输出类型。
RTCHandle.Instance = RTC; // 选择RTC实例
RTCHandle.Init.HourFormat = RTC_HOURFORMAT_24; // 设置小时格式
RTCHandle.Init.AsynchPrediv = 0x7F; // 设置异步预分频器
RTCHandle.Init.SynchPrediv = 0xFF; // 设置同步预分频器
RTCHandle.Init.OutPut = RTC_OUTPUT_DISABLE; // 禁用RTC输出
RTCHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; // 设置RTC输出极性
RTCHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; // 设置RTC输出类型
- 最后,使用HAL_RTC_Init函数初始化RTC,即启用RTC并根据先前设置的参数进行配置。
HAL_RTC_Init(&RTCHandle);
总之,这段代码使用了STM32F4系列芯片的HAL库提供的函数,以较少的代码为代价大大简化了RTC初始化的过程。
STM32F4系列芯片RTC模块介绍相关推荐
- Aurix TC3xx系列MCU GTM模块介绍
文章目录 1 GTM模块简介 2 CMU模块介绍 2.1 CFGU子单元 2.2 FXU子单元 3 TIM模块介绍 4 ATOM模块介绍 5 TOM模块介绍 6 DTM模块介绍 6.1 DTM作用 6 ...
- 从恩智浦系列芯片学习高频RFID
众所周知,RFID芯片是电子标签的主要组成部分,是在整个RFID系统的核心.标签芯片的基本结构一般都包含射频前端.模拟前端.数字基带和存储器单元等模块.RFID芯片主要涉及的频段有125KHz,13. ...
- RapidScada免费开源Scada组态软件系列教程4-各模块详细介绍
RapidScada免费开源Scada组态软件系列教程 系列文章目录 RapidScada免费开源Scada组态软件系列教程1-初识RapidScada RapidScada免费开源Scada组态软件 ...
- nRF24L01芯片(模块)介绍
nRF24L01芯片(模块)简介 nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片.无线收发器包括:频率发生器.增强型"SchockB ...
- 嵌入式学习:Cortex-M系列芯片介绍
一.Cortex-M系列芯片分类 以意法半导体芯片为例子:Cortex-M0:主频在48M,一般用于低功耗: Cortex-M3:主频为72M,是现在市面上最为流行的芯片之一,一般用于工业等部分控制功 ...
- STM32系列微控制器入门介绍
文章目录 目的 基础需求 电路基础 编程语言 入门介绍 官方网站 型号选择 开发方式 开发工具 程序调试 固件烧录 资料说明 总结 目的 STM32是意法半导体(ST)推出的主要基于ARM Corte ...
- Zynq器件XADC模块介绍
1.前言 赛灵思的7系列FPGA和Zynq器件创造性地在片上集成了模数转换器和相关的片上传感器(内置温度传感器和功耗传感器),这是相比赛灵思前一代产品来新增加的特性,可在系统设计中免去外置的ADC器件 ...
- 最全NFC芯片技术厂商介绍及应用介绍
最全NFC芯片技术厂商介绍及应用介绍 NFC由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体公司).诺基亚和索尼共同研制开发,其基础是RFID及互连技术.目前这项技术在日韩被广泛 ...
- 智能垃圾桶语音芯片应用设计方案介绍,WT588F02B-8S
WT588F02B语音芯片在智能垃圾桶上的应用设计方案介绍 智能化已经成为一种时代趋势,现今人们的需求使智能化家居成为必不可少的一部分.而垃圾桶是人们日常生活中不可或缺的家具,甚至街道上也定点有垃圾回 ...
最新文章
- Lintcode363 Trapping Rain Water solution 题解
- Spring MVC学习step1——框架熟悉
- 一个WCF RESTSOAP Post例子
- 如何做一款面向企业客户的商用级 SDK
- ubuntu 18.04 vi里面方向键变成abcd 处理办法
- YOLOV5+Deepsort行人跟踪初探
- 小米集团国际总部落地深圳;国美电器创始人黄光裕出狱;TiKV 4.0 发布 | 极客头条...
- 爬虫:查找自己浏览器headers
- Java 程序设计基础(第四版)上
- moodle php代码解读_基于PHP的课程管理系统——MOODLE平台
- docker-compose 启动顺序的问题depends_on
- 把Excel里的折线图另存为图片
- Choerodon猪齿鱼诞生记
- 关于嵌入式EMW3162 Wifi模块的网络配置与测试
- 微信支付元转分的正确姿势
- XP系统无法设置用户权限,如加everyone等的
- vue 配置文件不打包
- mapStateToProps mapDispatchToProps 的使用
- android申请悬浮窗代码,三行代码实现Android应用内悬浮窗,无需一切权限,适配所有ROM和厂商...
- 在线招聘市场强手如林,携AI入局的灵鸽会飞向何方?
热门文章
- window查看端口以及关闭端口
- 用KFServing加速联邦学习模型的部署
- 基于C#+SQL server的校园卡消费信息管理系统
- 如何删除CSDN博客
- 倍加福PMI360D-F130-IE8-V15
- 【Linux基础】四、常用基本命令——文件权限类(ls -al,chmod,chown,chgrp)、搜索查找类(find,locate,grep,wc,which)
- BUUCTF笔记之Web系列部分WriteUp(五)
- server安装 sql 发生mof语法错误_SQL Server 安装程序无法编译托管对象格式(MOF)文件(转)...
- adb 最大连接_如何通过雷电模拟器的 adb.exe 做QQ好友/微信匹配
- 5个中国小伙设计的机器人手臂DoBotd 震惊美国科技界