0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于MM32F3270以太网UDP使用

jf_pJlTbmA9 来源:灵动MM32MCU 作者:灵动MM32MCU 2023-09-27 15:42 次阅读

UDP(User Datagram Protocol用户数据报协议)是一种无连接、不可靠的协议。UDP协议没有流控制,没有应答确认机制,不能解决丢包、重发、错序问题。它只是简单地实现从一端主机到另一端主机的数据传输功能,数据通过IP层发送,在网络中传输,到达目标主机的顺序是无法预知的,因此需要应用程序对这些数据进行排序处理。在发送端,UDP只是把上层应用的数据封装到UDP报文中;在差错检测方面,仅仅是对数据进行了简单的校验,然后将其封装到IP数据报中发送出去。在接收端,无论是否收到数据,都不会产生一个应答返回送给源主机。如果接收到数据校验错误,接收端丢弃该UDP报文,也不会告诉源主机,这样数据是无法保障其准确性的。但是在如今的网络环境下,UDP协议传输出现错误的概率很小,并且它的实时性是非常好,常用于实时视频的传输,比如直播、网络电话等,即使是出现了数据丢失的情况,导致视频卡帧,也不会产生大的影响。UDP被广泛应用于与对传输速度有要求,并且可以容忍出现差错的数据传输中。

对于UDP通信来说,可以没有服务器,服务器只是一种规定。主动发送的一方为客户端,被动接受的一方为服务器(下图为通信过程,程序也是按照这个步骤进行设计)。

pYYBAGIB1_6AcQFGAABvU9Hnrk0567.png

实验使用MB-039开发板,在工程中使用LwIP+FreeRTOS,实验展示如何实现UDP数据收发,实验使用到的硬件如下:

poYBAGIB1SyAHYynAAG39uXw7q0489.png

如图是MB-039(完整原理图可以通过MM32官网下载)的ETH部分接口电路。

各个信号引脚对应如下:

pYYBAGIB1S6AEqaVAAAOapdym_Y980.png
poYBAGIB1TGAFwREAAi12qR49zc411.png

实验用到的API前面几节已经进行了讲解,我们直接创建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)创建一个UDP类型的连接结构

2)绑定IP地址与端口

3)接收客户端发送的数据(值得指出的是UDP可以一对一,也可以一对多以广播的形式发送)

4)拷贝出接收的数据

5)将数据发送给目标主机

到这里已经完成了工程的创建,看一下PC的IP地址,设备需要处于同一网段,以方便测试。打开命令行窗口输入: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

将程序下载入开发板中,使用NetAssist进行如下设置:

1)协议设置,选择UDP

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

3)端口号

4)设置远程主机地址(即设备地址)

poYBAGIB2BKAIoNjAAFIBTLd7ms959.png

点击打开,在进行这一步前可以则Ping一下开发板地址,可以正常Ping通则检查端口号;如果无法Ping通则需要对工程进行检查。任意输入字符进行发送。

pYYBAGIB2BSAa2rHAAHr1QEK3V0662.png

可以发现对接收到的数据进行了正确的转发,我们也可以使用Wireshark进行监视抓取整个过程,选择IP过滤:ip.addr==192.168.105.35。

pYYBAGIB2BaAe7FBAAO0qJYw_WE985.png

通过上图表明实验成功。

实验程序请登录我们的官网下载MM32F3270 SDK,工程路径如下:

~MM32F3270_Lib_Samples_V0.90Demo_appEthernet_DemoETH_RTOSFreertos_UDP

来源:灵动MM32MCU

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17123

    浏览量

    350986
  • 服务器
    +关注

    关注

    12

    文章

    9123

    浏览量

    85324
  • UDP
    UDP
    +关注

    关注

    0

    文章

    325

    浏览量

    33931
收藏 人收藏

    评论

    相关推荐

    灵动微课堂 (第184讲) | 基于MM32F3270 以太网 UDP使用

    _Lib_Samples_V0.90\Demo_app\Ethernet_Demo\ETH_RTOS\Freertos_UDP我们下节的题目为《基于MM32F3270以太网Client的使用》。
    发表于 10-18 11:13

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

    上海灵动微电子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3内核的32位微控制器,MM32F3270适用于要求高集成度的高性能控制领域,如:工业控制、消防监控
    发表于 11-03 07:20

    灵动微电子MM32F3270系列MCU的特点介绍

    上海灵动微电子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3内核的32位微控制器,MM32F3270适用于要求高集成度的高性能控制领域,如:工业控制、消防监控
    发表于 03-22 16:57 2156次阅读

    【国产MCU移植】MM32F3270 EVBoard

    【国产MCU移植】MM32F3270 EVBoard
    发表于 12-03 17:21 5次下载
    【国产MCU移植】<b class='flag-5'>MM32F3270</b> EVBoard

    基于MM32F3270 以太网 Client使用

    接下来给大家介绍基于TCP包的通讯。内容分为基于MM32F3270以太网Client的使用与基于MM32F3270以太网Server的使用。
    发表于 02-08 15:10 0次下载
    基于<b class='flag-5'>MM32F3270</b> <b class='flag-5'>以太网</b> Client使用

    基于MM32F3270以太网 UDP使用

    UDP协议没有流控制,没有应答确认机制,不能解决丢包、重发、错序问题。它只是简单地实现从一端主机到另一端主机的数据传输功能,数据通过IP层发送,在网络中传输,到达目标主机的顺序是无法预知的,因此需要应用程序对这些数据进行排序处理。
    发表于 02-08 15:13 0次下载
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太网</b> <b class='flag-5'>UDP</b>使用

    MM32F3270 勘误表(中文版)

    MM32F3270 勘误表(中文版)
    发表于 02-23 18:42 0次下载
    <b class='flag-5'>MM32F3270</b> 勘误表(中文版)

    MM32F3270 ADC注入通道

    MM32F3270 ADC注入通道
    的头像 发表于 09-27 15:59 982次阅读
    <b class='flag-5'>MM32F3270</b> ADC注入通道

    使用MM32F3270 FSMC驱动OLED

    使用MM32F3270 FSMC驱动OLED
    的头像 发表于 09-27 15:30 942次阅读
    使用<b class='flag-5'>MM32F3270</b> FSMC驱动OLED

    使用MM32F3270 FSMC驱动TFT-LCD

    使用MM32F3270 FSMC驱动TFT-LCD
    的头像 发表于 09-27 15:34 1008次阅读
    使用<b class='flag-5'>MM32F3270</b> FSMC驱动TFT-LCD

    基于MM32F3270以太网HTTP使用

    基于MM32F3270以太网HTTP使用
    的头像 发表于 09-27 15:48 568次阅读
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太网</b>HTTP使用

    基于MM32F3270以太网Server使用

    基于MM32F3270以太网Server使用
    的头像 发表于 09-27 15:46 494次阅读
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太网</b>Server使用

    基于MM32F3270以太网Client使用

    基于MM32F3270以太网Client使用
    的头像 发表于 09-27 15:44 695次阅读
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太网</b>Client使用

    基于MM32F3270以太网Server_Socket使用

    基于MM32F3270以太网Server_Socket使用
    的头像 发表于 09-27 15:41 463次阅读
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太网</b>Server_Socket使用

    基于MM32F3270以太网Client_Socket使用

    基于MM32F3270以太网Client_Socket使用
    的头像 发表于 09-27 15:37 538次阅读
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太网</b>Client_Socket使用