1、首先配置LWIP支持SNTP

然后在opt.h中增加一个timeout->LWIP_SNTP

防止出现类似

Assertion "sys_timeout: timeout != NULL, pool MEMP_SYS_TIMEOUT is empty" failed at line 190 in ../Middlewares/Third_Party/LwIP/src/core/timeouts.c

这样的错误。

/*** The number of sys timeouts used by the core stack (not apps)* The default number of timeouts is calculated here for all enabled modules.*/
#define LWIP_NUM_SYS_TIMEOUT_INTERNAL   (LWIP_TCP + LWIP_SNTP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_NUM_TIMEOUTS + (LWIP_IPV6 * (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD)))

在使用sntp之前,需要对其进行初始化,初始化放在lwip初始化之后就行了。

void set_sntp_server_list(void)
{uint32_t server_list[SNTP_MAX_SERVERS] = {0x9f64a8c0}, // 我本地windows创建的NTP服务器,192.168.100.159ip_addr_t sntp_server;// 本身支持多个服务器,我们这里SNTP_MAX_SERVERS = 1                              for(int i = 0; i < SNTP_MAX_SERVERS; i++){sntp_server.addr = server_list[i];sntp_setserver(i, &sntp_server);}
}void dev_sntp_init(void)
{sntp_setoperatingmode(SNTP_OPMODE_POLL);sntp_init();set_sntp_server_list();
}

2、在使用LWIP进行嵌入式程序开发时,实现秒级的时间校准,只需要重新定义SNTP_SET_SYSTEM_TIME(sec)这个函数就可以了。

#define SNTP_SET_SYSTEM_TIME     sntp_set_timevoid sntp_set_time(time_t sntp_time)
{if(sntp_time == 0){return;}struct tm *time;sntp_time += (8*3600); // 时区time = localtime(&sntp_time);printf("%d:%d:%d\r\n", time->tm_hour,time->tm_min,time->tm_sec);printf("%d:%d:%d\r\n", time->tm_year+1900,time->tm_mon+1,time->tm_mday);
}

3、参考sntp_otp.h中的介绍:

/** SNTP macro to change system time in seconds
 * Define SNTP_SET_SYSTEM_TIME_US(sec, us) to set the time in microseconds
 * instead of this one if you need the additional precision. Alternatively,
 * define SNTP_SET_SYSTEM_TIME_NTP(sec, frac) in order to work with native
 * NTP timestamps instead.
 */

只需要重新实现SNTP_SET_SYSTEM_TIME_US(sec, us)这个函数就可以了。

#define SNTP_SET_SYSTEM_TIME_US     sntp_set_timeusvoid sntp_set_timeus(time_t sntp_time, int us)
{if(sntp_time == 0){return;}struct tm *time;sntp_time += (8 * 3600); // 时区time = localtime(&sntp_time);printf("%d:%d:%d.%d\r\n", time->tm_hour,time->tm_min,time->tm_sec, us);printf("%d:%d:%d\r\n", time->tm_year+1900,time->tm_mon+1,time->tm_mday);
}

STM32 LWIP SNTP实现毫秒级的时间校准相关推荐

  1. stm32实现Systick的毫秒级延时和微妙级延时

    学习目标: stm32实现Systick的毫秒级延时和微妙级延时 学习内容: 1.Systick 工作原理 Systick(系统定时器)是ARM Cortex M3/M4 内核的一个外设,因为所有的C ...

  2. c++ linux 获取毫秒_Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间

    使用Linux的gettimeofday函数可以达到获取精确到毫秒级的时间,其中t1=t_start.tv_sec是公元1970年至今的时间(换算为秒),t2=t_start.tv_usec是当 前秒 ...

  3. c++ linux 获取毫秒_Linux c++获取本地毫秒级精确时间

    时间函数介绍 Linux c/c++中提供了很多操作时间的库函数,这里简要介绍. 使用头文件 #include 常用的时间函数包括以下: time 原型:time_t time(time_t *t); ...

  4. 毫秒级的时间处理上G的图片(生成缩略图)

    测试环境: 测试图片(30M): 测试计时方法: Stopwatch sw1 = newStopwatch(); sw1.Start();//TODO...... sw1.Stop();string ...

  5. 【嵌入式实战】STM32+Lwip 实现 SNTP 网络授时(超详细)

    文章目录 原创声明 前言 一.SNTP 是什么? 二.Cube 快速配置 2.1 STM32 ETH 设置 2.2 修改 PHY 地址 2.3 LWIP SNTP 配置 2.4 开启 STM32 RT ...

  6. mysql添加毫秒级时间

    mysql添加毫秒级时间 需求描述: mysql插入数据默认时间只到秒,如果同时插入多条数据,order by 排序,顺序有可能错乱 解决方法: 将数据插入时间粒度增加到纳秒,区分入库先后,从而达到排 ...

  7. Qt 打印时间 毫秒级

    Qt---打印系统时间,毫秒级 //获取当前时间 QDateTime current_date_time = QDateTime::currentDateTime(); QString current ...

  8. mysql 毫秒比较_MYSQL的毫秒级时间比较问题

    一般来说,MYSQL使用时间比较一般是转换成时间格式来比较,如: DATE_FORMAT('年-月-日 时:分:秒','%Y-%m-%d %h:%i:%s') select DATE_FORMAT(' ...

  9. Python表示不甘心,汤姆大叔送书,Python抢书之毫秒级跟进--获取服务器时间

    @鲜宏大牛果断使用js将抢书的误差提高到毫秒级, wid表示真心的很佩服鲜宏大牛! wid的水平虽说不怎么样, 但内心说, wid也想尝试着将抢书的误差提高到毫秒级, 思考了一会, 还真有思路了! 现 ...

最新文章

  1. Geomagic Freeform Plus 2019中文版
  2. 每日程序C语言14-小球反弹高度问题
  3. C# Stream 和 byte[] 之间的转换(文件流的应用)
  4. 如何在 jetbrick-template 中使用 debug函数?
  5. linux expr格式,计算2-expr命令举例
  6. Linux 文件基本属性以及操作技巧
  7. 湖南工大11级C语言网上作业,湖南工大11级C语言网上作业之《最简单的程序设计》.docx...
  8. 消息称谷歌Pixel系列手机默认禁用美颜功能
  9. 消息队列一直建立tcp连接_云架构那些事儿:为什么我的TCP连接建立异常?
  10. SVN MKACTIVITY
  11. ASP.NET 2.0中的页面输出缓存
  12. 乐谱管理软件SheetAble
  13. 锐捷(四)交换机虚拟化(VSU)+双主机检测(BFD)的配置
  14. autojs之语音识别
  15. Notification使用举例
  16. FAST迅捷路由器设置
  17. 浅谈Go 语言之 go-app
  18. scanf可以输入负数吗_在excel表格中输入负数应该怎样输
  19. srs linux开机启动,SRS之安装与使用
  20. 移远BC35-G模组通过LWM2M协议接入OneNet教程

热门文章

  1. Appium-Send SMS(发送短信)
  2. 解决Could not write metadata for '/RemoteSystemsTempFiles'. D:\workspace\.metadata\.plugins\org.eclips
  3. Python手机抓包案例,用Charles捕获【春雨医生】接口数据
  4. 下载网页中的视频(测例:企业微信直播回放下载)
  5. php文件上传七牛云,PHP 文件上传七牛云
  6. 疫情过后适合做什么生意?
  7. RapidJSON 介绍
  8. 问懵了....美团一面索命44问,过了就60W+
  9. Orchard core 新建项目
  10. 计算机毕业设计javaweb活动报名系统源码