打印
[STM8]

关于stml152C6T6的RTC功能

[复制链接]
1091|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
尛舞icc|  楼主 | 2017-6-10 16:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 尛舞icc 于 2017-6-12 10:04 编辑

开启RTC后,只有秒钟在走,分钟不走这是什么情况?
大家有没遇到,秒钟能走,分钟不会变,时钟也不变。



沙发
gejigeji521| | 2017-6-10 20:36 | 只看该作者
 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);  


使用特权

评论回复
板凳
gejigeji521| | 2017-6-10 20:36 | 只看该作者
void RTC_WKUP_IRQHandler(void)
{
  if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
  {
    RTC_ClearITPendingBit(RTC_IT_WUT);
    EXTI_ClearITPendingBit(EXTI_Line20);
  }
}

使用特权

评论回复
地板
捉虫天师| | 2017-6-11 18:22 | 只看该作者
这个L1的cube里面有例子吧

使用特权

评论回复
5
尛舞icc|  楼主 | 2017-6-12 07:04 | 只看该作者
捉虫天师 发表于 2017-6-11 18:22
这个L1的cube里面有例子吧

链接有么,发我个

使用特权

评论回复
6
尛舞icc|  楼主 | 2017-6-12 07:04 | 只看该作者

你这个是库函数的    配置不一样

使用特权

评论回复
7
123782568| | 2017-6-12 08:44 | 只看该作者
尛舞icc 发表于 2017-6-12 07:04
你这个是库函数的    配置不一样

楼上的兄弟应该是cube生成的。你用cube生成试下,很好用的 。

使用特权

评论回复
8
123782568| | 2017-6-12 08:49 | 只看该作者
尛舞icc 发表于 2017-6-12 07:04
你这个是库函数的    配置不一样

我用cubemx生成之后,在读rtc的时候一定要先读时间,再读日期,才能不出错,而且两个一定要都读。你先在你现有的代码上试下,先都时间,再读日期。不行的话用cube生成一个,肯定没问题

使用特权

评论回复
9
尛舞icc|  楼主 | 2017-6-12 10:02 | 只看该作者
123782568 发表于 2017-6-12 08:49
我用cubemx生成之后,在读rtc的时候一定要先读时间,再读日期,才能不出错,而且两个一定要都读。你先在 ...

感谢  已经解决了

使用特权

评论回复
10
123782568| | 2017-6-12 11:43 | 只看该作者
尛舞icc 发表于 2017-6-12 10:02
感谢  已经解决了

怎么解决的 ?共享下,以后有朋友在有问题可以直接查到

使用特权

评论回复
11
尛舞icc|  楼主 | 2017-6-13 16:48 | 只看该作者
123782568 发表于 2017-6-12 11:43
怎么解决的 ?共享下,以后有朋友在有问题可以直接查到

RTC的数据 每个都要读出来  而且要按顺序读     我前面只读了自己需要的 就出现那个问题了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

230

帖子

2

粉丝