stm32F1RTC

2019-11-18来源: eefocus关键字:stm32F1  RTC  实时时钟

RTC


概述


STM32 的实时时钟(RTC)是一个独立的定时器。 STM32 的 RTC 模块拥有一组连续计数


的计数器, 在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当


前的时间和日期。


RTC 模块和时钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和 RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)写保护。(每次在操作RTC时要先使能后备寄存器的访问)


RTC可以实现的功能


1:时钟日历的显示


2:闹钟功能


3:秒中断操作


配置过程


1:开启时钟源


//开启电源时钟和备份域时钟


RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);


2:使能后备寄存器的访问


//上面提到过系统复位后会自动禁止访问后备寄存器和RTC


PWR_BackupAccessCmd(ENABLE);


3:复位备份域


//取消写保护后要清除备份域的数据,清除之前的设置(看情况而定,并不是每次都要复位)


BKP_DeInit();


4:开启外部低速振荡器


RCC_LSEConfig(RCC_LSE_ON);


5:等待LSE启动稳定


while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)


6:选择RTC的时钟


RTC 时钟的选择,还有 RCC_RTCCLKSource_LSI 和 RCC_RTCCLKSource_HSE_Div128


两个,前者为 LSI,后者为 HSE 的 128 分频


RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);


7:使能RTC时钟


RCC_RTCCLKCmd(ENABLE);


8:等待最近一次对RTC寄存器的写操作完成,等待RTC寄存器同步


RTC_WaitForLastTask();


RTC_WaitForSynchro();


9:相关配置


下面这几步操作顺序可以替换,但是逻辑不能乱


RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能 RTC 秒中断


RTC_WaitForLastTask(); //等待最近一次对 RTC 寄存器的写操作完成


RTC_EnterConfigMode(); // 允许配置


RTC_SetPrescaler(32767); //设置 RTC 预分频的值


RTC_WaitForLastTask(); //等待最近一次对 RTC 寄存器的写操作完成


RTC_SetCounter(seccount);//设置时间


RTC_ExitConfigMode(); //退出配置模式


 


从上面的过程中我们可以看出,RTC时钟的配置过程主要分为以下几个模块


1:允许访问


2:时钟源选择


3:允许配置设置相关参数(分频值,时间,中断)


只是在操作的时候我们有些要求


1:必须取消写保护(系统复位后会自动禁止访问后备寄存器和RTC)


2:每次配置前要先寄存器同步,允许配置,等待上次操作完成


3:要记得退出配置


这些要求手册中的寄存器介绍中都有描述

关键字:stm32F1  RTC  实时时钟 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic480330.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:stm32 看门狗 BKP(HAL库)
下一篇:stm32f0_GPIO

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM8S003F3使用总结——串口
STM8作为低成本芯片一直受到广大用户青睐,最近一个项目使用了STM8S003F3P6这款芯片,主要实现的功能就是串口接收指令控制PWM输出。这里对这款芯片使用过程中遇到的问题进行总结。编译环境:IAR for STM8 3.10.2库版本:V2.2.01.STM8S003F3与STM8S103F3差异除了以上差异,两款芯片可pin-to-pin兼容,片内外设资源一致。2.串口通信STM8S003F不支持DMA,因此使用中断方式接收。中断向量表如下:typedef enum { UART1_IT_TXE        = (uint16_t)0x0277, /*!< Transmit
发表于 2019-11-30
STM8S003F3使用总结——串口
stm8s003f3使用杂记
转换模式,怎么从缓存区读回各路转换结果?用GETBUFFERVALUE(直接写寄存器组的序号就行)函数。之前要调用相应的配置函数:ADC1_DataBufferCmd(FunctionalState NewState);参考RM0016——page366中关于数据缓存寄存器的介绍。此时要用DMA传送结果。8:为什么已经修改了stm8s.h文件,ADC1部分的定义还是会在编译时提示没有定义呢?甚至把那部分的定义放到主函数里也不行呢。这种无厘头的问题------重新建个工程就行了。>我*?!!!事实再一次证明,新建工程也不管用啊!!!conf没改好吧??(我已经放弃了,包含了iostm8s003f3的源文件然后用寄存器写的
发表于 2019-11-30
STM8S003F3 使用内置的Data EEPROM的操作接口
操作系统:win10 64bit平台:STM8S003F3 IDE: IAR For STM8/* Data EEPROM 操作初始化 */void Init_Flash(void){  FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);} /************************************************函数名称 : EE_FLASH_WriteNByte功    能 : 写EEPROM参    数 : pBuffer ----- 写入数据区首地址   
发表于 2019-11-30
详细分析stm32f10x.h
/**这里是STM32比较重要的头文件   ******************************************************************************  * @file    stm32f10x.h                  ST 标准的头文件  * @author  MCD Application Team 
发表于 2019-11-28
stm8s103f3p6的延时函数
使用stm8s时本来期望能够产生1us精度的脉冲,但是调来调去也没能实现。目前的情况是使用内部16MHz的RC时钟源,然后给到timer4,再经 8分频产生一个25us的中断,我能搞出来的最小中断周期是15us左右,考虑到那不是一个很好的整数,主要是当要延时整数比如100,1000时没办法除尽,所以就只好取25us为一个最小单位了。如果有人能用定时器产生1us的脉冲请指点一下。多谢。 下面上代码吧: 基本的思路就是使用timer4每隔25us计数一次,然后延时函数对timer4的中断次数进行统计。完成指定的延时时间后退出while循环。#include"stm8s.h"uint8_t
发表于 2019-11-28
STM8S103F3P6核心板原理图设计
Encounter problems:1.无法执行DRC检查2.图纸页面无法设置Solution:1.选中.dsn文件,即便可以执行DRC检查2.设置schematic page properties   3.瓷片电容封装RAD是瓷片电容的封装,一般104.103.222.33.这些的封装是RAD0.1,而RAD0.2的就是比较大,可以说是元器件管脚的距离是200mil。。RAD0.1封装是无极性电容,0.1是指这个电容在电路板上的焊盘间距为100mil(1mil=0.0254mm)。RB.1/.2封装是指有极性电容,后面的.1/.2是指这个电容在电路板上两引脚之间的间距是100mil,它的外径是200mil。
发表于 2019-11-27
STM8S103F3P6核心板原理图设计
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved