stm32之RTC

发布者:Tianran2021最新更新时间:2024-10-21 来源: cnblogs关键字:stm32  RTC  中断 手机看文章 扫描二维码
随时随地手机看文章

1、stm32f10x_it.c文件
/*******************************************************************************
* Function Name  : RTC_IRQHandler    RTC中断
* Description    :
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
extern volatile bool Sec; //1S标志
extern volatile int flag;
void RTC_IRQHandler(void)
{
 if(RTC_GetITStatus(RTC_IT_SEC) != RESET) //RTC发生了秒中断(也有可能是溢出或者闹钟中断)
 {
 
  RTC_ClearITPendingBit(RTC_IT_SEC);
  flag=1;
  Sec++;
  /*
  //以免RTC计数溢出,这里限制了RTC计数值的大小.0x0001517f实际就是一天的秒数
  if(RTC_GetCounter() >= 0x0001517f) 
  {
   RTC_SetCounter(0x0);
  }*/
 }
}

2、rtc.c文件
/*****************************************************
**RTC.C实时时钟部分,包含初始化RTC硬件,
**获取时间,设置时间函数.
**
*****************************************************/

#include 'STM32Lib\stm32f10x.h'
#include 'hal.h'


static u8 RTC_Blank=0;
/***********************************
**函数名:RTC_Configuration
**功能:RTC设置
**注意事项:要根据是否是第一次设置,才进入下面的RTC设定
判断是否第一次设置,只需要判断RTC后备寄存器1的值是否为事先写入的0XA5A5,如果不是,则
RTC是第一次上电,需要初始化RTC,并把实际时间转化为RTC计数值,这里没有设置实际时间,只是简单地初始化了RTC
************************************/
void RTC_Configuration(void)
{
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
 PWR_BackupAccessCmd(ENABLE);
 if(BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)
 {
  /* Reset Backup Domain */
  BKP_DeInit();
  
  /* Enable LSE */
  RCC_LSEConfig(RCC_LSE_ON);
  /* Wait till LSE is ready */
  //等待外部晶振震荡 需要等待比较长的时间
  while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);

  //使用外部晶振32768
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); 
  
  //允许RTC
  RCC_RTCCLKCmd(ENABLE);
  //等待RTC寄存器同步
  RTC_WaitForSynchro();
  
  RTC_WaitForLastTask();
  //允许RTC的秒中断(还有闹钟中断和溢出中断可设置)
  RTC_ITConfig(RTC_IT_SEC, ENABLE);
  
  RTC_WaitForLastTask();
  //32768晶振预分频值是32767,不过一般来说晶振都不那么准
  RTC_SetPrescaler(32776); //如果需要校准晶振,可修改此分频值
  RTC_WaitForLastTask();

  //写入RTC后备寄存器1 0xa5a5
  BKP_WriteBackupRegister(BKP_DR1, 0xA5A5); 
  RTC_Blank=1; //这个标志代表RTC是没有预设的(或者说是没有上纽扣电池)

 }
 //如果RTC已经设置
   else
 {
  //等待RTC与APB同步
    RTC_WaitForSynchro();
  RTC_WaitForLastTask();
 
    //使能秒中断
    RTC_ITConfig(RTC_IT_SEC, ENABLE); 
    RTC_WaitForLastTask();
   }
 
 //清除标志
 RCC_ClearFlag(); 
}

/**************************************************************
** 函数名:TestRtc
** 功能:测试RTC用
** 注意事项:用于显示RTC是否已经设置过.
***************************************************************/
void TestRtc(void)
{
 if(RTC_Blank)
 {
  USART1_Puts('系统之前没设置时间rn');
 }
 else
 {
  USART1_Puts('系统已设置时间rn');
 }
}

3、main.c文件

#include 'STM32Lib\stm32f10x.h'
#include 'hal.h'

volatile bool Sec=FALSE;
volatile int flag=0;
void send_2_pc(unsigned int str)
{
char sec[2];
sec[0]=str/10+'0';
sec[1]=str%10+'0';
USART1_Puts(sec);
USART1_Puts('rn');
}
int main(void)
{
 ChipHalInit();   //片内硬件初始化
 ChipOutHalInit();  //片外硬件初始化
 
 TestRtc();    //测试RTC
 for(;;)
 {
  if(flag==1)
  {
  flag=0;
   send_2_pc(Sec);
  }
 }
}

 

效果图:

 


关键字:stm32  RTC  中断 引用地址:stm32之RTC

上一篇:关于stm32串口下载的问题
下一篇:STM32 DMA彻底研究

推荐阅读最新更新时间:2026-03-20 12:22

STM32 RTC闹钟的中断和唤醒待机模式
RTC代表的是实时时钟的意思,因为它提供的时钟基准比较准确所以用处还是很多的。 RTC全局中断: void RTC_IRQHandler() { if(RTC_GetITStatus(RTC_IT_ALR)!=RESET) //是否闹钟中断发生 { printf( THE ALARM READY =%d rn ,RTC_GetCounter());//输出此时的秒数 RTC_ClearITPendingBit(RTC_IT_ALR); PWR_BackupAccessCmd(ENABLE); RTC_EnterConfigMode(); RTC_WaitForLastTask(); RTC_SetAlarm(40+RTC_Ge
[单片机]
STM32单片机中RTC的秒中断的原理解析
RTC(Real Time Clock)是实时时钟的意思,它其实和TIM有点类似,也是利用计数的原理,选择RTC时钟源,再进行分频,到达计数的目的。 该文主要讲述关于RTC的秒中断功能,这个功能类似SysTIck系统滴答的功能。RTC秒中断功能其实是每计数一次就中断一次。注意,这里所说的秒中断并非一定是一秒的时间,它是由RTC时钟源和分频值决定的“秒”的时间,当然也是可以做到1秒钟中断一次。 本文章提供的实例工程,其实验效果是: 主函数间隔0.5秒LED变化一次; 秒中断一次打印数据“RTC Sec.。.”; 也就是LED变化一次,串口打印一次数据“RTC Sec.。.” 扩展部分的功能RTC计数:可以实现RTC闹钟,本文
[单片机]
<font color='red'>STM32</font>单片机中<font color='red'>RTC</font>的秒<font color='red'>中断</font>的原理解析
mini2440裸机试炼之—RTC闹钟中断,节拍中断
环境搭建 硬件环境:J-link v8、mini2440、J-link转接板、串口转USB线 软件环境:windows7(32位)、开发板uboot(NandFlash)、J-link驱动(J-Link ARM V4.10i)、SecureCRT、ADS1.2 其中ADS里的AXD设置:加载JlinkRDI.dll+Options- Configure Interface...,在Session File一页中选择“Run Configuration Script”,将该name.txt文本文件作为一个脚本加进来,确定。 name.txt内容 Setmem 0x53000000 0x00000000 3
[单片机]
mini2440裸机试炼之—<font color='red'>RTC</font>闹钟<font color='red'>中断</font>,节拍<font color='red'>中断</font>
stm32RTC
两个分离的时钟:用于APB1接口的PCLK1和RTC时钟的(RTC时钟的频率必须小于PCLK1时钟频率的四分之一); RTC的时钟源的配置可以使用函数库中的函数进行配置; RTC的中断也是使用函数库中的额函数进行配置的; void RTC_Configuration(void) {//RTC的时钟为两个分离的时钟:用于APB1的PCLK1和RTC时钟(RTC的时钟的频率必须小于PCLK1时钟频率的四分之一以上 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE); //PWR和BKP时钟使能 PWR_BackupAccessCmd(ENAB
[单片机]
<font color='red'>stm32</font>的<font color='red'>RTC</font>
STM32RTC简介及使用方式
STM32H750 的实时时钟是一个独立的 BCD 定时器/计数器,且带了日历功能,它提供一个日历时钟、两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。 此外RTC 还有自动唤醒单元,RTC还可以补偿闰年闰月等等,还有备份区域(BKP)写保护,这些这里不细说了。 RTC 的简化框图 时钟和分频 STM32H750 的 RTC 时钟源(RTCCLK)通过时钟控制器,可以从 LSE、LSI、HSE 时钟三选一,如图所示,有两个预分频器RTC_PRER ck_spre 的时钟可由如下计算公式计算: Fck_spre = Frtcclk/ 图中,ck_apre 也可作为 RTC 亚秒递减计数器(RTC_SSR)的
[单片机]
<font color='red'>STM32</font>中<font color='red'>RTC</font>简介及使用方式
STM32 RTC时钟晶振 调电RTC计数器不走的问题
在初始化配置的情况下,RTC 日历时间我们默认设置一个时间点,此时备份区设置一个默认参数,表示已经设置过,后期只需要更新读取RTC- CNT 即可,如果出现断电计数器不走的情况,在生产上遇到,晶振贴片没有贴好,导致出厂默认读取的外部高速晶振HSE,这样后期不去掉纽扣电池点的话,默认都是外部高速晶振,这样外币32.768kHZ的晶振实际是没有用的,借此希望给大家一点提示。
[单片机]
<font color='red'>STM32</font> <font color='red'>RTC</font>时钟晶振 调电<font color='red'>RTC</font>计数器不走的问题
STM32片内RTC亚秒特性的应用示例(下)
不过,今天主要想聊聊如何通过RTC来实现该需求。了解STM32的RTC的人可能知道,RTC模块往往还自带一个专门的16位向下计数的唤醒定时器,即下面RTC局部框图中红框所在单元。我这里要分享的也不是这个专用唤醒定时器,而是想基于ALARM事件和亚秒特性来实现上面需求。 对于RTC的ALARM功能我们都不陌生,即先预设需要ALARM的时间点,当日历时间跟设定的ALARM时间匹配时就可以触发ALARM事件及中断。对于ALARM时间点的报警条件可以有很多灵活的组合配置,比方我们可以设置在某月某日某时某分某秒ALARM,也可以设置在某分某秒ALARM,其它不关心,或者仅设置在某个亚秒时刻ALARM,其它不关心。 上图中四种ALA
[单片机]
<font color='red'>STM32</font>片内<font color='red'>RTC</font>亚秒特性的应用示例(下)
STM32系列里RTC的亚秒特性及功能(上)
绝大多数STM32系列里的RTC都具有亚秒【或称子秒】计数单元。为了了解亚秒特性及功能,不妨先看RTC的功能框图。本文中的有关截图若无特别说明均来自STM32L4系列参考手册。 RTC的时钟源【RTCCLK】可以是LSE、LSI或者HSE/32,由RTCCLK最终变成日历的秒脉冲驱动信号经过了2次分频。先经过上图中A处的异步分频单元,默认分频系数是128,形成ck_apre时钟,默认情况下该时钟频率为256Hz;然后该时钟脉冲来到图中B处的同步分频单元,默认分频系数为256,最终形成1Hz的秒脉冲【ck_spre】到日历单元。关于两分频单元分频系数的配置,通过对RTC_PRER寄存器的相关位编程实现。 其中异步分频系数配
[单片机]
<font color='red'>STM32</font>系列里<font color='red'>RTC</font>的亚秒特性及功能(上)
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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