RM新时代网站-首页

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

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

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

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

jf_pJlTbmA9 ? 來(lái)源:靈動(dòng)MM32MCU ? 作者:靈動(dòng)MM32MCU ? 2023-09-27 15:42 ? 次閱讀

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

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

pYYBAGIB1_6AcQFGAABvU9Hnrk0567.png

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

poYBAGIB1SyAHYynAAG39uXw7q0489.png

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

各個(gè)信號(hào)引腳對(duì)應(yīng)如下:

pYYBAGIB1S6AEqaVAAAOapdym_Y980.png
poYBAGIB1TGAFwREAAi12qR49zc411.png

實(shí)驗(yàn)用到的API前面幾節(jié)已經(jīng)進(jìn)行了講解,我們直接創(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)建一個(gè)UDP類型的連接結(jié)構(gòu)

2)綁定IP地址與端口

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

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

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

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

pYYBAGIB1TOARaWcAAEnlBhO5H8936.png

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

#define LOCAL_PORT                 2021

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

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

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

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

3)端口號(hào)

4)設(shè)置遠(yuǎn)程主機(jī)地址(即設(shè)備地址)

poYBAGIB2BKAIoNjAAFIBTLd7ms959.png

點(diǎn)擊打開(kāi),在進(jìn)行這一步前可以則Ping一下開(kāi)發(fā)板地址,可以正常Ping通則檢查端口號(hào);如果無(wú)法Ping通則需要對(duì)工程進(jìn)行檢查。任意輸入字符進(jìn)行發(fā)送。

pYYBAGIB2BSAa2rHAAHr1QEK3V0662.png

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

pYYBAGIB2BaAe7FBAAO0qJYw_WE985.png

通過(guò)上圖表明實(shí)驗(yàn)成功。

實(shí)驗(yàn)程序請(qǐng)登錄我們的官網(wǎng)下載MM32F3270 SDK,工程路徑如下:

~MM32F3270_Lib_Samples_V0.90Demo_appEthernet_DemoETH_RTOSFreertos_UDP

來(lái)源:靈動(dòng)MM32MCU

審核編輯:湯梓紅

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

    關(guān)注

    146

    文章

    17123

    瀏覽量

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

    關(guān)注

    12

    文章

    9123

    瀏覽量

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

    關(guān)注

    0

    文章

    325

    瀏覽量

    33931
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    靈動(dòng)微課堂 (第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的特點(diǎn)有哪些

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

    靈動(dòng)微電子MM32F3270系列MCU的特點(diǎn)介紹

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

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

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

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

    接下來(lái)給大家介紹基于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é)議沒(méi)有流控制,沒(méi)有應(yīng)答確認(rèn)機(jī)制,不能解決丟包、重發(fā)、錯(cuò)序問(wèn)題。它只是簡(jiǎn)單地實(shí)現(xiàn)從一端主機(jī)到另一端主機(jī)的數(shù)據(jù)傳輸功能,數(shù)據(jù)通過(guò)IP層發(fā)送,在網(wǎng)絡(luò)中傳輸,到達(dá)目標(biāo)主機(jī)的順序是無(wú)法預(yù)知的,因此需要應(yīng)用程序?qū)@些數(shù)據(jù)進(jìn)行排序處理。
    發(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 ?981次閱讀
    <b class='flag-5'>MM32F3270</b> ADC注入通道

    使用MM32F3270 FSMC驅(qū)動(dòng)OLED

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

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

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

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

    基于MM32F3270以太網(wǎng)HTTP使用
    的頭像 發(fā)表于 09-27 15:48 ?567次閱讀
    基于<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 ?494次閱讀
    基于<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 ?695次閱讀
    基于<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 ?463次閱讀
    基于<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 ?538次閱讀
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太網(wǎng)</b>Client_Socket使用
    RM新时代网站-首页