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的時間函數測試分析就此結束。
