W5500 NTP獲取網路時間實現

2021-10-10 11:49:52 字數 3799 閱讀 4416

ntp 是網路時間協議,將獲取到的網路時間同步到本地,是本地時間與網路同步。

一般來說,stm32通過w5500從ntp伺服器獲取到之後,會存同步到ds1302時鐘晶元中,再讀取ds1302時間在應用中使用。

ds1302的時間設定和讀取,可以參考 《stm32f10x讀取ds1302的時間,通過usart顯示在串列埠除錯助手上》。

ntp協議是基於udp基礎上封裝的協議,ntp報文格式 可以參考 《ntp報文格式》。

stm32驅動w5500,使用udp來實現獲取ntp網路時間的**實現:ntp伺服器ip選取 202.112.10.60,埠固定為123.

ntp.c實現**:

#include "types.h"

#include "ntp.h"

#include "socket.h"

#include "w5500.h"

#include #include uint8 ntp_server_ip[4] = ;

void func_analysis_ntp_back_msg(uint8* buf, uint16 idx, tstamp *tstmp, datetime *datetime)

switch (zone)

*tstmp = seconds;

//calculation for date

calc_date_time(seconds, datetime);}

void calc_date_time(tstamp seconds, datetime *datetime)

else

r+=1;

y+=1; }

y += epoch;

datetime->yy = y;

yd=0;

yd = total_d - d;

yf=1;

while(yd>=28)

if (yf==2)

else

} if(yf==4 || yf==6 || yf==9 || yf==11 )

yf += 1;

}datetime->mo = yf;

yr = total_d-d-rz;

yr += 1;

datetime->dd = yr;

seconds = seconds%secs_perday;

datetime->hh = seconds/3600;

datetime->mm = (seconds%3600)/60;

datetime->ss = (seconds%3600)%60;

}/*tstamp change_datetime_to_seconds(void)

} cnt_timeout ++;

if(cnt_timeout > timeout_ms)

delay_ms(1);

} //close socket

close(sock);

return 0;

}

ntp.h**

#ifndef	__ntp_h__

#define __ntp_h__

#include "types.h"

#ifndef __z_util_time_h

#define __z_util_time_h

#include "z_util_time.h"

#endif

#define ntp_port 123

#define epoch 1900 // ntp start year

#define timezone0 22

#define timezone8 39

typedef unsigned long long tstamp;

typedef signed char s_char;

typedef unsigned int tdist;

typedef struct _ntpformat

ntpformat;

typedef struct _datetime

datetime;

#define secs_perday 86400ul // seconds in a day = 60*60*24

#define utc_adj_hrs 9 // seoul : gmt+9

void calc_date_time(tstamp seconds, datetime *datetime);

uint8 func_pack_ntp_message(uint8 *ntp_server_ip, uint8 *ntp_message);

void func_analysis_ntp_back_msg(uint8* buf, uint16 idx, tstamp *tstmp, datetime *datetime);

uint8 func_get_ntp_time(uint8 sock, tstamp *tstamp, datetime *datetime, uint16 timeout_ms);

#endif

主程式測試**

#ifndef __stm32f10x_h

#define __stm32f10x_h

#include "stm32f10x.h"

#endif

#ifndef __z_util_time_h

#define __z_util_time_h

#include "z_util_time.h"

#endif

#ifndef __z_hardware_led_h

#define __z_hardware_led_h

#include "z_hardware_led.h"

#endif

#ifndef __z_hardware_spi_h

#define __z_hardware_spi_h

#include "z_hardware_spi.h"

#endif

#ifndef __z_hardware_usart2_h

#define __z_hardware_usart2_h

#include "z_hardware_usart2.h"

#endif

#include "w5500.h"

#include "socket.h"

#include "w5500_conf.h"

#include "dhcp.h"

#include "ntp.h"

int main(void);

init_led();

init_hardware_usart2_dma(9600);

init_system_spi();

func_w5500_reset();

getmacbylockcode(mac);

setshar(mac);

/*dhcp test*/

sysinit(txsize, rxsize);

setrtr(2000);

setrcr(3);

//dhcp

if(func_dhcp_get_ip_sub_gw(0, mac, &dhcp_get, 500) == 0)

for(;;)

func_led1_on();

delay_ms(460);

func_led1_off();

delay_ms(560);

}}

w5500除錯小記

w5500是全硬體 tcp ip 嵌入式乙太網控制器,w5500 整合了 tcp ip 協議棧,10 100m 乙太網資料鏈路層 mac 及物理層 phy tcp ip 協議棧支援 tcp,udp,ipv4,icmp,arp,igmp 以及 pppoe 協議,w5500 內嵌 32k 位元組片上快取...

w5500跨網段 W5500網路擴充套件板教程 pdf

w5500網路擴充套件板教程 乙太網及硬體tcp ip協議棧應用 乙太網在各個領域和行業有著非常廣泛和深入的應用,這主要源於乙太網的 高度靈活性和較易實現的特點。因為乙太網具有組網簡單,成本低廉,相容性優 秀,連線可靠,以及拓撲調整方便的優點,在作為智慧型家居,物聯網或者無線傳 感網路的閘道器方面有...

W5500 DHCP 除錯經驗

2.初始化注意 以下配置資訊,根據需要選用 configmsg.sw ver 0 fw ver high configmsg.sw ver 1 fw ver low memcpy configmsg.mac,mac,6 setshar configmsg.mac getshar mac socket...