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服务器。这可能需要在特定的网络环境中选择合适的服务器。

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

    关注

    6035

    文章

    44554

    浏览量

    634653
  • RTC
    RTC
    +关注

    关注

    2

    文章

    538

    浏览量

    66466
  • 网络同步器
    +关注

    关注

    0

    文章

    6

    浏览量

    1561
收藏 人收藏

    评论

    相关推荐

    时间同步获取时间

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

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

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

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

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

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

    单片机自学网单片机网络教程
    发表于 03-21 20:33 221次下载

    RTC单片机例程

    飞思卡尔半导体(Freescale Semiconductor)单片机例程。
    发表于 02-18 15:44 2次下载

    STM32单片机RTC模块的分析

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

    单片机定时器中的实时时钟(RTC)注意事项

    实时时钟(RTC)是专用于维持一秒时基的计时器。此外,RTC通常用于在软件或硬件中跟踪时钟时间和日历日期。RTC的许多功能是非常专业的,是维持高精度和非常可靠的操作所必需的。
    的头像 发表于 06-29 09:28 7233次阅读
    <b class='flag-5'>单片机</b>定时器中的实时时钟(<b class='flag-5'>RTC</b>)注意事项

    简析获取单片机代码运行时间的方法资料下载

    电子发烧友网为你提供简析获取单片机代码运行时间的方法资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-24 08:49 12次下载
    简析<b class='flag-5'>获取</b><b class='flag-5'>单片机</b>代码运行<b class='flag-5'>时间</b>的方法资料下载

    华大单片机深度休眠时RTC与LPUART同时工作设置方法

    华大单片机L系列为其超低功耗(LOW POWER)系列单片机,可以做到低功耗为0.5uA以内,唤醒时间4us。其低功耗性能在行业内也是可圈可点。有个别模块可以工作在深度休眠模式中,如RTC
    发表于 10-12 09:14 1595次阅读

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

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

    华大单片机深度休眠时RTC与LPUART同时工作设置方法

    华大单片机L系列为其超低功耗(LOW POWER)系列单片机,可以做到低功耗为0.5uA以内,唤醒时间4us。其低功耗性能在行业内也是可圈可点。有个别模块可以工作在深度休眠模式中,如RTC
    发表于 01-12 18:39 5次下载
    华大<b class='flag-5'>单片机</b>深度休眠时<b class='flag-5'>RTC</b>与LPUART同时工作设置方法

    【解决方案】STM32L系列单片机RTC读取时间,一会儿要走时,一会儿又不走时的解决方案

    单片机STM32L476RG(用的nucleo开发板),调试RTC的过程中遇到了HAL_RTC_GetTime函数读取的时间一会儿走,一会儿不走的问题,如图所示。要等很长一段
    发表于 01-17 09:30 1次下载
    【解决方案】STM32L系列<b class='flag-5'>单片机</b>的<b class='flag-5'>RTC</b>读取<b class='flag-5'>时间</b>,一会儿要走时,一会儿又不走时的解决方案

    实用 | 获取单片机代码运行时间的方法

    单片机编程者需要知道自己的程序需要花费多长时间、while周期是多少、delay延时是否真如函数功能描述那样精确延时。
    发表于 02-08 16:50 0次下载
    实用 | <b class='flag-5'>获取</b><b class='flag-5'>单片机</b>代码运行<b class='flag-5'>时间</b>的方法

    单片机RTC的定义及功能

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

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

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