当前位置: 首页 > news >正文

单片机的RTC获取网络时间

03a9c7af8f5428145ca9b35ab4b7d73d.png

理解网络同步校准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模块应该如何获取时间信息。
 
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 serverRTC_TimeTypeDef sTime;RTC_DateTypeDef sDate;// Convert UNIX timestamp to RTC structuresstruct 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-indexedsDate.Date = timeinfo->tm_mday;sDate.Year = timeinfo->tm_year + 1900;  // tm_year is years since 1900// Update RTC with obtained timeHAL_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
}


5. 注意事项:

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

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

==========

往期回顾:

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

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

蓝桥杯物联网教程汇总

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

IIC面试问题汇总

==========

1584b3ed234f64a7782a7645faab840a.png

86406a357199d701b0e872fb14d3ded7.png

d0878de1407ccc1ca4cc7efd86d83739.png

http://www.lryc.cn/news/266340.html

相关文章:

  • Android 13 内置可卸载的搜狗输入法
  • 持续集成交付CICD:GitLabCI 封装Python类 并结合 ArgoCD 完成前端项目应用发布
  • 第十三章 常用类(Math 类、Arrays 类、System类、Biglnteger 和BigDecimal 类、日期类)
  • 2023年12月24日学习总结
  • 第26关 K8s日志收集揭秘:利用Log-pilot收集POD内业务日志文件
  • 芯科科技以卓越的企业发展和杰出的产品创新获得多项殊荣
  • 计算机视觉基础(11)——语义分割和实例分割
  • CNAS中兴新支点——什么是软件压力测试?软件压力测试工具和流程
  • jQuery: 整理3---操作元素的内容
  • 22、商城系统(四):项目jar包配置(重要),网关配置,商品服务基础数据设置
  • 循环链表的学习以及问题汇总
  • C++期末复习总结继承
  • CloudCanal x Debezium 打造实时数据流动新范式
  • Nodejs+Express搭建HTTPS服务
  • 设计模式之-策略模式,快速掌握策略模式,通俗易懂的讲解策略模式以及它的使用场景
  • 【leetcode100-019】【矩阵】螺旋矩阵
  • 【计算机视觉中的多视图几何系列】深入浅出理解针孔相机模型
  • 轻量级Python IDE使用(三)——函数
  • 计算机图形学理论(3):着色器编程
  • ubuntu20.04安装timeshift最新方法
  • 小狐狸ChatGPT付费创作系统小程序端开发工具提示打开显示无法打开页面解决办法
  • DQL-基本查询
  • 漏洞复现-红帆OA iorepsavexml.aspx文件上传漏洞(附漏洞检测脚本)
  • Leetcode 2976. Minimum Cost to Convert String I
  • ZKP Mathematical Building Blocks (2)
  • blender径向渐变材质-着色编辑器
  • 2023美团机器人研究院学术年会成功举办
  • swing快速入门(二十七)
  • Vue 封装echarts柱状图(Bar)组件
  • 异常(Java)