单片机的RTC获取网络时间

理解网络同步校准RTC的原理需要考虑NTP、SNTP、RTC这三个关键组件的作用和交互。下面详细解释这个过程:

1. NTP(Network Time Protocol):

协议目的:NTP是用于同步计算机和设备时钟的协议。它通过在网络上与时间服务器通信,获取准确的时间信息。

工作原理:NTP使用一种分层的客户端-服务器体系结构。客户端向服务器发起请求,服务器回应包含其本地时间的响应。NTP客户端使用这些响应来调整本地时钟。

2. SNTP(Simple Network Time Protocol):

轻量级版本:为了适应嵌入式系统和资源受限设备,SNTP是NTP的简化版本。它保留了核心的时间同步功能。

工作方式:SNTP客户端通过轮询或监听模式向NTP服务器发送请求。服务器响应包含当前时间。SNTP客户端使用这个时间信息来调整本地时钟。

3. RTC(Real-Time Clock):

硬件设备:RTC是一种硬件设备,通常嵌入在计算机或嵌入式系统中,用于跟踪时间。

时钟漂移:由于RTC的硬件特性,它的时钟可能会产生漂移,即时钟不会完美地保持准确。这就需要定期校准。

4. 示例中的步骤解释:

SNTP初始化:在初始化代码中,配置SNTP模块,包括指定NTP服务器地址和设置SNTP的操作模式。这告诉SNTP模块应该如何获取时间信息。
复制代码
go 复制代码
sntp_setoperatingmode(SNTP_OPMODE_POLL);
sntp_setservername(0, NTP_SERVER);
sntp_init();
SNTP回调函数:注册一个回调函数,该函数在SNTP成功获取到时间时被调用。在这个回调函数中,将获取到的UNIX时间戳转换为RTC的时间格式,并更RTC。
复制代码
php 复制代码
void sntp_callback(struct timeval *tv) {
// Callback function called when SNTP obtains time from the server


    RTC_TimeTypeDef sTime;
    RTC_DateTypeDef sDate;


// Convert UNIX timestamp to RTC structures
    struct tm *timeinfo = localtime((const time_t*)&tv->tv_sec);


    sTime.Hours = timeinfo->tm_hour;
    sTime.Minutes = timeinfo->tm_min;
    sTime.Seconds = timeinfo->tm_sec;


    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


// Update RTC with obtained time
    HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
    HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
}
等待同步:在主循环中,等待SNTP成功获取时间。这确保在主代码开始执行之前,RTC已经校准。
复制代码
javascript 复制代码
while (!sntp_get_sync_status()) 
{
    HAL_Delay(100);
}
主循环:在主循环中,你可以执行其他与应用相关的任务。此时,RTC已经被成功校准。
复制代码
javascript 复制代码
while (1) {
    // Your main code here
}

5. 注意事项:

定期同步:SNTP模块会定期向NTP服务器发起请求,以保持本地时钟的准确性。

NTP服务器选择: 在实际应用中,应该选择可靠性高且准确性好的NTP服务器。这可能需要在特定的网络环境中选择合适的服务器。

==========

往期回顾:

我都不知道的PWM的很偏的问题

一个小细节,精度提供一大截

蓝桥杯物联网教程汇总

最近发生了很多事情,聊聊心里话

IIC面试问题汇总

==========

相关推荐
时代新威powertime38 分钟前
等保三级|安全通信网络自评估指南
网络·安全·等保测评
国服第二切图仔44 分钟前
检测隧道HTTP代理的可用性的几种方法
网络·网络协议·http
JH30731 小时前
引依赖包和对这个包发起rpc调用有什么区别
网络·网络协议·rpc
猪八戒1.01 小时前
onenet接口
开发语言·前端·javascript·嵌入式硬件
d111111111d1 小时前
SPI通信协议--在STM32中介绍(学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习
tan180°1 小时前
Linux网络TCP(上)(11)
linux·网络·c++·后端·tcp/ip
席万里2 小时前
关于Go的init函数执行顺序#黑魔法
开发语言·网络·golang
Evand J2 小时前
【TCN与LSTM例程】TCN(时间卷积网络)与LSTM(长短期记忆)训练单输入单输出,用于拟合一段信号,便于降噪。MATLAB
网络·人工智能·matlab·lstm
电子科技圈2 小时前
IAR与Quintauris携手推进RISC-V汽车实时应用的功能安全软件开发
嵌入式硬件·安全·设计模式·编辑器·汽车·risc-v
橘子真甜~2 小时前
C/C++ Linux网络编程6 - poll解决客户端并发连接问题
服务器·c语言·开发语言·网络·c++·poll