国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32同步NTP服務(wù)器時(shí)間

這篇具有很好參考價(jià)值的文章主要介紹了STM32同步NTP服務(wù)器時(shí)間。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、NTP

?二、報(bào)文解析

三、代碼


獲取時(shí)間的方式有很多:GPS授時(shí)、無卡CDMA授時(shí)網(wǎng)絡(luò)授時(shí)等,NTP是通過Internet或局域網(wǎng),從NTP服務(wù)器獲取時(shí)間。

NTP時(shí)間服務(wù)器是用于局域網(wǎng)服務(wù)器時(shí)間同步使用的,可以保證局域網(wǎng)所有的服務(wù)器與時(shí)間服務(wù)器的時(shí)間保持一致,SP-SS06NTP授時(shí)服務(wù)器具有抗干擾性強(qiáng)、低功耗、多平臺(tái)多系統(tǒng)支持、故障報(bào)警等功能,為網(wǎng)絡(luò)設(shè)備(用戶)提供精確、標(biāo)準(zhǔn)、安全、可靠和多功能的同步時(shí)間服務(wù)。

?那單片機(jī)想要連接NTP服務(wù)器,就需要接入網(wǎng)絡(luò),接入網(wǎng)絡(luò)可以參考:

STM32驅(qū)動(dòng)CH9121網(wǎng)絡(luò)串口透傳

或者說比較熱門的ESP8266,ESP32這些無線接入的方式

一、NTP

詳細(xì)的NTP協(xié)議移步更專業(yè)的文章:NTP服務(wù)器授時(shí)原理

客戶端首先向服務(wù)端發(fā)送一個(gè)NTP 包,其中包含了該包離開客戶端的時(shí)間戳T1,當(dāng)服務(wù)端接收到該包時(shí),依次填入包到達(dá)的時(shí)間戳T2、包離開的時(shí)間戳T3,然后立即把包返回給客戶端??蛻舳嗽诮邮盏巾憫?yīng)包時(shí),記錄包返回的時(shí)間戳T4。

?二、報(bào)文解析

如果只是獲取一個(gè)簡單的時(shí)間,大可不必發(fā)送復(fù)雜的報(bào)文,Client發(fā)送的報(bào)文只需要這樣:

stm32獲取網(wǎng)絡(luò)時(shí)間,單片機(jī)學(xué)習(xí),網(wǎng)絡(luò),stm32,單片機(jī),學(xué)習(xí)

總共48個(gè)字節(jié),23表示是Client,也可以是1b

NTP服務(wù)器返回的數(shù)據(jù):

stm32獲取網(wǎng)絡(luò)時(shí)間,單片機(jī)學(xué)習(xí),網(wǎng)絡(luò),stm32,單片機(jī),學(xué)習(xí)

?stm32獲取網(wǎng)絡(luò)時(shí)間,單片機(jī)學(xué)習(xí),網(wǎng)絡(luò),stm32,單片機(jī),學(xué)習(xí)

stm32獲取網(wǎng)絡(luò)時(shí)間,單片機(jī)學(xué)習(xí),網(wǎng)絡(luò),stm32,單片機(jī),學(xué)習(xí)?

簡單點(diǎn),第41到48個(gè)字節(jié)取出來,轉(zhuǎn)換成十進(jìn)制數(shù)就是一個(gè)時(shí)間戳,這是相對于1970年的時(shí)間戳。

三、代碼

1.發(fā)送請求報(bào)文,這個(gè)根據(jù)連接方式不同,代碼不同,不做筆記

2.接收報(bào)文分析:

一些定義:

#define SEC_1900_1970         (2208988800UL)  //(1900-1970年的秒數(shù))

typedef struct
{
  int year;
  uint8_t month;
  uint8_t day;
  uint8_t hour;
  uint8_t minute;
  uint8_t second;
}Time;
//從NTP報(bào)文中獲取時(shí)間,返回0表示獲取成功,時(shí)間正確性高,返回1表示獲取失敗
//@data: 報(bào)文指針,48個(gè)字節(jié)
//@time:用于存放時(shí)間的Time指針變量
uint8_t NTP_GetTime(uint8_t *data , Time *t)
{
    int time_stamp;        
    struct tm *tm;
    time_t tick;

    time_stamp = (data[40]<<24)|(data[41]<<16)|(data[42]<<8)|(data[43]<<0);     //相對于1970
    time_stamp -= SEC_1900_1970;                                                //得到相對于1900的時(shí)間戳
    tick = (time_t)time_stamp;
    tm = localtime(&tick);

    t->year     = tm->tm_year+1900;
    t->month    = tm->tm_mon+1;
    t->day      = tm->tm_mday;
    t->hour     = tm->tm_hour;
    t->minute   = tm->tm_min;
    t->second   = tm->tm_sec;
    UTCToBeijing(t);    //UTC時(shí)間轉(zhuǎn)為北京時(shí)間
    if((t->year>0)&&(t->month>0)&&(t->month<13)&&(t->day>0)&&(t->day<32)&&(t->hour>0)&&(t->hour<24)&&(t->minute<60)&&(t->second<60))   //判斷范圍是否正確
    {
        return 1;
    }else
    {
        return 0;
    }
}

void UTCToBeijing(Time *UTC)
{
	int year=0,month=0,day=0,hour=0;
    int lastday = 0;// 月的最后一天日期
	
	year=UTC->year;
	month=UTC->month;
	day=UTC->day;
	hour=UTC->hour+8;//UTC+8轉(zhuǎn)換為北京時(shí)間
	if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
	{
      	lastday = 31;
    }
    else if(month == 4 || month == 6 || month == 9 || month == 11)
	{
    	lastday = 30;
    }
    else
	{
    	if((year%400 == 0)||(year%4 == 0 && year%100 != 0))//閏年的2月為29天,平年為28天
    	    lastday = 29;
    	else
    	    lastday = 28;
    }
	if(hour >= 24)//當(dāng)算出的時(shí)大于或等于24:00時(shí),應(yīng)減去24:00,日期加一天
	{
		hour -= 24;
		day += 1; 
		if(day > lastday)//當(dāng)算出的日期大于該月最后一天時(shí),應(yīng)減去該月最后一天的日期,月份加上一個(gè)月
		{ 
			day -= lastday;
			month += 1;
			if(month > 12)//當(dāng)算出的月份大于12,應(yīng)減去12,年份加上1年
			{
				month -= 12;
				year += 1;
			}
		}
	}
	UTC->year = year;
    UTC->month = month;
    UTC->day = day;
    UTC->hour = hour;
}

NTP的時(shí)間戳是相對于1970年,而localtime函數(shù)是相對于1900年的時(shí)間戳轉(zhuǎn)換,所以NTP的時(shí)間戳要減去1970-1900的秒數(shù),轉(zhuǎn)換出來之后是UTC時(shí)間,再轉(zhuǎn)換為北京時(shí)間。文章來源地址http://www.zghlxwxcb.cn/news/detail-695570.html

到了這里,關(guān)于STM32同步NTP服務(wù)器時(shí)間的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包