STM32 LWIP SNTP实现毫秒级的时间校准
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实现毫秒级的时间校准相关推荐
- stm32实现Systick的毫秒级延时和微妙级延时
学习目标: stm32实现Systick的毫秒级延时和微妙级延时 学习内容: 1.Systick 工作原理 Systick(系统定时器)是ARM Cortex M3/M4 内核的一个外设,因为所有的C ...
- c++ linux 获取毫秒_Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
使用Linux的gettimeofday函数可以达到获取精确到毫秒级的时间,其中t1=t_start.tv_sec是公元1970年至今的时间(换算为秒),t2=t_start.tv_usec是当 前秒 ...
- c++ linux 获取毫秒_Linux c++获取本地毫秒级精确时间
时间函数介绍 Linux c/c++中提供了很多操作时间的库函数,这里简要介绍. 使用头文件 #include 常用的时间函数包括以下: time 原型:time_t time(time_t *t); ...
- 毫秒级的时间处理上G的图片(生成缩略图)
测试环境: 测试图片(30M): 测试计时方法: Stopwatch sw1 = newStopwatch(); sw1.Start();//TODO...... sw1.Stop();string ...
- 【嵌入式实战】STM32+Lwip 实现 SNTP 网络授时(超详细)
文章目录 原创声明 前言 一.SNTP 是什么? 二.Cube 快速配置 2.1 STM32 ETH 设置 2.2 修改 PHY 地址 2.3 LWIP SNTP 配置 2.4 开启 STM32 RT ...
- mysql添加毫秒级时间
mysql添加毫秒级时间 需求描述: mysql插入数据默认时间只到秒,如果同时插入多条数据,order by 排序,顺序有可能错乱 解决方法: 将数据插入时间粒度增加到纳秒,区分入库先后,从而达到排 ...
- Qt 打印时间 毫秒级
Qt---打印系统时间,毫秒级 //获取当前时间 QDateTime current_date_time = QDateTime::currentDateTime(); QString current ...
- mysql 毫秒比较_MYSQL的毫秒级时间比较问题
一般来说,MYSQL使用时间比较一般是转换成时间格式来比较,如: DATE_FORMAT('年-月-日 时:分:秒','%Y-%m-%d %h:%i:%s') select DATE_FORMAT(' ...
- Python表示不甘心,汤姆大叔送书,Python抢书之毫秒级跟进--获取服务器时间
@鲜宏大牛果断使用js将抢书的误差提高到毫秒级, wid表示真心的很佩服鲜宏大牛! wid的水平虽说不怎么样, 但内心说, wid也想尝试着将抢书的误差提高到毫秒级, 思考了一会, 还真有思路了! 现 ...
最新文章
- Geomagic Freeform Plus 2019中文版
- 每日程序C语言14-小球反弹高度问题
- C# Stream 和 byte[] 之间的转换(文件流的应用)
- 如何在 jetbrick-template 中使用 debug函数?
- linux expr格式,计算2-expr命令举例
- Linux 文件基本属性以及操作技巧
- 湖南工大11级C语言网上作业,湖南工大11级C语言网上作业之《最简单的程序设计》.docx...
- 消息称谷歌Pixel系列手机默认禁用美颜功能
- 消息队列一直建立tcp连接_云架构那些事儿:为什么我的TCP连接建立异常?
- SVN MKACTIVITY
- ASP.NET 2.0中的页面输出缓存
- 乐谱管理软件SheetAble
- 锐捷(四)交换机虚拟化(VSU)+双主机检测(BFD)的配置
- autojs之语音识别
- Notification使用举例
- FAST迅捷路由器设置
- 浅谈Go 语言之 go-app
- scanf可以输入负数吗_在excel表格中输入负数应该怎样输
- srs linux开机启动,SRS之安装与使用
- 移远BC35-G模组通过LWM2M协议接入OneNet教程
热门文章
- Appium-Send SMS(发送短信)
- 解决Could not write metadata for '/RemoteSystemsTempFiles'. D:\workspace\.metadata\.plugins\org.eclips
- Python手机抓包案例,用Charles捕获【春雨医生】接口数据
- 下载网页中的视频(测例:企业微信直播回放下载)
- php文件上传七牛云,PHP 文件上传七牛云
- 疫情过后适合做什么生意?
- RapidJSON 介绍
- 问懵了....美团一面索命44问,过了就60W+
- Orchard core 新建项目
- 计算机毕业设计javaweb活动报名系统源码