http://home.eeworld.com.cn/home.php?mod=space&uid=361439&do=blog&id=334813
ESP8266的RTC时间和系统时间测试对比
官方有关时间的
API
主要有两个
system_get_time
功能
:
查询系统时间,单位:微秒
函数定义
:
uint32 system_get_time(void)
参数
:
⽆无
返回
:
系统时间,单位:微秒。
system_get_rtc_time
功能
:
查询
RTC
时间,单位:
RTC
时钟周期
⽰示例
:
例如
system_get_rtc_time
返回
10 (
表⽰示
10
个
RTC
周期
),
system_rtc_clock_cali_proc
返回
5.75 (
表⽰示
1
个
RTC
周期为
5.75
微秒
),
则实际时间为
10 x 5.75 = 57.5
微秒。
注意
:
system_restart
时,系统时间归零,但是
RTC
时间仍然继续。但是如果外部硬件通过
EXT_RST
脚或者
CHIP_EN
脚,将芯⽚片复位后(包括
deep-sleep
定时唤醒的情况),
RTC
时钟会复位。具
体如下:
• 外部复位(
EXT_RST
)
: RTC memory
不变,
RTC timer
寄存器从零计数
•
watchdog reset : RTC memory
不变,
RTC timer
寄存器不变
•
system_restart : RTC memory
不变,
RTC timer
寄存器不变
• 电源上电
: RTC memory
随机值,
RTC timer
寄存器从零计数
•
CHIP_EN
复位
: RTC memory
随机值,
RTC timer
寄存器从零计数
函数定义
:
uint32 system_get_rtc_time(void)
参数
:
⽆无
返回
:
RTC
时间
system_rtc_clock_cali_proc
功能
:
查询
RTC
时钟周期
.
注意:
RTC
时钟周期含有⼩小数部分。
RTC
时钟周期会随温度或电源电压变化发⽣生偏移,因此
RTC
时钟适⽤用于在精度可接受的范围内进⾏行计
时,建议最多每分钟调⽤用⼀一次即可。
函数定义
:
uint32 system_rtc_clock_cali_proc(void)
参数
:
⽆无
返回
:
RTC
时钟周期,单位:微秒,
bit11 ~ bit0
为⼩小数部分
⽰示例
:
os_printf(
“
clk cal : %d \r\n
”
,system_rtc_clock_cali_proc()>>12);
上面两个都可以实现计算时间的功能,主要区别是
system_get_time(void)
时间只要出现系统重启就会重新计时,但是
system_get_rtc_time
只有不掉电就不会出现计时丢失
,
所以如果我们需要实现一个时钟功能,肯定是选择system_get_rtc_time
函数来实现。对于这两个函数的区别可以看下图片就一目了然:


从上面图片我们看出来系统时间计时和
RTC
计时都差不多,相差不大,
system_rtc_clock_cali_proc
也确实如官方
API
所说的
RTC
时钟周期会随温度或电源电压变化发⽣生偏移,所以也仅仅只有用做不是精确计时,如果需要精确计时还是需要外部
RTC
芯片。还有电源重启后之前
RTC
的数值是会丢失的

和
API
所说的电源上电
: RTC memory
随机值,
RTC timer
寄存器从零计数是一致的,有关ESP8266的时间函数测试分析就此结束。