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);
  } 
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

STM32L152 外部中断配置

STM32L152 中断配置1、中断配置以外部中断0,管脚为PA0为例来进行配置 void SYS_EXTI0Init(void) { GPIO_InitTypeDef GPIO...

STM32L152 CC1101 中断接收

  • 2014-10-22 14:48
  • 593KB
  • 下载

STM32L中的系统时间——硬件RTC的使用

鼓捣了将近一天。。。 因为之前用过STM32F103芯片,而这次是STM32L151,这个L系列和F系列的RTC使用方式不同。废话少说,上代码: RTC初始化: //硬件RTC时钟初始化 void R...

STM32L PC13当IO口使用驱动LED,PC14,PC15外接晶振,且RTC正常...

原因:图一,画PCB时,因为看到PC13离LED比较近,就用PC13来驱动LED,查看手册后,也没说不能驱动LED,所以硬件是可以的。但是在调试软件时发现时钟点亮不了LED,然后在网上找资料,但都是S...

stm32f103 rtc 获取 日历 时钟

STM32的RTC实现日历功能程序发布时间:2011-09-30 14:53:05   STM32的RTC只有一个32位的计数器用来计时,没有寄存器来存年月日时分秒等。通过设置可以让这个计数器...

uCOS-II 2.92 for STM32L152

  • 2013-09-24 21:26
  • 995KB
  • 下载

STM32L152_UCOS

  • 2017-04-19 15:29
  • 3.10MB
  • 下载

使用STM32的systick定时器中断实现RTC工作过程出错

开发环境:keil MDK V5.10 操作系统:windows 7(32位) 目标硬件:STM32F10

STM32L152 USB hid测试代码

  • 2014-11-21 11:05
  • 814KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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