2020-05-20 08:37 AM
I am looking in to implimenting a SNTP client on an embedded board, I am using the STM32CubeIDE so its a checkbox to enable SNTP, but I can find no documentation or examples on what you do from there.
I can see functions to enable/disable SNTP, but not to read anything or write anything....
Does anyone have some pointers about what/how it works? or even an example?
I have hunted the web, lots say how easy it is, just look at RFC4330 (which I have) etc, but I can only presume I am missing something completely.
2020-05-22 10:01 AM
2020-05-22 10:04 AM
Yes, SNTP is easy, you send an empty packet, and get a time stamped packet back. If latency is low it is great for just setting a 1 Second RTC
2020-05-23 02:30 AM
but how do I actually read the time the LWIP returns? I understand I have to set the operating mode and the server IP address then call sntp_init() but how is the time actually returned from LWIP? is it stored in an integer? is it written directly to the RTC? I think thats what I am missing?
Its okay saying its easy, everything is once you know the answer ;)
2021-01-14 08:48 AM
There are two changes you need to make in sntp.c:
1) You need to redefine the macro SNTP_SET_SYSTEM_TIME to a function in your code that sets the time, or resets the tick counter. My code maintains its own tick counter, and this function resets it to what comes back from the SNTP request.
2) Your code needs to periodically call sys_check_timeouts(). This is the routine that invokes the SNTP client. My SNTP client runs under FreeRTOS, so I set a timer that invokes this routine every few minutes.
2021-01-16 03:44 AM
Calling sys_check_timeouts() is necessary only for NO_SYS==1. For RTOS with NO_SYS==0 the timeouts are processed by lwIP code internally.
https://www.nongnu.org/lwip/2_1_x/group__lwip__nosys.html#ga83cffdf69ab60fd0eba9d17d363f9883
2021-01-17 04:26 PM
Yeah, confirmed. In my device, I have FreeRTOS running a timer task once a second that increments the seconds, and displays time, and another that updates sys_check_timeouts(). I commented out the latter timer, and SNTP still fires. Thanks.
2022-06-24 12:25 AM
Hello, I was wondering if you have succeeded in implementing a SNTP Client. I am trying to do the same and there is not so much information on internet.
I am using the STM32H745I board and I am able to ping through Ethernet, without OS. From what I have understood so far, I am supposed to redefine a macro called SNTP_SET_SERVER_TIME. Am I supposed to this in the file lwipopts.h or sntp.c ? . Then, the prototype is defined in the main.c for setting the time.
In the main.c, three functions are called :
- sntp_setoperatingmode(SNTP_OPMODE_POLL);
- sntp_setservername(0, "pool.ntp.org");
- sntp_init();
And in the main loop, there are two functions called :
- ethernetif_input(&gnetif);
- sys_check_timeouts();
It seems that the prototype of the function is never called, do you have any ideas or advice to give ?
2022-06-24 01:10 AM
never got it working as could never get my head around it, everyone was super helpful but didn't actually explain it well enough to get it doing anything sensible sadly.
2022-06-24 01:24 AM
Okay, thanks for replying ! hope someone else will read this topic again and can give some help. I actually have found two "examples" on chinese forums, if you're interested in them, I will link it to you.