STM32F2—实时时钟RTC

合集下载

STM32系列MCU硬件实时时钟(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实时时钟-毫秒计时实现

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 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 实时时钟和闹钟程序

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简介及程序

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时钟程序

stm32的RTC时钟程序
int main(void){ /* System Clocks Configuration */RCC_Configuration(); /* NVIC
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按键修改时间

STM32实时时钟RTC按键修改时间
uip_ipaddr(ipaddr, 255,255,254,0);//设置网络掩码
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时钟的使用方法及步骤以下是使用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进行更多的配置和使用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10
日历和闹钟寄存器
礼拜
月 年 日

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
相关文档
最新文档