打印
[技术问答]

NANO103单片机 RTC问题

[复制链接]
1256|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kelly1989|  楼主 | 2017-12-20 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近使用NANO103系列单片机的RTC功能,使用官方提供的例程,VBAT使用电池供电,供电电压3V,发现断电之后,再次上电RTC时钟被复位了,求大神帮助
沙发
598330983| | 2017-12-20 16:45 | 只看该作者
IO 管脚状态备用选择
当低速32 kHz晶振被禁用,X32KO (PF.6)可以用作GPIO。用户可以通过设置CTLSEL来决
定X32KO (PF.6) I/O功能是由系统电源域 GPIO模块控制还是由VBAT 电源域RTC_LXTOCTL
控制。
0 = X32KO (PF.6) 管脚I/O功能由GPIO 模块控制。 当系统电源关闭时,CTLSEL会被硬件
置1.
1 = X32KO (PF.6)管脚I/O功能由VBAT电源域控制。在CTLSEL 设置为1后,X32KO (PF.6)
管脚功能和I/O状态分别由OPMODE[1:0] 和 DOUT控制。
注:当系统电源关闭并且RTC激活状态为1,CTLSEL 位会被硬件置1

使用特权

评论回复
板凳
598330983| | 2017-12-20 16:45 | 只看该作者
应该是有什么地方需要配置,看到手册也提到说这个电池供电接口需要配置。启动。

使用特权

评论回复
地板
598330983| | 2017-12-20 16:48 | 只看该作者
IO 管脚状态备用选择
当低速32 kHz晶振被禁用,X32KO (PF.6)可以用作GPIO。用户可以通过设置CTLSEL来决
定X32KO (PF.6) I/O功能是由系统电源域 GPIO模块控制还是由VBAT 电源域RTC_LXTOCTL
控制。
0 = X32KO (PF.6) 管脚I/O功能由GPIO 模块控制。 当系统电源关闭时,CTLSEL会被硬件
置1.
1 = X32KO (PF.6)管脚I/O功能由VBAT电源域控制。在CTLSEL 设置为1后,X32KO (PF.6)
管脚功能和I/O状态分别由OPMODE[1:0] 和 DOUT控制。
注:当系统电源关闭并且RTC激活状态为1,CTLSEL 位会被硬件置1

使用特权

评论回复
5
kelly1989|  楼主 | 2017-12-20 17:21 | 只看该作者
598330983 发表于 2017-12-20 16:48
IO 管脚状态备用选择
当低速32 kHz晶振被禁用,X32KO (PF.6)可以用作GPIO。用户可以通过设置CTLSEL来决
定X ...

这个寄存器,我设置过,但是没有用

使用特权

评论回复
6
643757107| | 2017-12-21 10:16 | 只看该作者
我觉得上电后,应该是系统被复位了,然后重新初始化了这个RTC,你看看有没有,如果有,不要这样,不要设置初始化。

使用特权

评论回复
7
kelly1989|  楼主 | 2017-12-21 10:49 | 只看该作者
643757107 发表于 2017-12-21 10:16
我觉得上电后,应该是系统被复位了,然后重新初始化了这个RTC,你看看有没有,如果有,不要这样,不要设置 ...

S_RTC_TIME_DATA_T sInitTime;

    /* Time Setting */
    sInitTime.u32Year       = 2017; // Set Year
    sInitTime.u32Month      = 12;   // Set Month
    sInitTime.u32Day        = 21;   // Set Day
    sInitTime.u32Hour       = 8;   // Set Hour
    sInitTime.u32Minute     = 38;   // Set Minute
    sInitTime.u32Second     = 0;    // Set Second
    sInitTime.u32DayOfWeek  = RTC_TUESDAY; // Set Day of Week
    sInitTime.u32TimeScale  = RTC_CLOCK_24; // Set Time scale 12 or 24 hr

//        RTC_Open(&sInitTime); // start RTC and set initial time

//            if(RTC->INIT != 0x1) {
//        RTC->INIT = RTC_INIT_KEY;

//        while(RTC->INIT != 0x1);
//    }
       
        RTC_RWEN1();
        printf("%x\r\n",RTC->SPR[0]);
        RTC_RWEN1();
        RTC->SPRCTL |= 0X01 << 2;
//        RTC_RWEN1();
//        RTC->SPR[0] = 0XAA;
       
    /* Set Tick Period */
    RTC_SetTickPeriod(RTC_TICK_1_SEC);
    /* Enable RTC Tick Interrupt */
    RTC_EnableInt(RTC_INTEN_TICKIEN_Msk);
    NVIC_EnableIRQ(RTC_IRQn);
这是我的初始化程序,设置完成之后,程序都被我注释掉了

使用特权

评论回复
8
wahahaheihei| | 2017-12-21 13:39 | 只看该作者
初始化设置的应该是通过按键触发才执行,其他情况下,或者开机上电后一条都不应该有。

使用特权

评论回复
9
kelly1989|  楼主 | 2017-12-21 15:52 | 只看该作者
wahahaheihei 发表于 2017-12-21 13:39
初始化设置的应该是通过按键触发才执行,其他情况下,或者开机上电后一条都不应该有。 ...

程序没问题,在开发板上可以的,不过开发板用的是NANO103的64脚单片机,我们用的是32脚的

使用特权

评论回复
10
wahahaheihei| | 2017-12-21 16:17 | 只看该作者
kelly1989 发表于 2017-12-21 15:52
程序没问题,在开发板上可以的,不过开发板用的是NANO103的64脚单片机,我们用的是32脚的 ...

那就不清楚了,等你研究出来分享分享啊,没用过32PIN封装的呢。

使用特权

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

本版积分规则

50

主题

1113

帖子

3

粉丝