STM32 基础系列教程 35 - Lwip_sntp
前言
NTP是網絡時間協議(Network Time Protocol),它是用來同步網絡中各個計算機的時間的協議。SNTP 簡單網絡時間協議(Simple Network Time Protocol),由?NTP?改編而來,主要用來同步因特網中的計算機時鐘。換句話說SNTP是NTP的精簡版,我們可以用SNTP協議來得到當前網絡時間。關于NTP及SNTP的更多知識請自行查找資料。
本實險主要目的是學習stm32 + LWIP的SNTP功能, 利用sntp實現得到網絡時間功能(路由器能連外網)。
?
示例詳解
基于硬件平臺: MCU 的型號是?STM32F407VGT6, 使用stm32cubemx 工具自動產生的配置工程,使用KEIL5編譯代碼。本示例所用的最小系統板原理圖:
?
?
?
?
?
?
?
?
同時要開啟sntp功能:
?
?
?
?
同時給工程加入我們事先準備好的tcp_echoserver.c文件并指定tcp_echoserver.h路徑,注意這一節的tcp_echoserver.c和.h較上一節的有改動:
最后在lwipopts.h文件中設置sntp更新時間及得到時間后的操作函數的宏SNTP_SET_SYSTEM_TIME(sec):
同時在lwip/opt.h頭文件中MEMP_NUM_SYS_TIMEOUT的宏定義中加上SNTP, 加完后宏如下(不加可能會導致其它tcp或UDP無法工作):
/**
?* MEMP_NUM_SYS_TIMEOUT: the number of simultaneously active timeouts.
?* The default number of timeouts is calculated here for all enabled modules.
?* The formula expects settings to be either '0' or '1'.
?*/
#if !defined MEMP_NUM_SYS_TIMEOUT || defined __DOXYGEN__
#define MEMP_NUM_SYS_TIMEOUT??????????? (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_SNTP + LWIP_IGMP + LWIP_DNS + (PPP_SUPPORT*6*MEMP_NUM_PPP_PCB) + (LWIP_IPV6 ? (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD) : 0))
#endif
?
DHCP方式直接可從路由器設備列表中查看具體IP,可查看“STM32 基礎系列教程 32 - Ethnet+Lwip”里的相關操作,因本次實驗筆者使用的路由器有點問題,一直看不到設備列表中的設備,所以本次DHCP效果就不展示,大家按上一講的步驟操作即可!同時,DHCP方式也應該是可以PING通的。
?
用TCP,UDP測試工具來測試一下TCP收發功能(本例用tcp將sntp得到的時間打印出來,sntp每20更新一次時間,并通過tcp打印出來),相應的工具會在資料包中提供,打開軟件,按下圖所示步驟操作:
?
編譯好程序,燒錄代碼,并運行程序(燒錄時要選擇燒錄后復位并運行選項),出現如下圖所示操作結果:發送什么,回應什么,說明我們的TCP收發功能正常,實驗成功!!
?
上面的例子中ntp服務器IP地址是120.25.115.20,對就網址是ntp1,aliyun.com:
?
當然我們也可以開啟SNTP_DNS,直接用sntp_setservername(0, "ntp1.aliyun.com" );來設置NTP服務器,具體操作如下:
?
一、開啟全局DNS
二、開啟SNTP_SERVER_DNS
生成代碼,main函數中對應代碼選用sntp_setservername方式,同時記得在lwip/opt.h頭文件中MEMP_NUM_SYS_TIMEOUT的宏定義中加上SNTP, 加完后宏如下(不加可能會導致其它tcp或UDP無法工作)具體操作可參看前面介紹!
編譯,燒錄,同樣可以看到成功的sntp效果。
?
?
OK,本期實驗完成!下期見!同時如果大家有什么疑問或是有想了解的其它內容,也歡迎大家留言!!最后喜歡這個公眾號的同學們記得加關注了,會有不定期技術干貨推出!!
?
?
文中資料下載,在公眾號里給十三發消息:
下載|STM32基礎系列教程35
?
關注十三公眾號
?
總結
以上是生活随笔為你收集整理的STM32 基础系列教程 35 - Lwip_sntp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32 基础系列教程 34 - Lw
- 下一篇: STM32 基础系列教程 36 - Lw