基于MM32F3270以太网UDP使用

udp(user datagram protocol用户数据报协议)是一种无连接、不可靠的协议。udp协议没有流控制,没有应答确认机制,不能解决丢包、重发、错序问题。它只是简单地实现从一端主机到另一端主机的数据传输功能,数据通过ip层发送,在网络中传输,到达目标主机的顺序是无法预知的,因此需要应用程序对这些数据进行排序处理。在发送端,udp只是把上层应用的数据封装到udp报文中;在差错检测方面,仅仅是对数据进行了简单的校验,然后将其封装到ip数据报中发送出去。在接收端,无论是否收到数据,都不会产生一个应答返回送给源主机。如果接收到数据校验错误,接收端丢弃该udp报文,也不会告诉源主机,这样数据是无法保障其准确性的。但是在如今的网络环境下,udp协议传输出现错误的概率很小,并且它的实时性是非常好,常用于实时视频的传输,比如直播、网络电话等,即使是出现了数据丢失的情况,导致视频卡帧,也不会产生大的影响。udp被广泛应用于与对传输速度有要求,并且可以容忍出现差错的数据传输中。
对于udp通信来说,可以没有服务器,服务器只是一种规定。主动发送的一方为客户端,被动接受的一方为服务器(下图为通信过程,程序也是按照这个步骤进行设计)。
实验使用mb-039开发板,在工程中使用lwip+freertos,实验展示如何实现udp数据收发,实验使用到的硬件如下:
如图是mb-039(完整原理图可以通过mm32官网下载)的eth部分接口电路。
各个信号引脚对应如下:
实验用到的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
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)设置远程主机地址(即设备地址)
点击打开,在进行这一步前可以则ping一下开发板地址,可以正常ping通则检查端口号;如果无法ping通则需要对工程进行检查。任意输入字符进行发送。
可以发现对接收到的数据进行了正确的转发,我们也可以使用wireshark进行监视抓取整个过程,选择ip过滤:ip.addr==192.168.105.35。
通过上图表明实验成功。
实验程序请登录我们的官网下载mm32f3270 sdk,工程路径如下:
~mm32f3270_lib_samples_v0.90demo_appethernet_demoeth_rtosfreertos_udp
来源:灵动mm32mcu


ArangoDB Enterprise—增强的数据屏蔽
赛车直播中的实时数据哪里来
无线开关量/模拟量远传,解决现场布线难的问题?
锂离子电池老化的原因 锂电池老化的影响
iPhone 3.1.2解锁详情和步骤
基于MM32F3270以太网UDP使用
你们知道钞票上的电磁学吗
智能车控制器功能介绍
从云端到边缘的全新AI 硬件是什么样子的
人工智能似乎才开始迎来了其大爆发的时代
工程师谈FPGA时序约束七步法
华为可能在未来一两年内推出头戴式AR设备
我守护,你放心!广电计量全力护航高考食品安全
山西党政代表团赴陕考察,走访西安商汤
MicroTCA:高性能,小型封装
5G网络在未来5-8年会渗透到生活的方方面面
中国无人机企业亿航智能将设立第一个欧洲智能研发中心
站在后天看明天,创新引领数字基建
比特币市场为何那么容易就受到操纵
RISC-V64 正式成为Debian官方支持架构