STM32L152 RTC 日历和定时中断使用

原创 2016年05月31日 10:08:36

STM32L152 RTC 日历和自动唤醒功能配置

1、开发平台:

STM32L1-Discovery Keil 4

2、RTC Calendar和wake up

  • STM32L152RC 带有一个硬件的实时时钟模块(RTC),可为用户提供日历功能,RTC也可以提供一个自动定时的功能,相当于是一个睡眠定时器,下面就看看该如何配置日历和定时:
 void SYS_RTCInit(void)
{
    static NVIC_InitTypeDef  NVIC_InitStructure;
    static EXTI_InitTypeDef  EXTI_InitStructure;
    static RTC_InitTypeDef RTC_InitStructure;
    static RTC_TimeTypeDef RTC_TimeStructure;
    static uint32_t AsynchPrediv = 0, SynchPrediv = 0;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

    /*!< Allow access to RTC */
    PWR_RTCAccessCmd(ENABLE);

    /*!< 使能外部低速时钟 */
    RCC_LSEConfig(RCC_LSE_ON);

    /*!< 等待外部低速时钟就绪 */
    while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
    {}

    /*!< 配置RTC时钟来源 */
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);

    /*!< 使能RTC时钟 */
    RCC_RTCCLKCmd(ENABLE);

    /*!< Wait for RTC APB registers synchronisation */
    RTC_WaitForSynchro();

    //配置日历
    /* 配置RTC数据寄存器以及时钟分频 */
    SynchPrediv = 0xFF;
    AsynchPrediv = 0x7F;//分频为1Hz
    RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv;
    RTC_InitStructure.RTC_SynchPrediv = SynchPrediv;
    RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;//24小时制
    /* 检查RTC初始化 */
    if (RTC_Init(&RTC_InitStructure) == ERROR)
    {
        printf("\n\r        /!\\***** RTC Prescaler Config failed ********/!\\ \n\r");
    }
    //配置时间 9点15分01秒
    RTC_TimeStructure.RTC_H12     = RTC_H12_AM;
    RTC_TimeStructure.RTC_Hours = 0x09;
    RTC_TimeStructure.RTC_Minutes = 0x15;
    RTC_TimeStructure.RTC_Seconds = 0x01;
    RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);

    //配置自动定时功能
    /* 中断配置 *******************************************************/
    EXTI_ClearITPendingBit(EXTI_Line20);
    EXTI_InitStructure.EXTI_Line = EXTI_Line20;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

    /*使能 RTC Wakeup Interrupt */
    NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    /* RTC 唤醒中端配置: Clock Source: RTCDiv_16, Wakeup Time Base: 4s */
    RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);
    RTC_SetWakeUpCounter(0x1FFF);//0x1FFF = 8191; 4s = (8191+1)*(1/(32768/16))

    /* 使能 the Wakeup Interrupt */
    RTC_ITConfig(RTC_IT_WUT, ENABLE);  
}
  • 使能了RTC的定时中断,那么就要编写中断服务子程序,如下:
void RTC_WKUP_IRQHandler(void)
{
  if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
  {
    RTC_ClearITPendingBit(RTC_IT_WUT);
    EXTI_ClearITPendingBit(EXTI_Line20);
  } 
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

低功耗STM32L151+RTC唤醒应用总结

该文档是本人做一个睡眠+RTC唤醒的低功耗项目总结心得,如有出入请指出。   STM32L提供5种低功耗模式:低功耗运行模式、睡眠模式、低功耗睡眠模式、停止模式、待机模式。     待机模式电流最低,...
  • zhufeng88
  • zhufeng88
  • 2017年03月27日 09:35
  • 4056

STM32L151C8周期性从待机模式唤醒(RTC Wakeup Timer)

#include "stm32l1xx.h" #include "system_stm32l1xx.h" #include "OLED.h" #include "delay.h"void RtcWak...
  • wuhuijun165
  • wuhuijun165
  • 2017年03月16日 22:55
  • 2023

STM32L152 RTC 读取时间和日期

  • 2017年01月18日 22:57
  • 9.15MB
  • 下载

stm32 RTC时间

#include "stm32f10x_rtc.h" #include "stm32f10x_bkp.h" #include "stm32f10x_pwr.h" void RTC_Init(vo...
  • zsrmouse
  • zsrmouse
  • 2014年05月10日 10:06
  • 982

关于STM32使用RTC唤醒停止模式的设置

工程中用到低功耗的控制,本来想使用待机模式,后来发现待机后所有IO口为高阻态,这样对于一些IO口控制的外设有些不妥,想过外部上拉一个电阻可是功耗不好控制放弃该方案选用停止模式。停止模式后IO口保持停止...
  • louyangyang91
  • louyangyang91
  • 2016年03月07日 19:06
  • 8812

STM32 RTC设置日期失败(重启后生效)的解决方法

调试STM32F429的RTC时钟时遇到了如下问题: RTC设置日期时会延迟一段时间(几秒)或重启后才生效。 分析过程: 1、分析发现原程序在RTC的WAKEUP中断里读取时间和日期,后关闭此...
  • wenyuexunyin
  • wenyuexunyin
  • 2017年05月08日 00:56
  • 1119

STM32F10x_RTC秒中断

Ⅰ、概述 RTC(Real Time Clock)是实时时钟的意思,它其实和TIM有点类似,也是利用计数的原理,选择RTC时钟源,再进行分频,到达计数的目的。 该文主要讲述关于RTC的秒中断功能,...
  • ybhuangfugui
  • ybhuangfugui
  • 2016年07月17日 23:55
  • 4967

STM32 RTC 库函数 RTC_SetCounter 后一直等待完成

在使用 STM32 系列 MCU 的时候发现,使用库函数 RTC_SetCounter (0);RTC_WaitForLastTask(); 后系统就一直处于等待状态,进入了一个死循环, 通过查资料发...
  • dengchonglin
  • dengchonglin
  • 2011年03月04日 16:46
  • 4679

stm32 利用备份寄存器保存实时时钟数据

在工程中,会出现许多复位或者掉电的情况
  • xiaoleiacm
  • xiaoleiacm
  • 2014年07月25日 11:26
  • 1696

STM32L151内部RTC时钟

STM32L151内部RTC时钟 STM32L151系列CPU内置低功耗RTC日历。RTC时钟源可以是LSE、LSI、HSE。为了降低功耗,预分频器被分成两个预分频器。一个7为的异步预分频器,一...
  • gtkknd
  • gtkknd
  • 2016年08月18日 15:33
  • 3107
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STM32L152 RTC 日历和定时中断使用
举报原因:
原因补充:

(最多只允许输入30个字)