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

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

3天內(nèi)不再提示

基于MM32F3270以太網(wǎng)UDP使用

jf_pJlTbmA9 ? 來源:靈動MM32MCU ? 作者:靈動MM32MCU ? 2023-09-27 15:42 ? 次閱讀

UDP(User Datagram Protocol用戶數(shù)據(jù)報協(xié)議)是一種無連接、不可靠的協(xié)議。UDP協(xié)議沒有流控制,沒有應(yīng)答確認機制,不能解決丟包、重發(fā)、錯序問題。它只是簡單地實現(xiàn)從一端主機到另一端主機的數(shù)據(jù)傳輸功能,數(shù)據(jù)通過IP層發(fā)送,在網(wǎng)絡(luò)中傳輸,到達目標主機的順序是無法預(yù)知的,因此需要應(yīng)用程序?qū)@些數(shù)據(jù)進行排序處理。在發(fā)送端,UDP只是把上層應(yīng)用的數(shù)據(jù)封裝到UDP報文中;在差錯檢測方面,僅僅是對數(shù)據(jù)進行了簡單的校驗,然后將其封裝到IP數(shù)據(jù)報中發(fā)送出去。在接收端,無論是否收到數(shù)據(jù),都不會產(chǎn)生一個應(yīng)答返回送給源主機。如果接收到數(shù)據(jù)校驗錯誤,接收端丟棄該UDP報文,也不會告訴源主機,這樣數(shù)據(jù)是無法保障其準確性的。但是在如今的網(wǎng)絡(luò)環(huán)境下,UDP協(xié)議傳輸出現(xiàn)錯誤的概率很小,并且它的實時性是非常好,常用于實時視頻的傳輸,比如直播、網(wǎng)絡(luò)電話等,即使是出現(xiàn)了數(shù)據(jù)丟失的情況,導致視頻卡幀,也不會產(chǎn)生大的影響。UDP被廣泛應(yīng)用于與對傳輸速度有要求,并且可以容忍出現(xiàn)差錯的數(shù)據(jù)傳輸中。

對于UDP通信來說,可以沒有服務(wù)器,服務(wù)器只是一種規(guī)定。主動發(fā)送的一方為客戶端,被動接受的一方為服務(wù)器(下圖為通信過程,程序也是按照這個步驟進行設(shè)計)。

pYYBAGIB1_6AcQFGAABvU9Hnrk0567.png

實驗使用MB-039開發(fā)板,在工程中使用LwIP+FreeRTOS,實驗展示如何實現(xiàn)UDP數(shù)據(jù)收發(fā),實驗使用到的硬件如下:

poYBAGIB1SyAHYynAAG39uXw7q0489.png

如圖是MB-039(完整原理圖可以通過MM32官網(wǎng)下載)的ETH部分接口電路。

各個信號引腳對應(yīng)如下:

pYYBAGIB1S6AEqaVAAAOapdym_Y980.png
poYBAGIB1TGAFwREAAi12qR49zc411.png

實驗用到的API前面幾節(jié)已經(jīng)進行了講解,我們直接創(chuàng)建UDP工程:

static void udpecho_thread(void* arg)
{
    struct netconn* conn;
    struct netbuf* buf;
    char buffer[4096];
    err_t err;
    LWIP_UNUSED_ARG(arg);

    conn = netconn_new(NETCONN_UDP);        // (1)
    netconn_bind(conn, IP_ADDR_ANY, LOCAL_PORT);   // (2)

    while (1) {
        err = netconn_recv(conn,  buf);          // (3)
        if (err == ERR_OK) {
            if(netbuf_copy(buf, buffer, sizeof(buffer)) != buf->p->tot_len) {   // (4)
                LWIP_DEBUGF(LWIP_DBG_ON, ("copy failedn"));
            }
            else {
                buffer[buf->p->tot_len] = '?';
                err = netconn_send(conn, buf);                 // (5)
                if(err != ERR_OK) {
                   LWIP_DEBUGF(LWIP_DBG_ON, ("netconn_send failed: %dn", (int)err));
                }
                else {
                    LWIP_DEBUGF(LWIP_DBG_ON, ("got %sn", buffer));
                }
            }
            netbuf_delete(buf);
        }
    }
}

1)創(chuàng)建一個UDP類型的連接結(jié)構(gòu)

2)綁定IP地址與端口

3)接收客戶端發(fā)送的數(shù)據(jù)(值得指出的是UDP可以一對一,也可以一對多以廣播的形式發(fā)送)

4)拷貝出接收的數(shù)據(jù)

5)將數(shù)據(jù)發(fā)送給目標主機

到這里已經(jīng)完成了工程的創(chuàng)建,看一下PC的IP地址,設(shè)備需要處于同一網(wǎng)段,以方便測試。打開命令行窗口輸入:ipconfig

pYYBAGIB1TOARaWcAAEnlBhO5H8936.png

PC的地址為:192.168.105.34,在sys_arch.h文件中對DEST_IP_ADDR0 、DEST_IP_ADDR1、DEST_IP_ADDR2、DEST_IP_ADDR3進行修改,DEST_PORT 隨意修改。

#define LOCAL_PORT                 2021

#define IP_ADDR0                    192
#define IP_ADDR1                    168
#define IP_ADDR2                    105
#define IP_ADDR3                    35

將程序下載入開發(fā)板中,使用NetAssist進行如下設(shè)置:

1)協(xié)議設(shè)置,選擇UDP

2)本機主機地址(即PC地址)

3)端口號

4)設(shè)置遠程主機地址(即設(shè)備地址)

poYBAGIB2BKAIoNjAAFIBTLd7ms959.png

點擊打開,在進行這一步前可以則Ping一下開發(fā)板地址,可以正常Ping通則檢查端口號;如果無法Ping通則需要對工程進行檢查。任意輸入字符進行發(fā)送。

pYYBAGIB2BSAa2rHAAHr1QEK3V0662.png

可以發(fā)現(xiàn)對接收到的數(shù)據(jù)進行了正確的轉(zhuǎn)發(fā),我們也可以使用Wireshark進行監(jiān)視抓取整個過程,選擇IP過濾:ip.addr==192.168.105.35。

pYYBAGIB2BaAe7FBAAO0qJYw_WE985.png

通過上圖表明實驗成功。

實驗程序請登錄我們的官網(wǎng)下載MM32F3270 SDK,工程路徑如下:

~MM32F3270_Lib_Samples_V0.90Demo_appEthernet_DemoETH_RTOSFreertos_UDP

來源:靈動MM32MCU

審核編輯:湯梓紅

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

    關(guān)注

    146

    文章

    17148

    瀏覽量

    351212
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9160

    瀏覽量

    85426
  • UDP
    UDP
    +關(guān)注

    關(guān)注

    0

    文章

    325

    瀏覽量

    33941
收藏 人收藏

    評論

    相關(guān)推薦

    靈動微課堂 (第184講) | 基于MM32F3270 以太網(wǎng) UDP使用

    _Lib_Samples_V0.90\Demo_app\Ethernet_Demo\ETH_RTOS\Freertos_UDP我們下節(jié)的題目為《基于MM32F3270以太網(wǎng)Client的使用》。
    發(fā)表于 10-18 11:13

    MM32F3270系列32位MCU的特點有哪些

    上海靈動微電子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3內(nèi)核的32位微控制器,MM32F3270適用于要求高集成度的高性能控制領(lǐng)域,如:工業(yè)控制、消防監(jiān)控
    發(fā)表于 11-03 07:20

    靈動微電子MM32F3270系列MCU的特點介紹

    上海靈動微電子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3內(nèi)核的32位微控制器,MM32F3270適用于要求高集成度的高性能控制領(lǐng)域,如:工業(yè)控制、消防監(jiān)控
    發(fā)表于 03-22 16:57 ?2163次閱讀

    【國產(chǎn)MCU移植】MM32F3270 EVBoard

    【國產(chǎn)MCU移植】MM32F3270 EVBoard
    發(fā)表于 12-03 17:21 ?5次下載
    【國產(chǎn)MCU移植】<b class='flag-5'>MM32F3270</b> EVBoard

    基于MM32F3270 以太網(wǎng) Client使用

    接下來給大家介紹基于TCP包的通訊。內(nèi)容分為基于MM32F3270以太網(wǎng)Client的使用與基于MM32F3270以太網(wǎng)Server的使用。
    發(fā)表于 02-08 15:10 ?0次下載
    基于<b class='flag-5'>MM32F3270</b> <b class='flag-5'>以太網(wǎng)</b> Client使用

    基于MM32F3270以太網(wǎng) UDP使用

    UDP協(xié)議沒有流控制,沒有應(yīng)答確認機制,不能解決丟包、重發(fā)、錯序問題。它只是簡單地實現(xiàn)從一端主機到另一端主機的數(shù)據(jù)傳輸功能,數(shù)據(jù)通過IP層發(fā)送,在網(wǎng)絡(luò)中傳輸,到達目標主機的順序是無法預(yù)知的,因此需要應(yīng)用程序?qū)@些數(shù)據(jù)進行排序處理。
    發(fā)表于 02-08 15:13 ?0次下載
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太網(wǎng)</b> <b class='flag-5'>UDP</b>使用

    MM32F3270 勘誤表(中文版)

    MM32F3270 勘誤表(中文版)
    發(fā)表于 02-23 18:42 ?0次下載
    <b class='flag-5'>MM32F3270</b> 勘誤表(中文版)

    MM32F3270 ADC注入通道

    MM32F3270 ADC注入通道
    的頭像 發(fā)表于 09-27 15:59 ?1000次閱讀
    <b class='flag-5'>MM32F3270</b> ADC注入通道

    使用MM32F3270 FSMC驅(qū)動OLED

    使用MM32F3270 FSMC驅(qū)動OLED
    的頭像 發(fā)表于 09-27 15:30 ?954次閱讀
    使用<b class='flag-5'>MM32F3270</b> FSMC驅(qū)動OLED

    使用MM32F3270 FSMC驅(qū)動TFT-LCD

    使用MM32F3270 FSMC驅(qū)動TFT-LCD
    的頭像 發(fā)表于 09-27 15:34 ?1044次閱讀
    使用<b class='flag-5'>MM32F3270</b> FSMC驅(qū)動TFT-LCD

    基于MM32F3270以太網(wǎng)HTTP使用

    基于MM32F3270以太網(wǎng)HTTP使用
    的頭像 發(fā)表于 09-27 15:48 ?574次閱讀
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太網(wǎng)</b>HTTP使用

    基于MM32F3270以太網(wǎng)Server使用

    基于MM32F3270以太網(wǎng)Server使用
    的頭像 發(fā)表于 09-27 15:46 ?502次閱讀
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太網(wǎng)</b>Server使用

    基于MM32F3270以太網(wǎng)Client使用

    基于MM32F3270以太網(wǎng)Client使用
    的頭像 發(fā)表于 09-27 15:44 ?708次閱讀
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太網(wǎng)</b>Client使用

    基于MM32F3270以太網(wǎng)Server_Socket使用

    基于MM32F3270以太網(wǎng)Server_Socket使用
    的頭像 發(fā)表于 09-27 15:41 ?474次閱讀
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太網(wǎng)</b>Server_Socket使用

    基于MM32F3270以太網(wǎng)Client_Socket使用

    基于MM32F3270以太網(wǎng)Client_Socket使用
    的頭像 發(fā)表于 09-27 15:37 ?543次閱讀
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太網(wǎng)</b>Client_Socket使用