请问stm32L152芯片怎么使用RTC制作万年历

2019-07-14 13:12发布

大家好,小弟在这里有个疑问,看了正点原子FI的RTC实时时钟试验后,想自己写一个STM32L152的实时时钟(万年历),但不知道如何配置,网上的资源大都是用Cube来写的,但小弟我想不用Cube来写。求大神们指点一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
jsgssg
2019-07-16 15:20
TOPCB 发表于 2019-4-19 14:49
楼主,你看的是103的例程吧。L152是不一样的。

恩恩。版主。我是想按照F103的例程写一个L152的万年历。现在就是在配置上还有写中断服务函数上卡壳了,不知道用什么来代替F103的秒中断和RTC-Setcounter()函数。因为在L152里面没找到秒中断标志位和溢出中断的标志位。代码如下:

void RTC_IRQHandler(void)
{                 
        if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
        {                                                       
                RTC_Get();//¸üÐÂʱ¼ä   
        }
        if(RTC_GetITStatus(RTC_IT_ALRA)!= RESET)
        {
                RTC_ClearITPendingBit(RTC_IT_ALRA);                                    
          }                                                                                                    
        RTC_ClearITPendingBit(RTC_IT_SEC|RTC_IT_OW);               
}

然后看了资料有人这么写的。

   //配置自动定时功能
    /* 中断配置 *******************************************************/
    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);
  }
}

但我不懂下面的那种写法中为什么还要给唤醒时钟进行分频,这样用能不能实现跟F103一样的效果。
版主  你写的代码是用cube写的吗?

一周热门 更多>