10--STM32-RTC实时时钟实验

合集下载

第二十章 RTC实时时钟实验-STM32F4开发指南-正点原子探索者STM32开发板

第二十章 RTC实时时钟实验-STM32F4开发指南-正点原子探索者STM32开发板
291
STM32F4 开发指南(库函数版)
ALIENTEK 探索者 STM32F407 开发板教程
图 20.1.3 RTC_DR 寄存器各位描述 同样,该寄存器的的数据始化模式下,对该寄存器进行写操作,可以设置日期。 接下来,看 RTC 亚秒寄存器:RTC_SSR,该寄存器各位描述如图:20.1.4 所示:
RTC 的简化框图,如图 20.1.1 所示:
图 20.1.1 RTC 框图 此图可以从 STM32F4 中文参考手册 RTC 章节中找到(图 222:RTC 框图)。本章我们用到
289
STM32F4 开发指南(库函数版)
ALIENTEK 探索者 STM32F407 开发板教程
RTC 时钟和日历,并且用到闹钟功能。接下来简单介绍下 STM32F4 RTC 时钟的使用。 1,时钟和分频 首先,我们看 STM32F4 的 RTC 时钟分频。STM32F4 的 RTC 时钟源(RTCCLK)通过时
RTC 模块和时钟配置是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时 间维持不变,只要后备区域供电正常,那么 RTC 将可以一直运行。但是在系统复位后,会自动 禁止访问后备寄存器和 RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)写保护。
WUCKSEL [1]代替)。 初始化完成后,定时器开始递减计数。在低功耗模式下使能唤醒功能时,递减计数保持有
效。此外,当计数器计数到 0 时,RTC_ISR 寄存器的 WUTF 标志会置 1,并且唤醒寄存器会使 用其重载值(RTC_WUTR 寄存器值)动重载,之后必须用软件清零 WUTF 标志。
通过将 RTC_CR 寄存器中的 WUTIE 位置 1 来使能周期性唤醒中断时,可以使 STM32F4 退出低功耗模式。系统复位以及低功耗模式(睡眠、停机和待机)对唤醒定时器没有任何影响, 它仍然可以正常工作,故唤醒定时器,可以用于周期性唤醒 STM32F4。

实时时钟RTC模块和串口设计电子钟实验

实时时钟RTC模块和串口设计电子钟实验

实时时钟RTC模块和串口设计电子钟实验一、实验要求对开发板上STM32处理器的RTC模块进行操作。

RTC模块的当前时间通过串口传送给PC机的超级终端显示,若RTC模块还未设置时间则通过超级终端进行设置。

RTC的秒中断每发生一次,发光二极管LED1闪烁一次。

二、硬件电路设计在开发板上STM32F103VET6处理器的VBAT引脚接+3V钮扣电池,PB6引脚接LED1,晶振、USART等均已连接好。

该应用实例不需要额外电路设计,只需将用一根RS232串行通讯线将开发板的COM1口与PC机的串口相连即可。

三、软件设计思路根据设计要求,软件需实现以下任务:(1) 系统启动后检查RTC是否已设置。

由于RTC在BKP区域,当Vdd掉电之后可由后备电源提供电源,当后备电源连接到针脚VBAT上时,RTC的设置不会由于外部电源的断开而丢失。

在本例中先写一个值到BKP_DR1中以标示RTC是否已配置,在启动之后程序检查BKP_DR1的值,如果保持不变,则表示有后备电池;若BKP_DR1的值不是已经写入的值,则可能是BKP_DR1的值有误或者由于是第一次运行值还未写进去,则需要配置RTC,并且询问用户当前的时间作为RTC的起始值。

(2) 若BKP_DR1的值正确,则意味着RTC已配置,此时将在超级终端上按照每秒一次的频率更新时间。

(3) 在RTC秒中断发生时,连接到PB.05 的LED1灯改变一次状态,这样闪烁频率为2秒。

四、程序分析整个工程包含3个源文件:startup_stm32f10x_hd.s、stm32f10x_it.c和main.c,其中startup_stm32f10x_hd.s为启动代码,所有中断服务子程序均在stm32f10x_it.c中,其它函数则在main.c中。

下面分别介绍相关的函数,函数RTC_IRQHandler用于处理秒中断事件,每次秒中断令LED1闪烁一次,在每次遇到23:59:59时将时钟回零。

stm32整点报时课程设计

stm32整点报时课程设计

stm32整点报时课程设计一、课程目标知识目标:1. 学生能够理解STM32的基本结构和功能,掌握其时钟系统的工作原理。

2. 学生能够运用C语言进行STM32程序设计,实现整点报时的功能。

3. 学生了解实时时钟(RTC)的概念,掌握STM32中RTC的使用方法。

技能目标:1. 学生能够使用开发工具(如Keil)进行STM32程序编写、编译和调试。

2. 学生能够运用所学知识,设计并实现一个具有整点报时功能的STM32应用程序。

3. 学生能够通过实际操作,提高动手能力,培养问题解决能力和团队协作能力。

情感态度价值观目标:1. 学生培养对单片机及嵌入式系统开发的兴趣,激发学习积极性。

2. 学生认识到编程对于解决实际问题的重要性,增强自信心和成就感。

3. 学生通过团队协作,培养沟通能力、合作精神和集体荣誉感。

课程性质:本课程为实践性较强的课程,结合STM32单片机知识,培养学生编程和实际操作能力。

学生特点:学生已具备一定的C语言基础,对STM32单片机有一定的了解,但实际操作经验不足。

教学要求:教师需采用理论教学与实践操作相结合的方式,引导学生掌握STM32程序设计方法,注重培养学生的学习兴趣和实际操作能力。

在教学过程中,关注学生的个体差异,提供个性化指导,确保课程目标的实现。

通过课程学习,使学生能够达到上述具体的学习成果。

二、教学内容1. 理论知识:- STM32单片机基本结构及功能介绍。

- 时钟系统原理,包括内部时钟、外部时钟及RTC。

- C语言基础知识回顾,重点讲解与STM32编程相关的部分。

2. 实践操作:- 教学内容分为四个阶段:阶段一:STM32开发环境搭建,熟悉Keil编程工具。

阶段二:学习STM32时钟系统配置,掌握RTC的使用。

阶段三:编写整点报时程序,实现基本功能。

阶段四:调试优化程序,实现整点报时功能。

3. 教学大纲:- 第一周:STM32基本结构及功能介绍,RTC概念引入。

- 第二周:C语言回顾,STM32开发环境搭建。

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数字时钟课程设计

stm32数字时钟课程设计

stm32 数字时钟课程设计一、课程目标知识目标:1. 学生能理解STM32的基本结构和工作原理,掌握其编程方法。

2. 学生能掌握数字时钟的基本原理,包括时钟源、分频器、计数器等组成部分。

3. 学生能了解实时时钟(RTC)的功能及其在STM32中的应用。

技能目标:1. 学生能运用C语言编写程序,实现STM32控制数字时钟的功能。

2. 学生能通过调试工具,对程序进行调试和优化,确保数字时钟的准确性。

3. 学生能运用所学知识,设计具有实用价值的数字时钟产品。

情感态度价值观目标:1. 培养学生对电子技术和编程的兴趣,激发其探究精神。

2. 培养学生团队合作意识,使其在项目实施过程中学会相互沟通、协作。

3. 培养学生严谨、细致、负责的工作态度,提高其解决实际问题的能力。

课程性质:本课程为实践性较强的课程,结合STM32和数字时钟知识,培养学生的动手能力和实际操作技能。

学生特点:学生具备一定的电子技术基础和C语言编程能力,对实际操作感兴趣,但可能缺乏项目实践经验。

教学要求:注重理论与实践相结合,引导学生主动探索,提高其分析问题、解决问题的能力。

在教学过程中,关注学生的个体差异,因材施教,使每位学生都能在原有基础上得到提高。

将课程目标分解为具体的学习成果,便于后续教学设计和评估。

二、教学内容本课程教学内容主要包括以下几部分:1. STM32基本原理与编程基础:介绍STM32的内部结构、工作原理,C语言编程基础及其在STM32中的应用。

- 教材章节:第一章至第三章- 内容:微控制器基础、STM32硬件结构、C语言编程基础、STM32编程环境搭建。

2. 数字时钟原理与设计:讲解数字时钟的基本原理、组成部分以及设计方法。

- 教材章节:第四章至第五章- 内容:时钟源、分频器、计数器、实时时钟(RTC)、数字时钟设计方法。

3. STM32实现数字时钟功能:结合STM32和数字时钟知识,指导学生动手实践,实现数字时钟功能。

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. 日期中断:每当计数器的日期字段更新时触发中断。

35. RTC实时时钟实验[11页]

35. RTC实时时钟实验[11页]

普中STM32开发板带您进入ARM世界
4.编写RTC控制程序
本章所要实现的功能是:设置RTC时间日期初值,在RTC秒中断内使用 串口打印出RTC日期和时间,D1指示灯闪烁提示系统运行。程序框架如下 : (1)初始化RTC,设置RTC时间日期初值 (2)开启RTC的秒中断,编写RTC中断函数, (3)在RTC中断内更新时间并打印输出 (4)编写主函数
STM32F1的RTC,就需要了解它内部的结构。如图32.1.1所示:(大家也 可以查看《STM32F10x中文参考手册》-16实时时钟(M世界
系统复位后, 默认禁止访问后备寄存器和 RTC,防止对后备区域 (BKP)的意外写操作。执行以下操作使能对后备寄存器和 RTC 的访问: (1) 设置 RCC_APB1ENR 寄存器的 PWREN 和 BKPEN 位来使能电源和后备
3.硬件电路
本实验使用到硬件资源如下: (1)D1指示灯 (2)串口1 (3)RTC
D1指示灯、串口1电路在前面章节都介绍过,这里就不多说,至于RTC 它属于STM32F1芯片内部的资源,只要通过软件配置好即可使用。D1指示 灯用来提示系统运行状态。串口1将读取的RTC时间日期信息打印出来。
这里需要注意RTC 不能断电,否则时间数据将会丢失,如果想让时间 在断电后还可以继续走,那么必须确保开发板上的纽扣电池有电。
接口时钟。 (2) 设置电源控制寄存器(PWR_CR)的 DBP 位使能对后备寄存器和 RTC
的访问。 设置后备寄存器为可访问后,在第一次通过 APB1 接口访问 RTC 时 , 因为时钟频率的差异,所以必须等待 APB1 与 RTC 外设同步,确保 被读取出来的 RTC 寄存器值是正确的。若在同步之后,一直没有关闭 APB1 的 RTC 外设接口,就不需要再次同步了。 如果内核要对 RTC寄存器进行任何的写操作,在内核发出写指令后, RTC模块在 3个RTCCLK 时钟之后,才开始正式的写 RTC 寄存器操作。 由于 RTCCLK 的频率比内核主频低得多,所以每次操作后必须要检查 RTC关闭操作标志位 RTOFF,当这个标志被置 1 时,写操作才正式完成 。

stm32_RTC时钟校准

stm32_RTC时钟校准

AN2604应用笔记STM32F101xx and STM32F103xx RTC校准总体介绍实时时钟在很多嵌入式应用中是必不可少的,但是由于外部环境温度的改变,驱动RTC的晶体频率会发生变化,因此RTC就没有预想的那么准确了!STM32F101xx and STM32F103xx附带有数字时钟校准电路,因此可以适应与变化的环境,它主要是来补偿晶体由于环境的变化,这篇应用笔记主要讨论了RTC校准的基本原理以及解释了如何利用RTC校准来提高计时精度。

1RTC校准基本原理1.1晶体的准确性在很多计时领域,通常都是用“石英精确度”这么一个术语来描述的,石英晶体振荡器提供了一个远远优于其他类型振荡器的精确度,但是它并不是完美的,石英晶体振荡器对温度十分敏感,Figure1展示了一个32.768HZ晶体的频率精确度(acc)和温度(T)以及曲率(K)的关系,这个曲线可以用下面的公式给出:注:曲率K由于不同的晶体而不同,这里是针对STM3210B-EVAL开发板来说的,关于这部分可以参考相关晶体制造商提供的详细信息。

在很多应用领域需要一个高准确度的时钟,但是在实际中有好多综合因素限制着精度的提高,通常,典型的方法是通过调节晶体的负载电容来调节精度,这一方法,虽然十分有效,但是也存在这一些缺点:1它需要多加一个外部器件(可调电容)。

2其增大了电流消耗(这在电池供电的场合尤为突出)。

取代这种传统的模拟的方法,STM32F10xxx系列提供了一个数字校准器,允许用户用软件控制的方法进行校准,非常的好用!1.2具体方法STM32F10xxx的RTC模块是用一个32768HZ的通常石英晶体驱动的,其实石英晶体是一种能够提供非常固定频率的,但是有以下两种情况导致了其频率的不稳定:1温度变化;2晶体本身的变化。

前面讲述了一般通常的方法都是用一个麻烦的可调电容来补偿误差,这里STM32F10xxx使用的是一个周期计数器来进行校正,这个数字校正器通过从220个时钟周期中减去0到127个周期的方法来校正的,如图所示:究竟有多少个时钟节拍是空白的取决于最近一次向备份寄存区域RTC校准寄存器最后七位加载的值,之所以这个校准寄存器放在备份区域是因为这个寄存器即使在系统掉电情况下仍然可以通过后备电池进行供电(译者注:如果后背电池也掉电,当然这个寄存器的值也会丢失的),注意:从上图中可以看出时钟输出引脚是在校准之前的频率,所以这个值是不会被校准所改变的,尽管已经进行了校准,但是这个输出是在校准之前的频率。

基于STM32的RTC实时时钟说明书

基于STM32的RTC实时时钟说明书

RTC实时时钟说明书
一:工作原理
STM32芯片中内置RTC时钟,当对RTC进行初始化后,便可以像电子钟一样运行,通过读取RTC对应的寄存器,可以获知年月日、时分秒信息。

有关RTC的说明可参考《STM32中文参考资料》。

二:实验现象及操作
程序下载后,有以下两种情况。

●如果芯片第一次初始化RTC,则程序将写入HEX生成的时间信息到芯片RTC时钟中,
然后读出时钟信息。

通过数码管显示。

●如果不是第一次初始化RTC,则程序将读取RTC对应寄存器的值,以时间信息显示
在数码管上。

如果开发板上有放入3V的小电池,则即使掉电,RTC时钟依然在走。

程序刚下载,数码管显示的数据为时-分-秒。

K1键,则显示年月日,左边四位为年份,最右边两位为日期。

其它两位为月份。

K2键,数码管继续显示时-分-秒。

STM32单片机RTC时钟的使用方法及步骤

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按键修改时间
tcp_client_reconnect();//尝试连接到TCP Server端,用于TCP Client
while (1)
{ Display_Time();
uip_polling();//处理uip事件,必须插入到用户程序的循环体中
//key=KEY_Scan();
if(tcp_client_tsta!=tcp_client_sta)//TCP Client状态改变
timer.w_month=(s8)Process_date(0,0,str[5],str[6]);
timer.w_date=(s8)Process_date(0,0,str[8],str[9]);
timer.hour=(s8)Process_date(0,0,str[11],str[12]);
timer.min=(s8)Process_date(0,0,str[14],str[15]);
case 6:LCD_ShowString(1,7,"六");break;
}
LCD_Shownum(1,0,timer.hour);
LCD12684_Wdat(0x3a);
LCD_Shownum1(timer.min);
LCD12684_Wdat(0x3a);
LCD_Shownum1(timer.sec);
if(BUF->type == htons(UIP_ETHTYPE_IP))//是否是IP包?
{
uip_arp_ipin();//去除以太网头结构,更新ARP表
uip_input();//IP包处理
//当上面的函数执行后,如果需要发送数据,则全局变量uip_len > 0
//需要发送的数据在uip_buf,长度是uip_len (这是2个全局变量)

STM32单片机RTC时钟的使用方法及步骤

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入门系列教程之十二《实时时钟RTC编程》

STM32入门系列教程之十二《实时时钟RTC编程》

STM32入门系列教程实时时钟RTC编程Revision0.01(2010-04-27)对于单片机转ARM的同学来说,RTC可能比较少接触。

提到实时时钟,更经常想到的是DS1302。

当然,在STM32里,自己一个CPU已经足够,不需要DS1302。

实际上,RTC就只一个定时器而已,掉电之后所有信息都会丢失,因此我们需要找一个地方来存储这些信息,于是就找到了备份寄存器。

因为它掉电后仍然可以通过纽扣电池供电,所以能时刻保存这些数据。

我们在本期教程中将详细讲述RTC原理及例程,以引导大家顺利进入RTC的世界。

1.STM32的RTC模块RTC模块之所以具有实时时钟功能,是因为它内部维持了一个独立的定时器,通过配置,可以让它准确地每秒钟中断一次。

下面就来看以下它的组成结构。

1.1RTC的组成RTC由两个部分组成:APB1接口部分以及RTC核心部分(感觉说了等于没说,因为任何模块都会有接口部分和它自己的核心部分。

请注意,权威的STM32系列手册是这么说的�)。

笔者猜想原因可能是STM32所有的外设默认时钟无效,使用某个外设时,再开启时钟,用这样的方式来降低功耗。

这里的RTC,APB1接口由APB1总线时钟来驱动。

为了突出时钟吧?不过据说APB1接口部分还包括一组16位寄存器。

RTC核心部分又分为预分频模块和一个32位的可编程计数器。

前者可使每个TR_CLK周期中RTC产生一个秒中断,后者可被初始化为当前系统时间。

此后系统时间会按照TR_CLK周期进行累加,实现时钟功能。

1.2对RTC的操作我们对RTC的访问,是通过APB1接口来进行的。

注意,APB1刚被开启的时候(比如刚上电,或刚复位后),从APB1上读出来的RTC寄存器的第一个值有可能是被破坏了的(通常读到0)。

这个不幸,STM32是如何预防的呢?我们在程序中,会先等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置1,然后才开始读操作,这时候读出来的值就是OK的。

stm32RTC实时时钟[操作寄存器+库函数]-ChangingsBlog

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年就已经溢出了。

浅谈STM32F10X芯片RTC实时时钟

浅谈STM32F10X芯片RTC实时时钟

1、介绍系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。

执行以下操作将使能对后备寄存器和RTC的访问:●设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟(调用:RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP | RCC_APB1Periph_PWR,ENABLE));●设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问(调用:PWR_BackupAccessCmd(ENABLE))。

2、RTC注意事项●RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器仅能通过备份域复位信号复位;系统复位或电源复位不会影响他们的值;●RTC提供APB1接口通ABP1读取RTC寄存器的值,但必须等待RTC_CRL寄存器中的RSF(同步标志位)位被硬件置“1”之后进行;●RTC的配置必需在前一次写操作结束(判断RTC_CR寄存器中的RTOFF是否为1,为1表示更新完成),并设置RTC_CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC_PRL、RTC_CNT、RTC_ALR寄存器,清除CNF标志位时,写操作才实际有效(说明RTC是动态配置的,即是在RTC 运行起来之后再进行配置);●RTC中的任何标志位都将保持挂起状态(因为OWF、ALRF、SECF和RSF只能由硬件置位由软件清零),直到适当的RTC_CR请求位被软件复位,表示所有请求的中断已经被接受;●若ALRF=1且ALRIE=1,则允许产生RTC全局中断,如果EXTI控制器中允许产生EXTI线17中断,则允许产生RTC全局中断和RTC闹钟中断,在这种情况下,一般设置闹铃中断优先级高于全局中断,如果全局中断优先级高于闹铃中断,则在全局中断中必须清除闹钟中断标志之后,才能进入闹钟中断处理函数进一步处理(因为不清除标志,则会一直引发中断,而全局中断优先级高,就会一直在全局中断中无法跳出来);●若ALRF=1,如果在EXTI控制器中设置了EXTI线17的中断模式,则允许产生RTC闹钟中断;如果在EXTI控制器中设置了EXTI线17的事件模式,则这条线上会产生一个脉冲(不会产生RTC闹钟中断);●当APB1时钟不运行时,OWF、ALRF、SECF和RSF位不被更新;●系统复位时禁止所有中断,无挂起中断请求,可以对RTC寄存器进行写操作;●对RTC的写操作必须使用如下过程之一与RTC秒标志同步:使用RTC闹钟中断,并在中断处理程序中修改RTC闹钟和/或RTC计数器;等待RTC控制寄存器中秒标志SECF置位,再更改RTC闹钟和/或RTC计数器。

STM32-实时时钟-RTC

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的时代已经过去了,在设计中使用并涉及多个元件的时代也已经过去了。

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

2017/9/12
5
RTC还有一个闹钟寄存器RTC_ALR,用于产生闹钟。系统时间按 TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时间相比较 ,如果RTC_CR控制寄存器中设置了相应允许位,比较匹配时将产生 一个闹钟中断。 RTC内核完全独立于RTC APB1接口,而软件是通过APB1接口访问 RTC的预分频值、计数器值和闹钟值的。但是相关可读寄存器只在 RTC APB1时钟进行重新同步的RTC时钟的上升沿被更新,RTC标志也 是如此。这就意味着,如果APB1接口刚刚被开启之后,在第一次的内 部寄存器更新之前,从APB1上都处的RTC寄存器值可能被破坏了(通 常读到0)。因此,若在读取RTC寄存器曾经被禁止的RTC APB1接口 ,软件首先必须等待RTC_CRL寄存器的RSF位(寄存器同步标志位, bit3)被硬件置1。
2017/9/12
6
2 RTC相关寄存器
控制寄存器高位RTC_CRH
RTC总共有2个控制寄存器RTC_CRH和RTC_CRL,两个都是16位的。 RTC_CRH寄存器用来控制中断的,我们本章将要用到秒钟中断,所以在该寄 存器必须设置最低位为1,以允许秒钟中断。
2017/9/12
7
控制寄存器低位RTC_CRL )
RTC实时时钟
2017/9/12
1
1 RTC简介 2 RTC寄存器介绍 3 RTC配置步骤 4 实验讲解
2017/9/12
2
RTC简介
STM32的实时时钟(RTC)是一个独立的定时器。STM32的RTC模块 拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功 能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系 统复位或从待机模式唤醒后RTC的设置和时间维持不变。但是在系统复 位后,会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的 意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)写 保护。
2017/9/12
11
RTC_PRLH只有低四位有效,用来存储PRL的19~16位。而PRL的前 16位,存放在RTC_PRLL里面
2017/9/12
12
RTC预分频器余数寄存器RTC_DIVH /RTC_DIVL
该寄存器也有2个寄存器组成RTC_DIVH和RTC_DIVL,这两个寄存器的作用就 是用来获得比秒钟更为准确的时钟,比如可以得到0.1秒,或者0.01秒等。该寄存 器的值自减的,用于保存还需要多少时钟周期获得一个秒信号。在一次秒钟更新 后,由硬件重新装载。这两个寄存器和RTC预分频装载寄存器的各位是一样的。
结合实验工程源码来讲解2017/9/12来自212)取消备份区写保护。
要向备份区域写入数据,就要先取消备份区域写保护(写保护在每次硬复位 之后被使能),否则是无法向备份区域写入数据的。我们需要用到向备份区 域写入一个字节,来标记时钟已经配置过了,这样避免每次复位之后重新配 置时钟。
2017/9/12
17
3)复位备份区域,开启外部低速振荡器。
在取消备份区域写保护之后,我们可以先对这个区域复位,以清除前面的设 置,当然这个操作不要每次都执行,因为备份区域的复位将导致之前存在的 数据丢失,所以要不要复位,要看情况而定。然后我们使能外部低速振荡器 ,注意这里一般要先判断RCC_BDCR的LSERDY位来确定低速振荡器已经就 绪了才开始下面的操作。
2017/9/12
3
RTC的简化框图,如下图所示:
2017/9/12
4
RTC由两个主要部分组成(参见图1),第一部分(APB1接口)用来和 APB1总线相连。此单元还包含一组16位寄存器,可通过APB1总线对 其进行读写操作。APB1接口由APB1总线时钟驱动,用来与APB1总线 接口。 另一部分(RTC核心)由一组可编程计数器组成,分成两个主要模块。第 一个模块是RTC的预分频模块,它可编程产生最长为1秒的RTC时间基 准TR_CLK。RTC的预分频模块包含了一个20位的可编程分频器(RTC 预分频器)。如果在RTC_CR寄存器中设置了相应的允许位,则在每个 TR_CLK周期中RTC产生一个中断(秒中断)。第二个模块是一个32位的 可编程计数器,可被初始化为当前的系统时间,一个32位的时钟计数器 ,按秒钟计算,可以记录4294967296秒,约合136年左右,作为一般 应用,这已经是足够了的。
2017/9/12
8
2017/9/12
9
本章我们用到的是该寄存器的0、3~5这几个位,第0位是秒钟标志位,
我们在进入闹钟中断的时候,通过判断这位来决定是不是发生了秒钟 中断。然后必须通过软件将该位清零(写0)。第3位为寄存器同步标 志位,我们在修改控制寄存器RTC_CRH/CRL之前,必须先判断该位 ,是否已经同步了,如果没有则等待同步,在没同步的情况下修改 RTC_CRH/CRL的值是不行的。第4位为配置标位,在软件修改 RTC_CNT/RTC_ALR/RTC_PRL的值的时候,必须先软件置位该位,以 允许进入配置模式。第5位为RTC操作位,该位由硬件操作,软件只读 。通过该位可以判断上次对RTC寄存器的操作是否完成,如果没有, 我们必须等待上一次操作结束才能开始下一次操作。
发板使用的是STM32F103RBT6,属于小容量产品,只有10个16为的寄存器), 可用来存储84个字节的用户应用程序数据。他们处在备份域里,当VDD电源 被切断,他们仍然由VBAT维持供电。即使系统在待机模式下被唤醒,或系统 复位或电源复位时,他们也不会被复位。 此外,BKP控制寄存器用来管理侵入检测和RTC校准功能。 复位后,对备份寄存器和RTC的访问被禁止,并且备份域被保护以防止可能 存在的意外的写操作。执行以下操作可以使能对备份寄存器和RTC的访问: 1)通过设置寄存器RCC_APB1ENR的PWREN和BKPEN位来打开电源和后 备接口的时钟 2)电源控制寄存器(PWR_CR)的DBP位来使能对后备寄存器和RTC的访问
2017/9/12
13
RTC计数器寄存器RTC_CNTH和RTC_CNTL
该寄存器由2个16位的寄存器组成RTC_CNTH和RTC_CNTL,总共32 位,用来记录秒钟值(一般情况下)。 注意一点,在修改这个寄存器的时候要先进入配置模式。
2017/9/12
14
RTC闹钟寄存器RTC_ALRH和RTC_ALRL
RTC的时钟源选择及使能设置都是通过备份区域控制寄存器RCC_BDCR来实 现的,所以我们在RTC操作之前先要通过这个寄存器选择RTC的时钟源,然 后才能开始其他的操作。
2017/9/12
16
RTC配置步骤
1)使能电源时钟和备份区域时钟。
前面已经介绍了,我们要访问RTC和备份区域就必须先使能电源时钟和备份 区域时钟。这个通过RCC_APB1ENR寄存器来设置。
4)选择RTC时钟,并使能。
这里我们将通过RCC_BDCR的RTCSEL来选择选择外部LSI作为RTC的时钟。 然后通过RTCEN位使能RTC时钟。
5)设置RTC的分频,以及配置RTC时钟。
在开启了RTC时钟之后,我们要做的就是设置RTC时钟的分频数,通过 RTC_PRLH和RTC_PRLL来设置,然后等待RTC寄存器操作完成,并同步之后 ,设置秒钟中断。然后设置RTC的允许配置位(RTC_CRH的CNF位),设置 时间(其实就是设置RTC_CNTH和RTC_CNTL两个寄存器)。
2017/9/12
18
6)更新配置,设置RTC中断。
在设置完时钟之后,我们将配置更新,这里还是通过RTC_CRH的 CNF来实现。在这之后我们在备份区域BKP_DR1中写入0X5050代表我 们已经初始化过时钟了,下次开机(或复位)的时候,先读取 BKP_DR1的值,然后判断是否是0X5050来决定是不是要配置。接着 我们配置RTC的秒钟中断,并进行分组。
7)编写中断服务函数。
最后,我们要编写中断服务函数,在秒钟中断产生的时候,读取当前 的时间值,并显示到TFTLCD模块上。
2017/9/12
19
实验讲解
硬件设计:
只需要串口显示时钟。
实验现象:
LED1不停的闪烁,提示程序已经在运行了。同时可以看到串口开 始显示时间。
2017/9/12
20
软件设计
2017/9/12
10
预分频装载寄存器RTC_PRLH/RTC_PRLL
由 2个寄存器组成,RTC_PRLH和RTC_PRLL。这两个寄存器用来配 置RTC时钟的分频数的,比如我们使用外部32.768K的晶振作为时钟 的输入频率,那么我们要设置这两个寄存器的值为32767,以得到一 秒钟的计数频率。
该寄存器也是由2个16为的寄存器组成RTC_ALRH和RTC_ALRL。总共也是32 位,用来标记闹钟产生的时间(以秒为单位),如果RTC_CNT的值与 RTC_ALR的值相等,并使能了中断的话,会产生一个闹钟中断。该寄存器的 修改也要进入配置模式才能进行。
2017/9/12
15
因为我们使用到备份寄存器来存储RTC的相关信息(我们这里主要用来标记时 钟是否已经经过了配置),我们这里顺便介绍一下STM32的备份寄存器。 备份寄存器是42个16位的寄存器(大容量产品才有,ALIENTEK MiniSTM32开
相关文档
最新文档