0

我正在尝试使用 LWIP 和使用 STM32Cube 的 Nucleo-F429ZI 开发板上的 SNTP 应用程序读取时间,LWIP 的文档列出了初始化方法等,但没有提供您实际读取时间的方式。我猜有些东西在后台的线程上运行,但是没有阅读和理解 LWIP 堆栈,这超出了我的范围。

关于如何简单地读取时间的任何指示?然后我可以简单地将它存储到 RTC 中,每天一次。

4

1 回答 1

2

LwIP SNTP 应用程序通过定期从服务器获取时间并将其保存到用户提供的系统时间(在您的情况下为 RTC)来工作。

1.为此,您首先需要向 SNTP 应用程序提供您自己的函数来设置 RTC 时间,这可以在 sntp.c 中像下面这样完成:

.
.
#include "your_rtc_driver.h"
.
.
/* Provide your function declaration */
static void sntp_set_system_time_us(u32_t t, u32_t us);
.
.
/* This is the macro that will be used by the SNTP app to set the time every time it contacts the server */
#define SNTP_SET_SYSTEM_TIME_NTP(sec, us)  sntp_set_system_time_us(sec, us)
.
.
/* Provide your function definition */
static void sntp_set_system_time_us(sec, us)
{
  your_rtc_driver_set_time(sec, us);
}

2.现在要在您的应用程序中使用 SNTP,请确保在您的 lwipopts.h 文件中启用以下 SNTP 定义,如下所示:

#define SNTP_SUPPORT      1
#define SNTP_SERVER_DNS   1
#define SNTP_UPDATE_DELAY 86400

3.然后在您的用户代码中:

#include "lwip/apps/sntp.h"
.
.
.
/* Configure and start the SNTP client */
sntp_setoperatingmode(SNTP_OPMODE_POLL);
sntp_setservername(0, "pool.ntp.org");
sntp_init();
.
.
.
/* Now if you read the RTC you'll find the date and time set by the SNTP client */
read_date_time_from_rtc();

就是这样,现在每个 SNTP_UPDATE_DELAY 毫秒,SNTP 应用程序将从服务器读取时间并将其保存到 RTC,您需要在代码中做的就是启动 SNTP 应用程序并从 RTC 读取。

于 2020-11-12T17:13:22.727 回答