前言:
现在姐妹们对“lpc1768周立功手册”都比较关心,小伙伴们都想要剖析一些“lpc1768周立功手册”的相关内容。那么小编也在网络上网罗了一些关于“lpc1768周立功手册””的相关知识,希望各位老铁们能喜欢,各位老铁们一起来了解一下吧!配置 LPC1768 RTC后,每次重启后获取到随机的时间数值,并不是实际的数值。
问题详细描述:
为了节省成本,没有使用常见的外置 RTC PCF8563之类的,而是使用MCU LPC1768 内置的 RTC来获取日历时间。但是,实际测试了几个不同的板子,每个的时间都不一样,一个是1/2/1018, 第二块板子是 12/11/2036等,并不是实际程序中定义的数值,而且每次上电后都是从这个数值开始计时。
问题具体分析
参考了官方的例子代码 \lpcopen_2_10_lpcxpresso_nxp_lpcxpresso_1769.zip\periph_rtc\example\src
从LPC1769移植到LPC1768上,发现使时间计数寄存器没有配置,配置之后就可以按照设定的时间来计时了。
将程序下载到板子中后,设置的日期和时间每块板子都是一样的了。但是出现了一个新的问题,当重启板子后,RTC时间无法继续,确定目标板上的电池电源是一直供着的,每次都是从程序中设置的初始时间和日期开始执行。这又是为什么?
问题解决方案
RTC将在主电源关闭时会启动备用电池工作,但是会导致POR复位,并且当电源恢复时MCU将立即启动。因此在这个周期中,不应该再次初始化RTC模块,否则它将更改时间计数器寄存器的值。这里,可以在Flash或者GPREG的特定位置中声明一个Flag标志值,程序将根据Flag的值来决定是否初始化RTC模块。
这里以保存到GPREG寄存中为例,在每次上电复位后初始化RTC当然会覆盖其当前的计时值。检测RTC是否初始化的一个解决方案是将一些特征字(如0xAA55AA55)作为标记写入一个电池支持的通用寄存器0到4(GPREG0到GPREG4)。如果复位后该字仍在,则RTC仍处于初始化状态,无需再次设置。如果特征字不在那里,则需要初始化RTC,然后将这个特征字写入GPREGx。
总结和建议
LPC1768深度休眠后唤醒会复位,那么一些关键的参数怎么保存呢?GPREGx 寄存器可以在掉电前保存关键参数,总共只有20个字节大小,其内容不受复位的影响,注意必须电池保持供电状态。
参考文档:
1.
标签: #lpc1768周立功手册