在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RT-Thread在Lan8720a和 lwip基礎上移植ntp流程

冬至子 ? 來源:YZRD ? 作者:YZRD ? 2023-10-12 16:59 ? 次閱讀

開發環境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的資源包為0.2.2。以RT-Thread中Lan8720和lwip協議棧的使用文章創建的工程為基礎。

新建ntptest.c測試文件,移植以上參考的ntp代碼,整理后如下:

#include
#include
#define SERVER_IP "114.67.237.130"
#define SERVER_PORT 123
#define TIMEOUT 10
//宏定義
#define NTP_TIMESTAMP_DELTA 2208988800ull //number of seconds between 1900 and 1970,1900-1970的時間差
#define SEC_TIME_ZONE + (86060) //Beijing,GMT+8, 時區差
typedef struct
{
uint8_t li_vn_mode; // Eight bits. li, vn, and mode.
// li. Two bits. Leap indicator.
// vn. Three bits. Version number of the protocol.
// mode. Three bits. Client will pick mode 3 for client.
uint8_t stratum; // Eight bits. Stratum level of the local clock.
uint8_t poll; // Eight bits. Maximum interval between successive messages.
uint8_t precision; // Eight bits. Precision of the local clock.
uint32_t rootDelay; // 32 bits. Total round trip delay time.
uint32_t rootDispersion; // 32 bits. Max error aloud from primary clock source.
uint32_t refId; // 32 bits. Reference clock identifier.
uint32_t refTm_s; // 32 bits. Reference time-stamp seconds.
uint32_t refTm_f; // 32 bits. Reference time-stamp fraction of a second.
uint32_t origTm_s; // 32 bits. Originate time-stamp seconds.
uint32_t origTm_f; // 32 bits. Originate time-stamp fraction of a second.
uint32_t rxTm_s; // 32 bits. Received time-stamp seconds.
uint32_t rxTm_f; // 32 bits. Received time-stamp fraction of a second.
uint32_t txTm_s; // 32 bits and the most important field the client cares about. Transmit time-stamp seconds.
uint32_t txTm_f; // 32 bits. Transmit time-stamp fraction of a second.
} ntp_packet; // Total: 48 bytes.
int sockfd=-1;
int maxfd1;
fd_set readfds;
struct timeval timeout;
struct sockaddr_in servaddr;
int len;
int i;
uint8_t buf[48];
long local_timestamp;//uint32_t local_timestamp;
ntp_packet packet ;
struct tm * Net_time;
uint8_t NTP_Data[48]; //48字節的報文
int bsp_ntp_init(void)
{
NTP_Data[0]=0xa3;
//00100011, 0xa3,100 版本4
//00011011, 0x1b,011 版本3
//00010011, 0x13,010 版本2
//00001011, 0x0b,001 版本1
//后面分別發送了4個不同版本,都可以收到數據。
for(i=1;i<48;i++)NTP_Data[i]=0;//剩余的47字節為0
// servaddr.sin_family = AF_INET;
// servaddr.sin_port = htons(SERVER_PORT);
// servaddr.sin_addr.s_addr = inet_host(SERVER_IP);
servaddr.sin_family = AF_INET;
inet_pton(AF_INET, SERVER_IP, &servaddr.sin_addr.s_addr);
servaddr.sin_port = htons(SERVER_PORT);
if(sockfd>0)
{
//close(sockfd);
closesocket(sockfd);
sockfd=-1;
}
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
return -1;
}
if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(struct sockaddr)) != 0)
{
//close(sockfd);
closesocket(sockfd);
sockfd=-1;
return -1;
}
return 0;
}
int bsp_read_ntp(void)
{
if(sockfd<0)
{
if(bsp_ntp_init()<0)
{
rt_kprintf("sockfd is errn");
return -1;
}
}
send(sockfd, NTP_Data, sizeof(NTP_Data), 0);
rt_kprintf("send n");
FD_ZERO(&readfds);
FD_SET(sockfd, &readfds);
maxfd1 = sockfd + 1;
timeout.tv_sec = TIMEOUT;
timeout.tv_usec = 0;
if (select(maxfd1, &readfds, NULL, NULL, &timeout) > 0)
{
if (FD_ISSET(sockfd, &readfds))
{
if ((len = recv(sockfd, buf, sizeof(buf), 0)) < 0)
{
//close(sockfd);
closesocket(sockfd);
sockfd=-1;
return -1;
}
packet.txTm_s = buf[40]<<24 | buf[40+1]<<16|buf[40+2]<<8 |buf[40+3];//由于本文的時間精度要求不高,故自己用服務器返回的時間作為對時的時間,并未用公式:時間差offset=((T2-T1)+(T3-T4))/2。而是用T3作為對時基準時間。
local_timestamp = packet.txTm_s - NTP_TIMESTAMP_DELTA;//減去1970和1900的差值
rt_kprintf( "unix_timestamp=%ldn",local_timestamp);
local_timestamp +=SEC_TIME_ZONE; //加上北京的時間差,GMT+8
Net_time = localtime(&local_timestamp); //秒數轉換位標準時間
rt_kprintf("%d-%d-%d %d:%d:%drn",(Net_time->tm_year)+1900, (Net_time->tm_mon)+1, Net_time->tm_mday, Net_time->tm_hour,Net_time->tm_min,Net_time->tm_sec); //打印出時間
}
}
return 0;
}

主函數調用,代碼如下:

extern int bsp_ntp_init(void);
extern int bsp_read_ntp(void);
int main(void)
{
int count = 1;
rt_thread_mdelay(5000);
bsp_ntp_init();
while (count++)
{
LOG_D("Hello RT-Thread!");
rt_thread_mdelay(1000);
bsp_read_ntp();
}
return RT_EOK;
}

編譯無報錯,下載測試,測試結果如下:

1.jpg

選擇其中一個時間戳,利用時間戳轉換工具比對,結果如下:

1.jpg

結果正常。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • NTP
    NTP
    +關注

    關注

    1

    文章

    174

    瀏覽量

    13932
  • LwIP協議棧
    +關注

    關注

    0

    文章

    19

    瀏覽量

    7403
  • LAN8720
    +關注

    關注

    0

    文章

    4

    瀏覽量

    11056
  • STM32F407
    +關注

    關注

    15

    文章

    188

    瀏覽量

    29562
  • RT-Thread
    +關注

    關注

    31

    文章

    1301

    瀏覽量

    40265
收藏 人收藏

    評論

    相關推薦

    LAN8742如何修改源文件和頭文件,匹配LAN8720A芯片呢?

    板子的MCU芯片選擇STM32H743和LAN8720A。我使用cubemx使能ETH和lwip,但是系統默認是LAN8742。軟件生成的驅動代碼low_level_init()函數中調用
    發表于 03-26 08:29

    怎樣RT-Thread Studio上去開啟MQTT示例呢

    怎樣RT-Thread Studio上去移植LAN8720A驅動呢?怎樣RT-Thread
    發表于 03-01 07:07

    如何在RT-Thread Studio移植LAN8720A驅動的基礎上打開lwIP和SA呢

    如何在RT-Thread Studio移植LAN8720A驅動的基礎上打開lwIP和SA呢?有哪些操作
    發表于 03-01 06:13

    ART-Pi調試LAN8720object初始化遇到斷言報錯的原因是什么?

    使用rt-thread stdio平臺和ART-Pi開發LAN8720A。目前已經過了ETH的初始化,但是object.c的rt_object_init()初始化函數中斷言報錯。請教
    發表于 04-14 09:42

    RT-Thread系統移植eRPC并添加lwip的步驟

    還有 snprintf 變成 rt_snprintf,memset 變成 rt_memset 等驗證有沒有發現,我們可以設備跑 eRPC了。到目前為止,我們已經添加了
    發表于 09-05 16:43

    詳解RT1052移植網卡LAN8720A的過程

    的網卡,所以要注意從SOC到PHY芯片之間用到的引腳。然后結合 LAN8720A 芯片手冊來進行配置。這里我使用的野火提供的FreeRTOS中lwip例程,這個例程有LAN8720A 芯片的驅動代碼
    發表于 09-09 16:17

    STM32H750開發板基于LAN8720A移植LWIP的詳解

    移植環境:RT-THREAD Studio編譯環境:MDK5系統版本:rt thread 4.0.3LWiP版本:2.0.2硬件環境:野火S
    發表于 11-22 16:50

    RT-Thread找不到網卡的PHY該如何解決呢?

    需要完成的任務是給STM32開發板燒錄RT-Thread系統并添加網卡驅動我遇到的問題是1.找不到網卡的phy,board.h中支持LAN8720A,DM9161CEP,DP83848C 我測試
    發表于 02-15 10:32

    RT-ThreadLan8720alwip基礎上移植ntp的步驟

    開發環境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的資源包為0.2.2。以RT-ThreadLan8720lwip協議棧的
    發表于 02-15 11:21

    【國產MCU系列】 HK32F030 移植 RT-Thread Nano

    如需下載相關開源資料請點擊閱讀原文這是一個航順 HK32F030 的 RT-Thread Nano 移植示例,記錄了 Keil 裸機工程的基礎上進行
    發表于 11-21 18:51 ?42次下載
    【國產MCU系列】<b class='flag-5'>在</b> HK32F030 <b class='flag-5'>上</b><b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> Nano

    CubeMX創建裸機工程:STM32F407+ LAN8720A + RMII + lwIP

    CubeMX創建裸機工程:STM32F407+ LAN8720A + RMII + lwIP硬件環境:MCU單片機型號:STM32F407VGTxPHY 芯片型號 : LAN8720
    發表于 12-05 12:06 ?110次下載
    CubeMX創建裸機工程:STM32F407+ <b class='flag-5'>LAN8720A</b> + RMII + <b class='flag-5'>lwIP</b>

    【國產MCU系列】 HK32F030 移植 RT-Thread Nano

    這是一個航順 HK32F030 的 RT-Thread Nano 移植示例,記錄了 Keil 裸機工程的基礎上進行 RT-Thread N
    發表于 01-25 17:42 ?4次下載
    【國產MCU系列】<b class='flag-5'>在</b> HK32F030 <b class='flag-5'>上</b><b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> Nano

    LAN8720A/LAN8720Ai數據手冊

    LAN8720A/LAN8720-Ai支持通過標準RMII與以太網MAC通信界面它包含一個全雙工10-BASE-T/100BASE-TX收發器,支持10Mbps(10BASE-T)和100Mbps
    發表于 09-29 10:18 ?36次下載

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與<b class='flag-5'>移植</b>

    RT-Thread中mymqtt軟件包的使用方法

    在上一篇文章 RT-ThreadLan8720lwip協議棧的使用的工程基礎上添加mymqtt軟件包。 使能mqtt example和mqtt test,保存,等待下載更新軟件包
    的頭像 發表于 10-13 10:44 ?1037次閱讀
    <b class='flag-5'>RT-Thread</b>中mymqtt軟件包的使用方法
    主站蜘蛛池模板: 高h乱肉辣文辣书阁| 免费拍拍视频| 日本不卡免费高清视频| 狼狼鲁狼狼色| 午夜精品久久久久久久2023| 欧美大片一区| 婷婷在线综合| 天堂网在线最新版www中文网| 免费精品美女久久久久久久久久| 国产片在线| 天天看天天干天天操| 日本久草网| 99香蕉精品视频在线观看| 台湾三级毛片| 国内精品久久影视| 欧美性黑人十极品hd| 国产香蕉一区二区精品视频| 操您啦| 中文字幕在线观看一区二区三区 | 欧美色亚洲图| 一二三区乱码一区二区三区码| 下农村女人一级毛片| 一级特黄性色生活片一区二区| 欧美一区二区视频三区| 综合一区| 三级网站国产| 三级视频在线| 久久这里精品青草免费| qyule亚洲精品| 国产一级真人毛爱做毛片| 久久婷婷五综合一区二区| 你懂的在线观看视频| 国产伦子一区二区三区四区| 天天夜夜骑| 22222se男人的天堂| 九九热在线免费视频| 精品一区二区国语对白| 亚洲四虎永久在线播放| 日韩免费在线视频| 欧美福利网| 4虎成人|