tlkuhkpmijm6401879155.png
) c+ u; v0 J* R S$ \$ \
3 J+ x! N9 t1 Q理解网络同步校准RTC的原理需要考虑NTP、SNTP、RTC这三个关键组件的作用和交互。下面详细解释这个过程:$ a. e; b) ~' C: S+ w, n
1. NTP(Network Time Protocol):协议目的:NTP是用于同步计算机和设备时钟的协议。它通过在网络上与时间服务器通信,获取准确的时间信息。工作原理:NTP使用一种分层的客户端-服务器体系结构。客户端向服务器发起请求,服务器回应包含其本地时间的响应。NTP客户端使用这些响应来调整本地时钟。
2 @. m4 K0 k' f( }2. SNTP(Simple Network Time Protocol):轻量级版本:为了适应嵌入式系统和资源受限设备,SNTP是NTP的简化版本。它保留了核心的时间同步功能。工作方式:SNTP客户端通过轮询或监听模式向NTP服务器发送请求。服务器响应包含当前时间。SNTP客户端使用这个时间信息来调整本地时钟。" T0 U2 w! D/ `
3. RTC(Real-Time Clock):硬件设备:RTC是一种硬件设备,通常嵌入在计算机或嵌入式系统中,用于跟踪时间。时钟漂移:由于RTC的硬件特性,它的时钟可能会产生漂移,即时钟不会完美地保持准确。这就需要定期校准。
( Q4 f( `+ h2 U3 O s6 Y3 U5 c4. 示例中的步骤解释:SNTP初始化:在初始化代码中,配置SNTP模块,包括指定NTP服务器地址和设置SNTP的操作模式。这告诉SNTP模块应该如何获取时间信息。sntp_setoperatingmode(SNTP_OPMODE_POLL);sntp_setservername(0, NTP_SERVER);sntp_init();SNTP回调函数:注册一个回调函数,该函数在SNTP成功获取到时间时被调用。在这个回调函数中,将获取到的UNIX时间戳转换为RTC的时间格式,并更RTC。void sntp_callback(struct timeval *tv) {// Callback function called when SNTP obtains time from the server& v% R: {5 F A8 h" i: N+ ~2 ^- H
RTC_TimeTypeDef sTime; RTC_DateTypeDef sDate;
. ~- Q: h8 f8 [- W7 Q9 `// Convert UNIX timestamp to RTC structures struct tm *timeinfo = localtime((const time_t*)&tv->tv_sec);1 n7 f7 m- X) p1 E* `! O1 v7 l" J
sTime.Hours = timeinfo->tm_hour; sTime.Minutes = timeinfo->tm_min; sTime.Seconds = timeinfo->tm_sec;4 [" [6 |9 `* j- c6 ]/ u
sDate.WeekDay = timeinfo->tm_wday; sDate.Month = timeinfo->tm_mon + 1; // tm_mon is 0-indexed sDate.Date = timeinfo->tm_mday; sDate.Year = timeinfo->tm_year + 1900; // tm_year is years since 1900' C" M3 E4 H8 j& k3 n3 @5 l, Y# I- I
// Update RTC with obtained time HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN); HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN);}等待同步:在主循环中,等待SNTP成功获取时间。这确保在主代码开始执行之前,RTC已经校准。while (!sntp_get_sync_status()) { HAL_Delay(100);}主循环:在主循环中,你可以执行其他与应用相关的任务。此时,RTC已经被成功校准。while (1) { // Your main code here}. L T# N5 `7 H3 I
5. 注意事项:定期同步:SNTP模块会定期向NTP服务器发起请求,以保持本地时钟的准确性。NTP服务器选择: 在实际应用中,应该选择可靠性高且准确性好的NTP服务器。这可能需要在特定的网络环境中选择合适的服务器。==========
: \2 [4 u% g8 `. ]往期回顾:
' V. F. e7 x" J( L$ e我都不知道的PWM的很偏的问题0 X# {$ [( h! ~4 L
一个小细节,精度提供一大截
, r) \( ~: N. z7 ?% Q; T蓝桥杯物联网教程汇总
! X- P. [% y5 p+ B! c' ^最近发生了很多事情,聊聊心里话9 S7 o# Z- w$ r7 K
IIC面试问题汇总: _; p9 d; U( U/ a' u* H& c# {. D
==========( u' F( _8 f. a7 ^8 [0 J
vdwbxtmn0xm6401879255.png
) v, {* o# }0 L; J8 P4 x
8 ~+ K( O0 R+ n( c( B
uc1deuj3dz56401879356.png
! ?1 e& q) w8 E4 f8 E& T& G M0 J+ u, @3 w- f5 |3 J
1i1zcq0dk3t6401879456.png
|