0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机的RTC获取网络时间

撞上电子 2023-12-23 08:00 次阅读

理解网络同步校准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 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已经校准。

while (!sntp_get_sync_status()) { HAL_Delay(100);}

主循环:在主循环中,你可以执行其他与应用相关的任务。此时,RTC已经被成功校准。

while (1) { // Your main code here}


5. 注意事项:

定期同步:SNTP模块会定期向NTP服务器发起请求,以保持本地时钟的准确性。NTP服务器选择: 在实际应用中,应该选择可靠性高且准确性好的NTP服务器。这可能需要在特定的网络环境中选择合适的服务器。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620838
  • RTC
    RTC
    +关注

    关注

    2

    文章

    484

    浏览量

    65439
  • 网络同步器
    +关注

    关注

    0

    文章

    3

    浏览量

    1525
收藏 人收藏

    评论

    相关推荐

    时间同步获取时间

    新手一枚,对单片机原理还不是很清楚,求教:TinyOS中的时间同步首先要获取本地时间戳,getStartTime(),想知道它是怎么获取
    发表于 03-20 10:37

    51单片机怎么控制GSM模块获取实时时间

    哪位大神会用51单片机怎么控制GSM模块获取实时时间,并通过1602显示出时间
    发表于 05-27 18:07

    单片机自学网单片机网络教程

    单片机自学网单片机网络教程
    发表于 10-28 22:21

    GPRS模块怎么获取网络时间

    手册上说在哟网络支持的情况下,用【AT+CLTS=1】可以获取网络时间,用【AT+CCLK?】可以显示当前时间,但是我的
    发表于 04-24 05:43

    labview获取不到单片机的数据

    大佬们,我用labview做了一个采集温度系统,单片机和电脑连接后,labview获取不到单片机的数据,波特率是正确的,怎么进行正确的串口通信呢,请大佬们指教
    发表于 07-01 10:53

    如何对stm8l05x单片机rtc进行初始呢

    关于stm8l05x系列单片机rtc初始化问题在开始项目时,用到的单片机是stm8l052的单片机,为了降低功耗就要在活跃停止模式和正常运行模式之间切换,即每隔一段
    发表于 12-09 06:28

    STM32L单片机RTC读取时间,一会儿要走时一会儿又不走时怎么解决?

    单片机STM32L476RG(用的nucleo开发板),调试RTC的过程中遇到了HAL_RTC_GetTime函数读取的时间一会儿走,一会儿不走的问题,如图所示。要等很长一段
    发表于 01-17 07:24

    如何利用WIFI模块获取NTP服务器中的网络时间

    There are different ways to be brave.勇敢有不同种方式。一、需求在单片机上实现RTC的驱动,利用WIFI模块获取NTP服务器中的网络
    发表于 01-21 07:32

    Labview获取网络时间

    Labview获取网络时间
    发表于 02-28 18:28

    怎样去获取并设置ARM的RTC时间

    简单RTC应用,获取RTC时间,以及设置时间void RTC_Ctrl_Set(U8 enabl
    发表于 05-17 09:29

    NK-980IOT开发板测评之NTP网络时间同步至RTC

    前言有幸评测了NK-980IOT开发板的RTC功能,当时只是测试了RTC离线的使用,时间上会有累积误差。既然开发板有联网功能,那就可以NTP获取网络
    发表于 07-11 10:34

    STM32单片机RTC模块的分析

    今天给大家介绍一下 STM32 单片机RTC 模块和它的后备区域寄存器,我们在使用 51 单片机的时候,如果需要用到 RTC 实时时钟,通常会使用一颗外置的
    发表于 11-11 15:51 36次下载

    关于stm8l05x系列单片机rtc初始化问题

    关于stm8l05x系列单片机rtc初始化问题在开始项目时,用到的单片机是stm8l052的单片机,为了降低功耗就要在活跃停止模式和正常运行模式之间切换,即每隔一段
    发表于 11-26 14:36 10次下载
    关于stm8l05x系列<b class='flag-5'>单片机</b><b class='flag-5'>rtc</b>初始化问题

    单片机RTC的定义及功能

    你是否听说过rtc,但是不知道rtc是什么。其实rtc就在我们身边,周围的电子产品中或许都安装了rtc,它可以提供时间
    的头像 发表于 08-15 11:48 7672次阅读

    基于STM32单片机RTC实时时钟使用库文件设计

    基于STM32单片机RTC实时时钟使用库文件设计源代码
    发表于 04-26 14:28 2次下载