STM32F2—实时时钟RTC
STM32系列MCU硬件实时时钟(RTC)应用笔记说明书
2017年6月Doc ID 018624 Rev 1 [English Rev 5]1/45AN3371应用笔记在 STM32 F0、F2、F3、F4 和 L1 系列MCU 中使用硬件实时时钟(RTC )前言实时时钟 (RTC) 是记录当前时间的计算机时钟。
RTC 不仅应用于个人计算机、服务器和嵌入式系统,几乎所有需要准确计时的电子设备也都会使用。
支持 RTC 的微控制器可用于精密计时器、闹钟、手表、小型电子记事薄以及其它多种设备。
本应用笔记介绍超低功耗中等容量、超低功耗大容量、F0、F2和 F4 系列器件微控制器中嵌入式实时时钟 (RTC) 控制器的特性,以及将 RTC 用于日历、闹钟、定时唤醒单元、入侵检测、时间戳和校准应用时所需的配置步骤。
本应用笔记提供了含有配置信息的示例,有助于您快速准确地针对日历、闹钟、定时唤醒单元、入侵检测、时间戳和校准应用配置 RTC 。
注:所有示例和说明均基于 STM32L1xx 、STM32F0xx 、STM32F2xx 、STM32F4xx 和STM32F3xx 固件库,以及 STM32L1xx (RM0038)、STM32F0xx (RM0091)、STM32F2xx (RM0033)、STM32F4xx (RM0090)、STM32F37x (RM0313) 和 STM32F30x(RM0316) 的参考手册。
本文提到的STM32 指超低功耗中等容量、超低功耗大容量、F0、F2 和 F4 系列器件。
超低功耗中等 (ULPM) 容量器件包括 STM32L151xx 和 STM32L152xx 微控制器,Flash 容量在 64 KB 到 128 KB 之间。
超低功耗大 (ULPH) 容量器件包括 STM32L151xx 、STM32L152xx 和 STM32L162xx 微控制器,Flash 容量为 384 KB 。
F2 系列器件包括 STM32F205xx 、STM32F207xx 、STM32F215xx 和 STM32F217xx 微控制器。
STM32-RTC实时时钟-毫秒计时实现
STM32-RTC实时时钟-毫秒计时实现OS:Windows 64Development kit:MDK5.14IDE:UV4MCU:STM32F103C8T61、RTC时钟简介 STM32 的实时时钟(RTC)是⼀个独⽴的定时器,在相应软件配置下,可提供时钟⽇历的功能。
详细资料请参考ALIENTEK的官⽅⽂档——《STM32F1开发指南(精英版-库函数版)》,以下为博主摘录要点:RTC 模块和时钟配置系统(RCC_BDCR 寄存器)在后备区域,系统复位后,会⾃动禁⽌访问后备寄存器和 RTC ,所以在要设置时间之前,先要取消备份区域(BKP)的写保护RTC 内核完全独⽴于 RTC APB1 接⼝,⽽软件是通过 APB1 接⼝访问 RTC 的预分频值、计数器值和闹钟值,因此需要等待时钟同步,寄存器同步标志位(RSF)会硬件置1RTC相关寄存器包括:控制寄存器(CRH、CRL)、预分频装载寄存器(PRLH、PRLL)、预分频器余数寄存器(DIVH、DIVL)、计数寄存器(CNTH、CNTL)、闹钟寄存器(ALRH、ALRL)STM32备份寄存器,存RTC校验值和⼀些重要参数,最⼤字节84,可由VBAT供电计数器时钟频率:RTCCLK频率/(预分频装载寄存器值+1)2、软硬件设计 由于RTC是STM32芯⽚⾃带的时钟资源,所以⾃主开发的时候只需要在设计时加上晶振电路和纽扣电池即可。
编程时在HARDWARE⽂件夹新建 rtc.c、rtc.h ⽂件。
3、时钟配置与函数编写 为了使⽤RTC时钟,需要进⾏配置和时间获取,基本上按照例程来写就可以了。
为避免零散,我将附上完整代码。
函数说明如下:rtc.c中需要编写的函数列表RTC_Init(void)配置时钟RTC_NVIC_Config(void)中断分组RTC_IRQHandler(void)秒中断处理RTC_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec)设置时间RTC_Alarm_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8sec)闹钟设置RTC_Get(void)获取时钟RTC_Get_Week(u16 year,u8 month,u8 day)星期计算Is_Leap_Year(u16 year)闰年判断 事实上,以上函数并不都要,闹钟没有⽤到的话就不要,秒中断也可以不作处理,看项⽬需求。
stm32 rtc实时时钟
stm32 rtc实时时钟STM32 RTC实时时钟一、介绍STM32是意法半导体公司(STMicroelectronics)推出的一系列32位ARM Cortex-M微控制器。
其中,RTC(Real-Time Clock)是STM32微控制器中的一个重要组件,用于实时时钟和日历功能。
本文将详细介绍STM32 RTC的实时时钟功能及其应用。
二、RTC概述RTC模块是一种独立的硬件模块,可以在微控制器断电时继续运行。
它提供了一个与时间和日期相关的计数器,通过时钟信号源来驱动计数器,从而实现实时时钟的功能。
RTC模块通常由一个独立的低功耗振荡器来提供时钟源。
STM32微控制器中的RTC模块支持多种工作模式,如年历模式、单位数字模式和二进制模式等。
三、RTC的主要功能1. 实时时钟:RTC模块可以提供精确的实时时钟,可以记录时间、日期和星期等信息。
2. 闹钟功能:RTC可以设置多个闹钟时间,并在闹钟时间到达时触发中断或其他操作。
3. 倒计时功能:RTC模块可以进行倒计时操作,并在倒计时结束时触发中断。
4. 调度功能:RTC可以设置预定的时间点,并在该时间点触发中断。
5. 报警功能:RTC可以设置报警功能,当发生特定事件时触发中断或其他操作。
四、配置RTC模块在使用STM32微控制器的RTC功能之前,需要进行一些配置。
首先,需要选择合适的时钟源。
通常,RTC模块使用低功耗振荡器作为时钟源。
其次,需要配置RTC的预分频器和计数器,以实现所需的时间精度。
还需配置中断和/或事件触发条件,以便在特定事件发生时触发中断或其他操作。
五、RTC的中断与事件RTC模块可以生成多个中断和事件,以满足应用的需求。
常见的中断和事件有:1. 秒中断:每当计数器的秒字段更新时触发中断。
2. 分钟中断:每当计数器的分钟字段更新时触发中断。
3. 小时中断:每当计数器的小时字段更新时触发中断。
4. 日期中断:每当计数器的日期字段更新时触发中断。
STM32 实时时钟和闹钟程序
//根据 NVIC_InitStruct 中指定的参数初始化外
设 NVIC 寄存器
}
u8 RTC_Init(void)
{
//检查是不是第一次配置时钟
u8 temp=0;
u32 flag=0; if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050)
// 从 指 定 的 后 备 寄 存 器 中 读 出
//使能 RTC 时钟 //等待最近一次对 RTC 寄存器
的写操作完成
RTC_WaitForSynchro();
//等待 RTC 寄存器同步
RTC_ITConfig(RTC_IT_SEC, ENABLE);
//使能 RTC 秒中断
RTC_ITConfig(RTC_IT_ALR, ENABLE);
RTC_WaitForLastTask(); 的写操作完成
//使能 RTC 和后备寄存器访问
RTC_SetCounter(seccount);
//设置 RTC 计数器的值
RTC_WaitForLastTask();
//等待最近一次对 RTC 寄存器的写操作完成
return 0; } //得到当前的时间 //返回值:0,成功;其他:错误代码.
u8 RTC_Get(void)
u8 RTC_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec)
{
u16 t;
u32 seccount=0;
if(syear<1970||syear>2099)return 1;
for(t=1970;t<syear;t++)
//把所有年份的秒钟相加
STM32_RTC简介及程序
stm32——RTC实时时钟一、关于时间2038年问题在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。
所有使用UNIX时间表示时间的程序都将将受其影响,因为它们以自1970年1月1日经过的秒数(忽略闰秒)来表示时间。
这种时间表示法在类Unix(Unix-like)操作系统上是一个标准,并会影响以其C编程语言开发给其他大部份操作系统使用的软件。
在大部份的32位操作系统上,此“time_t”数据模式使用一个有正负号的32位元整数(signedint32)存储计算的秒数。
也就是说最大可以计数的秒数为 2^31次方可以算得:2^31/3600/24/365 ≈ 68年所以依照此“time_t”标准,在此格式能被表示的最后时间是2038年1月19日03:14:07,星期二(UTC)。
超过此一瞬间,时间将会被掩盖(wrap around)且在内部被表示为一个负数,并造成程序无法工作,因为它们无法将此时间识别为2038年,而可能会依个别实作而跳回1970年或1901年。
对于PC机来说,时间开始于1980年1月1日,并以无正负符号的32位整数的形式按秒递增,这与UNIX时间非常类似。
可以算得:2^32/3600/24/365 ≈ 136年到2116年,这个整数将溢出。
Windows NT使用64位整数来计时。
但是,它使用100纳秒作为增量单位,且时间开始于1601年1月1日,所以NT将遇到2184年问题。
苹果公司声明,Mac在29,940年之前不会出现时间问题!二、RTC使用说明"RTC"是Real Time Clock 的简称,意为实时时钟。
stm32提供了一个秒中断源和一个闹钟中断源,修改计数器的值可以重新设置系统当前的时间和日期。
RTC模块之所以具有实时时钟功能,是因为它内部维持了一个独立的定时器,通过配置,可以让它准确地每秒钟中断一次。
但实际上,RTC就只是一个定时器而已,掉电之后所有信息都会丢失,因此我们需要找一个地方来存储这些信息,于是就找到了备份寄存器。
stm32的RTC时钟程序
rtcfirstconfigure程序是第一次配置rtc如果配置后以后上电不需要重新
stm32的RTC时钟程序
sபைடு நூலகம்m32 的RTC 时钟程序
前些日子做了stm32 RTC 时钟的程序,现在把它记录下来。首先配置RTC,,使用外部时钟32.768KHz。其中配置了秒中断。
RTCFirstConfigure()程序是第一次配置RTC,如果配置后以后上电不需要重新
配置,如果RTC 时钟快了,可内部校准。
void RTCFirstConfigure() //first ini { RCC_BackupResetCmd(ENABLE); RCC_BackupResetCmd(DISABLE); RCC_LSEConfig(RCC_LSE_ON); //enable LSE clock 32.768K while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {} // Select LSE as RTC Clock Source RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //Enable RTC Clock / RCC_RTCCLKCmd(ENABLE); // Wait for RTC registers synchronization / RTC_WaitForSynchro(); // Wait until last write operation on RTC registers has finished / RTC_WaitForLastTask(); // Enable the RTC Second Interrupt/ RTC_ITConfig(RTC_IT_SEC, ENABLE); RTC_WaitForLastTask(); RTC_SetPrescaler(32767); // RTC period = RTCCLK/RTC_PR = (32.768KHz)/(32767+1)/ RTC_WaitForLastTask(); // BKP_SetRTCCalibrationValue(120); //RTC Calibration RCC_ClearFlag(); } RTCNorConfigure()程序配置完后每次上电都运行的程序
STM32实时时钟RTC按键修改时间
uip_setnetmask(ipaddr);
uip_listen(HTONS(1200));//监听1200端口,用于TCP Server
uip_listen(HTONS(80));//监听80端口,用于Web Server
case 1:LCD_ShowString(1,7,"一");break;
case 2:LCD_ShowString(1,7,"二");break;
case 3:LCD_ShowString(1,7,"三");break;
case 4:LCD_ShowString(1,7,"四");break;
case 5:LCD_ShowString(1,7,"五");break;
{
uip_arp_arpin();
//当上面的函数执行后,如果需要发送数据,则全局变量uip_len>0
//需要发送的数据在uip_buf,长度是uip_len(这是2个全局变量)
if(uip_len>0)tapdev_send();//需要发送数据,则通过tapdev_send发送
}
}else if(timer_expired(&periodic_timer))//0.5秒定时器超时
tcp_client_reconnect();//尝试连接到TCP Server端,用于TCP Client
while (1)
{ Display_Time();
uip_polling();//处理uip事件,必须插入到用户程序的循环体中
//key=KEY_Scan();
STM32单片机RTC时钟的使用方法及步骤
STM32单片机RTC时钟的使用方法及步骤以下是使用STM32单片机的RTC时钟的步骤:1.初始化RTC模块:首先,需要在RCC寄存器中使能RTC和LSE(Low-Speed External)晶振模块。
然后,配置RTC的时钟源和预分频器,选择合适的时钟频率。
2.配置RTC时间和日期:通过设置RTC的寄存器来配置当前时间和日期。
需要设置秒、分钟、小时、星期、日期、月份和年份,确保其具有正确的值。
3.启动RTC时钟:设置RTC的控制寄存器,使其开始工作。
可以选择启用或禁用闹钟功能,设置闹钟的时间和日期。
4.读取RTC数据:可以随时读取RTC的时间和日期数据。
读取数据后,可以进行各种计算和处理,如计算两个时间之间的差异、比较时间等。
5.处理RTC中断:可以设置RTC中断来触发一些操作,如闹钟触发时执行一些任务。
需要配置NVIC(Nested Vector Interrupt Controller)中断向量表,使能相应的中断。
6.备份和恢复RTC数据:RTC模块提供了备份寄存器,可以用来存储额外的信息。
可以使用一些特殊的寄存器,如BKP (Backup)寄存器或CPU的系统寄存器来备份和恢复数据。
7.断电维持能力:RTC模块的一个关键特性是其断电维持能力。
即使在断电情况下,RTC模块中的数据仍然能够保持。
可以通过电池供电电路来提供必要的电力。
8.节能模式:可以利用RTC模块的节能模式来降低功耗。
可以选择性地关闭RTC模块的不需要的功能,以减少功耗。
需要注意的是,具体的步骤可能会因芯片型号和开发工具的不同而有所差异。
因此,在使用STM32单片机的RTC时钟之前,需查阅相关的技术文档和参考手册,以了解具体操作步骤和寄存器配置。
以上是使用STM32单片机的RTC时钟的基本步骤。
在实际应用中,可以根据具体需求对RTC进行更多的配置和使用。
STM32学习笔记之—RTC
STM32学习笔记之—RTC写这篇学习笔记的时候距上一篇笔记间隔的时间不短了,期间有网友关心询问为什么不更新文章,主要是这一段时间工作太忙了没有闲暇时间做下来学习,工作是重要的事情,不能把饭碗丢了啊o(∩_∩)o…,好了废话少说切入正题。
既然我们要使用RTC就要先对它有个大致的了解,知己知彼才能百战不殆嘛!STM32内部RTC功能非常实用,它的供电和时钟是独立于内核的,可以说是STM32内部独立的外设模块,有加上RTC内部寄存器不受系统复位掉电的影响,我们可以才用外部电池供电和32768表振晶体来实现真正RTC(实时时钟)功能。
的这里引用手册里一段概述“RTC由两个主要部分组成。
第一部分(APB1接口)用来和APB1总线相连。
此单元还包含一组16位寄存器,可通过APB1总线对其进行读写操作。
APB1接口以APB1总线时钟为时钟,用来与APB1总线接口。
另一部分(RTC核)由一系列可编程计数器组成,分成两个主要模块。
第一个模块是RTC的预分频模块,它可编程产生最长为1秒的RTC时间基准TR_CLK。
RTC的预分频模块包含了一个20位的可编程分频器(RTC预分频器)。
在每个TR_CLK周期中,如果在RTC_CR 寄存器中设置了相应允许位,则RTC产生一个中断(秒中断)。
第2个模块是一个32位的可编程的计数器,它可被初始化为当前的系统时间。
系统时间以TR_CLK速度增长并与存储在RTC_ALR寄存器中的可编程的时间相比较,如果RTC_CR控制寄存器中设置了相应允许位,则比较匹配时将产生一个闹钟中断。
”对于第一次实用RTC的时候我们要对它进行配置一番,现在大致说一下(代码是通过调用RTC_Config函数来实现的):1. 打开电源管理和备份寄存器时钟,提到备份寄存器这里要说一下,引用手册--“备份寄存器是10个16位的寄存器,可用来存储20个字节的用户应用程序数据。
他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电。
基于STM32的RTC实时时钟说明书
RTC实时时钟说明书
一:工作原理
STM32芯片中内置RTC时钟,当对RTC进行初始化后,便可以像电子钟一样运行,通过读取RTC对应的寄存器,可以获知年月日、时分秒信息。
有关RTC的说明可参考《STM32中文参考资料》。
二:实验现象及操作
程序下载后,有以下两种情况。
●如果芯片第一次初始化RTC,则程序将写入HEX生成的时间信息到芯片RTC时钟中,
然后读出时钟信息。
通过数码管显示。
●如果不是第一次初始化RTC,则程序将读取RTC对应寄存器的值,以时间信息显示
在数码管上。
如果开发板上有放入3V的小电池,则即使掉电,RTC时钟依然在走。
程序刚下载,数码管显示的数据为时-分-秒。
K1键,则显示年月日,左边四位为年份,最右边两位为日期。
其它两位为月份。
K2键,数码管继续显示时-分-秒。
stm32 rtc用法
stm32 rtc用法STM32是一款功能强大的微控制器系列,RTC(Real Time Clock)是其中一个重要的功能模块。
RTC模块为嵌入式设备提供了高精度的实时时钟功能,能够在断电后依然保持时间的准确性。
本篇文章将详细介绍STM32 RTC的使用方法,一步一步回答相关问题。
第一步:使用前的准备在开始使用STM32 RTC之前,需要对RTC模块进行一些准备工作。
首先,在Keil或者其他集成开发环境(IDE)中,需要将RTC作为外设来进行配置。
其次,需要对RTC外设的时钟进行配置,通常可以选择外部晶体振荡或者内部LSI振荡作为时钟源。
最后,还需要配置RTC的预分频器和计数器,以满足实际应用的需求。
第二步:初始化RTC模块在进行RTC模块的初始化之前,需要先对RTC外设进行使能。
通过启用RCC_AHB1ENR或RCC_APB1ENR寄存器中的RTCEN位,可以使能RTC外设。
接着,可以通过RCC_CSR寄存器中的备份域访问位(BDCR寄存器)来对RTC 模块进行初始化。
在初始化RTC模块时,可以设置时钟源、预分频器和计数器的初值,以及其他一些参数,如是否使能闹钟功能等。
第三步:设置RTC时间在RTC模块初始化完成后,可以通过写入RTC_TR和RTC_DR寄存器来设置RTC的时间。
其中,RTC_TR寄存器用于设置小时、分钟和秒钟的值,RTC_DR寄存器用于设置年、月和日期的值。
需要注意的是,写入RTC_TR和RTC_DR寄存器的时候,应该先禁用RTC写保护,然后再进行写操作。
完成时间设置后,可以重新启用RTC写保护。
第四步:读取RTC时间除了设置RTC时间外,还可以通过读取RTC_TR和RTC_DR寄存器来获取当前的RTC时间。
读取RTC时间的时候,同样需要先禁用RTC写保护,然后再进行读取操作。
完成读取后,需要重新启用RTC写保护。
第五步:使用闹钟功能RTC模块还支持闹钟功能,可以通过设置RTC_ALRMxR(x为1、2或3)寄存器来设置闹钟的时间和触发方式。
STM32单片机RTC时钟的使用方法及步骤
STM32单片机RTC时钟的使用方法及步骤
STM32RTC使用步骤:
打开PWR时钟和Backup区数据访问
若使用外部低速时钟(LSE),打开LSE并等待起振
选择和打开RTC时钟,等待时钟同步
配置时间格式,分频系数等
根据需要配置时钟,日期,闹钟,唤醒,输出,时间戳,备份寄存器等模块
根据需要配置和打开中断,其中
RTC Alarm ——EXTI line 17
RTC tamper and TImestamps——EXTI line 19
RTC wakeup——EXTI line 20
下面的代码配置日期,时间,当前时间设置为15年05月31日,星期日(7),15:50:40,打开闹钟A和唤醒中断,每一秒钟来一次中断,15:50:45秒产生闹钟中断,用串口打印相应的信息。
代码:
void RTC_Config(void)
{
RTC_TImeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;
RTC_InitTypeDef RTC_InitStructure;
RTC_AlarmTypeDef RTC_AlarmStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_BackupResetCmd(ENABLE);
RCC_BackupResetCmd(DISABLE);
RCC_LSEConfig(RCC_LSE_ON);。
STM32单片机RTC时钟的使用方法及步骤
STM32单片机RTC时钟的使用方法及步骤一、配置RTC模块时钟源RTC模块的时钟源可以选择外部低速晶振(LSE)或者低速内部时钟(LSI)。
通过以下步骤配置RTC时钟源:1.使能外部低速晶振(LSE)或者低速内部时钟(LSI)。
例如,如果使用外部低速晶振,则需要使能相应的GPIO端口,并配置为晶振模式。
2.配置RCC时钟控制寄存器(RCC_CR)和时钟配置寄存器(RCC_CSR)。
二、使能RTC模块时钟1.使能PWR模块时钟和备份寄存器访问。
RCC_APB1ENR,=(1<<28);RCC_APB1ENR,=(1<<27);2.校验并关闭RTC模块。
RCC->BDCR,=RCC_BDCR_RTCEN;PWR->CR,=PWR_CR_DBP;if ((RCC->BDCR & RCC_BDCR_RTCEN) == 0)RCC->BDCR,=RCC_BDCR_RTCEN;3.配置RTC时钟预分频器和提供给RTC的时钟源。
RTC->PRER ,= rtc_prescaler_value << RTC_PRER_PREDIV_S_Pos;RTC->PRER ,= 127 << RTC_PRER_PREDIV_A_Pos;RTC->CR&=~RTC_CR_FMT;三、配置RTC模块时间和日期1.关闭RTC时钟写保护功能。
RTC->WPR=0xCA;RTC->WPR=0x53;RTC->ISR,=RTC_ISR_INIT;while((RTC->ISR & RTC_ISR_INITF) == 0);2.配置RTC的时间和日期寄存器。
RTC->TR ,= (uint32_t)((hours / 10) << RTC_TR_Hours10_Pos);RTC->TR ,= (uint32_t)((hours % 10) << RTC_TR_Hours1_Pos);RTC->TR ,= (uint32_t)((minutes / 10) <<RTC_TR_Minutes10_Pos);RTC->TR ,= (uint32_t)((minutes % 10) <<RTC_TR_Minutes1_Pos);RTC->TR ,= (uint32_t)((seconds / 10) <<RTC_TR_Seconds10_Pos);RTC->TR ,= (uint32_t)((seconds % 10) <<RTC_TR_Seconds1_Pos);RTC->DR ,= (uint32_t)((year / 10) << RTC_DR_YT_Pos);RTC->DR ,= (uint32_t)((year % 10) << RTC_DR_YU_Pos);RTC->DR ,= (uint32_t)((month / 10) << RTC_DR_MT_Pos);RTC->DR ,= (uint32_t)((month % 10) << RTC_DR_MU_Pos);RTC->DR ,= (uint32_t)((day / 10) << RTC_DR_DT_Pos);RTC->DR ,= (uint32_t)((day % 10) << RTC_DR_DU_Pos);3.开启RTC时钟写保护功能。
stm32时钟概念
stm32时钟概念摘要:1.STM32 时钟概念概述2.STM32 时钟的分类3.STM32 时钟的配置方法4.STM32 时钟的应用实例5.总结正文:一、STM32 时钟概念概述STM32 时钟是指基于STM32 单片机的实时时钟(Real-Time Clock,RTC)功能。
实时时钟功能是指单片机内部集成的一个用于提供时间信息的时钟,它可以提供年、月、日、星期、时、分、秒等时间信息。
STM32 时钟广泛应用于各种嵌入式系统中,如智能家居、自动控制、消费电子等领域。
二、STM32 时钟的分类STM32 时钟主要分为以下两类:1.RTC 时钟:RTC 时钟是STM32 单片机内部集成的实时时钟,它可以提供年、月、日、星期、时、分、秒等时间信息。
RTC 时钟可以通过实时时钟控制器(RTC)和实时时钟寄存器(RTC Register)进行配置和控制。
2.EXTI 时钟:EXTI 时钟是STM32 单片机外部中断时钟,它可以通过外部中断控制器(EXTI)进行配置和控制。
EXTI 时钟主要用于实现对外部事件的实时响应和处理,如按键、传感器等外部事件的检测。
三、STM32 时钟的配置方法STM32 时钟的配置方法主要包括以下几个步骤:1.配置RCC 时钟:RCC 时钟是STM32 单片机的核心时钟,它决定了单片机的工作频率。
在配置RCC 时钟时,需要根据实际应用需求选择合适的时钟源和倍频,以满足系统的性能要求。
2.配置RTC 时钟:配置RTC 时钟需要设置RTC 时钟控制器的控制和状态寄存器(RTCCSR),以启用RTC 时钟并设置其工作模式。
同时,还需要配置RTC 时钟寄存器(RTC Register),以设置年、月、日、星期、时、分、秒等时间信息。
3.配置EXTI 时钟:配置EXTI 时钟需要设置外部中断控制器的控制和状态寄存器(EXTICSR),以启用EXTI 时钟并设置其工作模式。
同时,还需要配置外部中断事件表(EXTIEVT),以定义外部中断事件的优先级和中断响应方式。
STM32F2系列之复位和时钟控制RCC详解
TIMxCLK TIM2..7,12..14
PCLK2 up to 60MHz VCO /P PLL48CLK (USB FS, SDIO & RNG) /Q xN /R APB2 Prescaler /1,2,4,8,16
If (APB2 pres =1)
x1
Else
x2
TIMxCLK TIM1,8..11
PLL
VCO
/P
HSI HSE MCO1 /1..5 PLLCLK LSE
/Q
Ext. Clock SPI2S_CKI N I2SCLK PLLI2SCLK MACTXCLK MACRXCLK MACRMIICL K
xN
/R
PLLI2S
USB HS ULPI clock
SYSCLK
MCO2 /1..5 PLLCLK / 2, 20 HSE
TIMxCLK TIM2..7,12..14
PCLK2 up to 60MHz VCO /P PLL48CLK (USB FS, SDIO & RNG) /Q xN /R APB2 Prescaler /1,2,4,8,16
If (APB2 pres =1)
x1
Else
x2
TIMxCLK TIM1,8..11
HSI RC 4 -26 MHz OSC_OUT OSC_IN
16MHz HSI
/M HSE PLLCLK
HSE Osc
SYSCLK AHB Prescaler 120 MHz max
/1,2…512
APB1 Prescaler /1,2,4,8,16
If (APB1 pres =1) Else
x1 x2
stm32RTC实时时钟[操作寄存器+库函数]-ChangingsBlog
stm32RTC实时时钟[操作寄存器+库函数]-ChangingsBlog"RTC"是Real Time Clock 的简称,意为实时时钟。
stm32提供了一个秒中断源和一个闹钟中断源。
RTC的技术器是一个32位的计数器,使用32.768khz的外部晶振。
2038年问题在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。
所有使用UNIX时间表示时间的程序都将受其影响,因为它们以自1970年1月1日经过的秒数(忽略闰秒)来表示时间。
这种时间表示法在类Unix(Unix-like)操作系统上是一个标准,并会影响以其C编程语言开发给其他大部份操作系统使用的软件。
在大部份的32位操作系统上,此“time_t”数据模式使用一个有正负号的32位元整数(signedint32)存储计算的秒数。
也就是说最大可以计数的秒数为 2^31次方可以算得:2^31/3600/24/365 ≈ 68年所以依照此“time_t”标准,在此格式能被表示的最后时间是2038年1月19日03:14:07,星期二(UTC)。
超过此一瞬间,时间将会被掩盖(wrap around)且在内部被表示为一个负数,并造成程序无法工作,因为它们无法将此时间识别为2038年,而可能会依个别实作而跳回1970年或1901年。
对于PC机来说,时间开始于1980年1月1日,并以无正负符号的32位整数的形式按秒递增,这与UNIX时间非常类似。
可以算得:2^32/3600/24/365 ≈ 136年到2116年,这个整数将溢出。
Windows NT使用64位整数来计时。
但是,它使用100纳秒作为增量单位,且时间开始于1601年1月1日,所以NT将遇到2184年问题。
苹果公司声明,Mac在29,940年之前不会出现时间问题!由于RTC是一个32位计数器,同样其计时时间是有限的。
库函数中使用到了C标准时间库,时间库中的计时起始时间是1900年,可以知道时间库中不是用有符号位的32位整数来表示时间的,否则在1968年就已经溢出了。
STM32-实时时钟-RTC
STM32-实时时钟(RTC)STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex®-M0,M0+,M3, M4和M7内核(ST's product portfolio contains a comprehensive range of microcontrollers, from robust, low-cost 8-bit MCUs up to 32-bit ARM-based Cortex®-M0 and M0+, Cortex®-M3, Cortex®-M4 Flash microcontrollers with a great choice of peripherals. ST has also extended this range to include an ultra-low-power MCU platform) 。
实时时钟(RTC)是一个专用于保持时间的计时元素。
在许多的应用中,特别是在需要执行精确定时操作的应用,RTC是非常有用的工具。
除了钟表这类应用的例子外还包括洗衣机、医药柜、数据记录仪等。
RTC基本上是一个定时计数器,但和MCU的其他定时器不同的是,它更精确一些。
在此之前文章中,我们探讨了STM32定时器,但他们对PWM生成、时基和其它波形相关任务的应用程序是有用的。
那些都不适合于精确的计时功能。
在大多数的8位MCU中,像普通的PIC和AVR,并有没有内置RTC模块,所以当我们需要一个板载的精确计时器件时,只能使用类似常见的DS1302或PCF8563的专用RTC 芯片。
这些芯片还需要一些额外的电路、布线以及电路板空间。
但是,目前大多数先进的微控制器都集成了设计人员可以想到的每一个可能的硬件。
这仅取决于设计者决定使用现代微控制器的哪个资源,来满足特定的设计目标。
制造用于满足应用特定需求的MCU的时代已经过去了,在设计中使用并涉及多个元件的时代也已经过去了。
关于STM32中RTC的校准方法
关于STM32中RTC的校准方法STM32微控制器系列中的RTC(Real-Time Clock,实时时钟)模块是一个用于提供实时时间和日期的硬件模块。
RTC的主要目的是在系统掉电后仍能持续运行并保持时间的准确性。
RTC的校准对于确保时间的准确性非常重要,特别是在长时间运行的应用中。
下面将介绍STM32中RTC的校准方法。
1.温度测量校准法(TM)RTC的精度受温度的影响,因此STM32的RTC模块提供了温度测量校准法来校准RTC的误差。
该方法需要在特定温度下测量RTC与基准时钟的误差,并将结果作为温度补偿参数存储在RTC寄存器中。
然后,STM32会使用这些参数来自动调整RTC的误差,并提供更准确的时间。
2.外部时钟校准法(EC)RTC模块可以通过外部时钟源进行校准。
在这种方法中,外部时钟源将与RTC的基准时钟进行比较,并通过调整RTC的预分频器和分频器参数来校准RTC的误差。
外部时钟源可以是一个精确的频率信号源,例如陶瓷谐振器或外部晶振。
3.自动校准调整法(ACA)STM32的RTC模块还提供了自动校准调整法。
该方法利用自带的时钟源对RTC进行周期性校准。
STM32会利用周期性的准确时间源与RTC进行比较,并通过调整RTC的预分频器和分频器参数来校准RTC的误差。
这种方法非常适用于长时间运行的应用,可以保持RTC的准确性。
除了上述方法外,还可以通过以下附加步骤来提高RTC的校准精度:1.外部参考时钟源:使用精确的外部参考时钟源,如GPS或网络时间协议(NTP),可以提供更准确的时间校准。
2.温度补偿:根据测量到的温度与RTC的准确度之间的关系,可以为RTC实现温度补偿。
这样,在温度变化时,RTC的准确度会得到调整。
3.周期性校准:定期进行RTC的校准,以确保其准确性。
可以根据应用的要求选择适当的校准时间间隔。
总结起来,STM32中RTC的校准方法包括温度测量校准法、外部时钟校准法和自动校准调整法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
日历和闹钟寄存器
礼拜
月 年 日
分
12/24小时制
时 秒
日 礼拜
12/24小时制 时 秒 分
11
日历模块的时钟同步
用户以APB1的时钟读取日历寄存器
读取RTC_TR时硬件会锁定RTC_DR 先读取RTC_TR,再读取RTC_DR,保证时间连续性
要保证fPCLK1 ≥4*fRTCCLK
Tamper Flag
TimeStamp Registers
TimeStamp Flag AFO_CALIB
RTCCLK
ss, mm, HH/date
=
Alarm A Flag
Calendar
RTC_CR_OSEL[1:0]
PREDIV_A [6:0] AFO_ALARM
Calibration RTC 数字校准
2
3 4 5 6
关闭警报A
等待访问允许的确认 设置闹钟 重新使能警报A 使能RTC寄存器写保护
复位ALRAE@RTC_CR
查询ALRAWF@RTC_ISR 直到它置位 设置RTC_ALRMAR 置位ALRAE@RTC_CR 往RTC_WPR写入0xFF RTC寄存器不能被修改 FMT格式要和日历一致
Wake-Up
Asynchrone 4bit Prescaler
WUCKSEL [2:0]
16bit autoreload Timer
Periodic wake up Flag
9 9
硬件日历和警报
带夏令时调整的硬件日历
真实寄存器 影子寄存器 RTC_TR & RTC_DR
用户访问的是影子寄存器,而非真实寄存器 影子寄存器每2个RTCCLK被更新一次,并置位RSF标志 低功耗模式下,影子寄存器不再被更新 影子寄存器内容会被所有系统复位信号给复位
15
AFI_TAMPER AFI_TIMESTAMP RTC Reference Clock RTCSEL [1:0]
Backup Registers and RTC Tamper Control registers
Tamper Flag
TimeStamp Registers
TimeStamp Flag 512 Hz clock output Alarm A AFO_CALIB
PREDIV_A [6:0] AFO_ALARM
Calibration
Day/date/month/year HH:mm:ss (12/24 format)
=
Alarm B Flag
Alarm B
Synchronous 13bit Prescaler
PREDIV_S [12:0]
ss, mm, HH/date
Backup Registers and RTC Tamper Control registers
Tamper Flag
TimeStamp Registers
TimeStamp Flag 512 Hz clock output Alarm A AFO_CALIB
HSE (1 MHz) LSE LSI
培训内容
RTC系统框图和组件
时钟源和分频器 硬件日历和警报 自动唤醒定时器
特色功能
数字粗略校准 参考时钟
外部引脚上的导出和导入功能
输出:警报、定时信号、校准时钟 输入:入侵检测
低功耗特性 STM32F2和STM32F1的RTC比较
3
RTC框图
AFI_TAMPER AFI_TIMESTAMP RTC Reference Clock RTCSEL [1:0]
6
配置时间格式(12/24小时)
置位或复位 FMT@RTC_CR
清零INIT@RTC_ISR 往RTC_WPR写入0xFF
7 8
退出初始化模式 使能RTC寄存器写保护
14
闹钟的设置非常灵活
Step 1 What to do 关闭RTC寄存器的写保护 How to do it 先后往RTC_WRP写入 0xCA和0x53 Comments RTC寄存器可以被修改了
置位INIT@RTC_ISR
查询INITF@RTC_ISR直到 它置位
日历计数器停止以便于修 改
4
5
对预分频因子编程
装载时间和日期值
编程寄存器RTC_PRER: RTCCLK=32.768 KHz时, 先写同步分频因子,再写异 预分频因子默认产生1Hz 步因子 时钟 编程RTC_TR和RTC_DR FMT=0:24小时制 FMT=1:AM/PM制 自动载入当前日历计数器 值,4个RTCCLK后开始计 数 RTC寄存器不能被修改
HSE (1 MHz) LSE LSI
RTCCLK
ss, mm, HH/date
Asynchronous 7bit Prescaler
=
Alarm A Flag
Calendar
RTC_CR_OSEL[1:0]
PREDIV_A [6:0] AFO_ALARM
Calibration
Day/date/month/year HH:mm:ss (12/24 format)
实时时钟 RTC
1
培训内容
RTC系统框图和组件
时钟源和分频器 硬件日历和警报 自动唤醒定时器
特色功能
数字粗略校准 参考时钟
外部引脚上的导出和导入功能
输出:警报、定时信号、校准时钟 输入:入侵检测
低功耗特性 STM32F2和STM32F1的RTC比较
2
PREDIV_S [12:0]
ss, mm, HH/date
Wake-Up
Asynchrone 4bit Prescaler
WUCKSEL [2:0]
16bit autoreload Timer
Periodic wake up Flag
6 6
时钟源和分频器
RTC时钟源:RTCCLK
LSE (属于备份域)
=
Alarm B Flag
Alarm B
Synchronous 13bit Prescaler
PREDIV_S [12:0]
ss, mm, HH/date
Wake-Up
Asynchrone 4bit Prescaler
WUCKSEL [2:0]
16bit autoreload Timer
Periodic wake up Flag
Day/date/month/year HH:mm:ss (12/24 format)
=
Alarm B Flag
Alarm B
Synchronous 13bit Prescaler
PREDIV_S [12:0]
ss, mm, HH/date
Wake-Up
Asynchrone 4bit Prescaler
Tamper Flag
TimeStamp Registers
TimeStamp Flag 512 Hz clock output Alarm A AFO_CALIB
HSE (1 MHz) LSE LSI
RTCCLK
ss, mm, HH/date
Asynchronous 7bit Prescaler
=
举例1:每个周一的23:15:07产生闹钟 >> WDSEL = 1 >> MSKx = 0000b >> s = 7 (ST=0b,SU=0111b) >> mm = 15 (MT=01b,MU=0101b) >> hh = 23 (HT=10b,HU=11b) >> AM/PM = 0 (24小时制) >> D = 1 举例2:每个月1号的23:15:07产生闹钟 >> WDSEL = 0 >> 其余设置都一样
WUCKSEL [2:0]
16bit autoreload Timer
Periodic wake up Flag
5 5
AFI_TAMPER AFI_TIMESTAMP RTC Reference Clock RTCSEL [1:0]
Backup Registers and RTC Tamper Control registers
LSE OSC 32.768 KHz
最小因子:2 最大因子:222
@RCC_CFGR
HSE OSC 4~26 MHz
7
使用不同时钟源产生1Hz信号给日历模块
预分频因子 RTCCLK时钟源 PREDIV_A[6:0] HSE_RTC = 1MHz LSE = 32.768KHz LSI* = 32KHz 124 (div 125) 127 (div 128) 127 (div 128) PREDIV_S[12:0] 7999 (div 8000) 255 (div 256) 249 (div 250) 1 Hz 1 Hz 1 Hz Ck_spre
因为:硬件已经在初始化模式下复位RSF 所以:只需等待RSF置位
13
硬件日历初始化流程
Step 1 What to do 关闭RTC寄存器的写保护 How to do it 先后往RTC_WRP写入 0xCA和0x53 Comments RTC寄存器可以被修改了
2
3
进入初始化模式
等待进入初始化模式的确认
SUB1H、ADD1H、BKP@ RTC_CR调整夏令时
两个可编程警报(闹钟)
各自的使能、中断使能、匹配标志信号 各自的掩码寄存器,控制各自的报警时刻
若以秒匹配报警,PREV_S的值必须>=3