- 简述
- UDP概述之前已经写过,请参阅:https://blog.youkuaiyun.com/Linux_ARM9/article/details/106008881
- 此处只写实验例程
- UDP层函数关系
- RAW 中与UDP相关的函数
- udp_new(); 新建一个UDP的PCB块
- udp_remove(); 将一个PCB控制块从链表中删除,并且释放这个控制块的内存
- udp_bind(); 为udp的PCB控制块绑定一个IP地址和端口号
- udp_connect(); 连接到指定IP地址主机的指定端口上,其它就是设置PCB控制块的remote_ip和remote_port
- udp_disconnect(); 断开链接,将控制块设置为非连接状态,其实就是清除remote_ip和remote_port字段
- udp_send(); 通过一个PCB控制块发送数据
- udp_recv(); 需要创建一一个回调函数,当接收到数据的时候被调用
- 复制例程中的udp_demo.c和udp_demo.h两个文件
- udp_demo.c函数详解
- udp_demo_set_remoteip();设置远端IP地址,UDP连接的时候要用到这个地址
- udp_demo_test(); UDP实验测试函数
- udp_demo_recv(); UDP接收数据回调函数
- udp_demo_senddata(); 发送数据
- udp_demo_connection_close(); 关闭UDP连接
- 软件设计
- 创建一个UDP的控制块
- 连接到指定IP地址和端口号
- 绑定IP地址和端口号
- 注册接收回调函数
- 回调函数内接收数据
- 发送数据
- 断开连接,并释放内存
- 在接收/发送数据的循环中需要调用lwip_periodic_handle()函数,否则网络无法运行
- 例程代码
-
//UDP测试 void udp_demo_test(void) { err_t err; struct udp_pcb *udppcb; //定义一个TCP服务器控制块 struct ip_addr rmtipaddr; //远端ip地址 u8 *tbuf; u8 key; u8 res=0; u16 t=0; udp_demo_set_remoteip();//先选择IP BSP_LCD_Clear(WHITE); //清屏 POINT_COLOR=RED; //红色字体 BSP_LCD_ShowString(30,30,200,16,16,"Apollo STM32F4&F7"); BSP_LCD_ShowString(30,50,200,16,16,"RAW UDP Test"); BSP_LCD_ShowString(30,70,200,16,16,"ATOM@ALIENTEK"); BSP_LCD_ShowString(30,90,200,16,16,"KEY0:Send data"); BSP_LCD_ShowString(30,110,200,16,16,"KEY_UP:Quit"); BSP_LCD_ShowString(30,130,200,16,16,"KEY1:Connect"); tbuf=mymalloc(SRAMIN,200); //申请内存 if(tbuf==NULL)return ; //内存申请失败了,直接退出 sprintf((char*)tbuf,"Local IP:%d.%d.%d.%d",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);//服务器IP BSP_LCD_ShowString(30,150,210,16,16,tbuf); sprintf((char*)tbuf,"Remote IP:%d.%d.%d.%d",lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2],lwipdev.remoteip[3]);//远端IP BSP_LCD_ShowString(30,170,210,16,16,tbuf); sprintf((char*)tbuf,"Remote Port:%d",UDP_DEMO_PORT);//客户端端口号 BSP_LCD_ShowString(30,190,210,16,16,tbuf); POINT_COLOR=BLUE; BSP_LCD_ShowString(30,210,210,16,16,"STATUS:Disconnected"); udppcb=udp_new(); if(udppcb)//创建成功 { IP4_ADDR(&rmtipaddr,lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2],lwipdev.remoteip[3]); err=udp_connect(udppcb,&rmtipaddr,UDP_DEMO_PORT);//UDP客户端连接到指定IP地址和端口号的服务器 if(err==ERR_OK) { err=udp_bind(udppcb,IP_ADDR_ANY,UDP_DEMO_PORT);//绑定本地IP地址与端口号 if(err==ERR_OK) //绑定完成 { udp_recv(udppcb,udp_demo_recv,NULL);//注册接收回调函数 BSP_LCD_ShowString(30,210,210,16,16,"STATUS:Connected ");//标记连接上了(UDP是非可靠连接,这里仅仅表示本地UDP已经准备好) udp_demo_flag |= 1<<5; //标记已经连接上 POINT_COLOR=RED; BSP_LCD_ShowString(30,230,BSP_LCD_InitStructure.width-30,BSP_LCD_InitStructure.height-190,16,"Receive Data:");//提示消息 POINT_COLOR=BLUE;//蓝色字体 } else res=1; } else res=1; } else res=1; while(res==0) { key=BSP_KEY_Scan(0); if(key==Key_WkUP_PA0_Value)break; if(key==Key0_PH3_Value)//KEY0按下了,发送数据 { udp_demo_senddata(udppcb); } if(udp_demo_flag&1<<6)//是否收到数据? { BSP_LCD_Fill(30,250,BSP_LCD_InitStructure.width-1,BSP_LCD_InitStructure.height-1,WHITE);//清上一次数据 BSP_LCD_ShowString(30,250,BSP_LCD_InitStructure.width-30,BSP_LCD_InitStructure.height-230,16,udp_demo_recvbuf);//显示接收到的数据 udp_demo_flag&=~(1<<6);//标记数据已经被处理了. } lwip_periodic_handle(); delay_us(100); t++; if(t==2000) { t=0; LED0_Toggle; } } udp_demo_connection_close(udppcb); myfree(SRAMIN,tbuf); }
-
- 总结
- 无
- 参考资料:
- 正点原子《STM32F767开发指南(HAL库版)》
- 正点原子《STM32F767 LWIP手册》
- 野火《STM32 HAL库开发实战指南》
- 野火《LWIP应用开发实战指南》
- 官方源码
- 硬件平台:
- 正点原子阿波罗F767
- 软件平台:
- MDK5.2.5
- 库版本:
- TM32Cube_FW_F7_V1.4.0
- LWIP版本
- lwip-1.4.1
- contrib-1.4.1
相关推荐
lwIP TCP/IP 协议栈笔记之一:概述和目录结构详解
目录 1. lwIP概述 1.1 TCP/IP 协议简介 1.2 lwIP 简介 1.2.1 目录结构 lwip-2.1.2 1.2.2 lwip-2.1.2/src 2 目录结构详解 2.1 /doc 2.2 /test 2.3 /src 2.3.1 APIs 2.3.2 /src/api 2.3.3 /src/apps 2.3.4 /src/core 2.3.5 /...
LWIP学习笔记(5)RAW_UDP实验
lwip基础
LWIP的RAW API UDP通信详解(stm32f103---enc28j60)
目录LWIPLWIP简介LWIP主要特性ENC28J60ENC28J60简介ENC28J60特点无操作系统LWIP移植在说移植之前,先说下几个重要的函数功能和数据结构enc28j60.c文件主要结构体*netif*结构体定义(netif.h)只列出了比较重要的字段l...
IP分割和重组
数据链路层不同,MTU(最大传输单元)就不同。但是IP协议是网络层的协议,它需要将数据链路层进行抽象。使得所有的数据链路对于上层的表现是一致的。 任何一台主机必要对IP分片进行相应的处理。因为,较大的报文无法一下子发送出去,需要进行分片分次发送。是否有必要进行分片是由路由器决定的,只要路由器认为有必要分片,就会进行分片。路由器只管分片,不管重组。重组是需要在目标...
STM32与LwIP的RAW_UDP实验指南
STM32微控制器是由STMicroelectronics(意法半导体)开发的32位ARM Cortex-M系列处理器。该系列具有性能强大、功耗低和成本效益高等特点,广泛应用于嵌入式系统开发。STM32微控制器以高性能的Cortex-M内核为基础,结合丰富的外设、灵活的内存配置、以及广泛的开发工具支持,成为工业、消费电子和医疗等多个领域的首选解决方案。RAW模式,即原始模式,是一种网络通信的处理方式,在这种模式下,网络数据包会直接传递给用户空间应用程序而不需要进行任何额外的处理。
STM32F750基于LWIP的RAW_UDP实验实现与网络通信
LWIP协议栈(Lightweight IP)是一个开源的TCP/IP协议栈,设计时考虑到了嵌入式系统的内存限制。它通过模块化的方式提供了对TCP和UDP协议的支持,并且尽量减少了对RAM的使用,适合于资源有限的嵌入式系统。LWIP被设计为可以在不支持虚拟内存管理的操作系统中运行,因此它通常不需要为每个网络连接分配庞大的内存空间。LWIP主要由以下几个模块组成:核心层(Core):这是LWIP协议的核心模块,它提供了网络层的核心功能,如IP分片与组装、校验和计算、接口抽象等。
LwIP RAW API下UDP协议的嵌入式实现与原理剖析
UDP(用户数据报协议)是传输层核心协议之一,以无连接、低开销、高实时性为特征,广泛应用于音视频流、IoT设备上报、远程监控等对延迟敏感的场景。其本质在于省略TCP的握手、确认、重传与拥塞控制机制,依赖应用层实现可靠性增强。在资源受限的嵌入式系统中,LwIP作为轻量级TCP/IP协议栈,通过RAW API提供事件驱动与回调模型,实现零RTOS依赖的裸机网络编程。该模式以udp_pcb为核心控制块,结合udp_bind、udp_connect、udp_recv等关键接口,支撑STM32等MCU平台的高效UDP
LAN8720+stm32F767 使用hal库+lwip2.0,调试通过udp协议
LAN8720+stm32F767 使用hal库+lwip2.0,调试通过udp协议 采用正点原子阿波罗板
ZYNQ实验 基于LWIP的UDP传输实验
* 基本参数设置 */2500//udp传输来的指令存放数组//收到的数据长度//GIC 中断管理/* 开发板MAC地址 *//* 开启中断系统 *//* 添加本机IP地址,远端设备IP在udp.process.c中设置 *///初始化lwIP库/* 添加网络接口并将其设置为默认接口 */if (!return -1;//启动网络//初始化UDPwhile (1)/* 将MAC队列中的包传输的LwIP/IP栈中 */
STM32 UDP通讯接收发送源程序
基于STM32F407开发的UDP通讯源程序,采用主动发送及接收方式。项目搭载使用通讯稳定性高。可以直接作为模板进行开发。
Vim 入门到够用:Linux 文本编辑器的三种模式、常用操作与实战技巧
i 进入编辑模式Esc 退出编辑模式回到命令模式: 从命令模式进入底行模式编辑,不一定非得“打开就直接打字”。一旦你接受了“模式”这件事,后面很多操作都会顺起来。学 Vim,不要追求一次学全,先把“命令模式—编辑模式—底行模式”这条主线练熟。只要这条主线通了,后面的复制、删除、搜索、替换,都是顺手补上去的能力。
ZYNQ -Lwip和TCP/IP简介
TCP/IP TCP/IP 通信协议是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信。浏览器与服务器都在使用 TCP/IP 协议, E-Mail 使用 TCP/IP 协议,电子邮件也通过 TCP/IP 协议来发送和接收邮件。因特网地址是 TCP/IP 协议。因特网地址比如 “42.120.45.233” 就是一个 TCP/IP 协议。 TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不
UR5 机械臂手眼标定(Eye-in-Hand)实战:OpenCV 求解 AX=XB,误差 < 2mm
本文详细介绍了UR5机械臂在Eye-in-Hand配置下的手眼标定实战,通过OpenCV实现高精度标定,最终达到误差小于2mm的工业级精度要求。文章涵盖了标定基础原理、环境搭建、数据采集策略、核心算法实现及误差分析与优化,为视觉机械臂的自主抓取提供了实用指南。
《嵌入式 - Lwip开发指南》第1章 LWIP概述
1.1 LwIP简介 LwIP 全名为 Light weight IP,意思是轻量化的 TCP/IP 协议,是瑞典计算机科学院(SICS)的 Adam Dunkels 开发的一个小型开源的 TCP/IP 协议栈。LwIP 的设计初衷是:用少量的资源消耗(RAM)实现一个较为完整的 TCP/IP 协议栈,其中“完整”主要指的是 TCP 协议的完整性, 实现的重点是在保持 TCP 协议主要功能的基础上减少对 RAM 的占用。此外 LwIP既可以移植到操作系统上运行,也可以在无操作系统的情况下独立运行。 LwIP
电机FOC控制实战:STM32 CubeMX配置六路互补PWM与死区优化
本文详细介绍了如何使用STM32 CubeMX配置六路互补PWM与死区优化,实现电机FOC控制。通过实战经验分享,包括时钟配置、定时器设置、死区时间计算及优化技巧,帮助开发者避免常见问题,提升电机控制性能。特别适用于STM32G4系列的无刷电机驱动应用。
磁悬浮轴承控制策略设计及性能对比
摘要:针对高速磁悬浮转子控制问题,本文提出多方案对比分析。建立含陀螺效应的5自由度动力学模型,分析陀螺耦合、质量不平衡等关键挑战。对比四种控制策略:基础PID解耦、交叉反馈+自适应陷波、H∞鲁棒+前馈补偿、滑模控制+观测器,从实时性、鲁棒性等维度评估优劣。推荐采用交叉反馈+H∞+自适应陷波的混合方案,通过内环电流环与外环位置环协同,实现陀螺效应动态解耦和扰动抑制。实施步骤包括系统辨识、控制器设计、硬件部署等,需配合实验验证与参数整定。该方案综合性能最优,适用于高转速、强扰动场景。
lwip raw、netcoon、socket三种接口编程的区别
在嵌入式网络编程中,LWIP(Lightweight IP)是一个轻量级的 TCP/IP 协议栈,广泛应用于 STM32 等微控制器平台。LWIP 提供了多种编程接口,其中 RAW、NETCONN 和 Socket 是比较常用的三种。本文将详细介绍这三种接口编程的区别,帮助开发者更好地选择适合自己项目的编程方式。LWIP 是一个开源的轻量级 TCP/IP 协议栈,专门为嵌入式系统设计。它具有占用内存少、运行效率高、可移植性强等特点,非常适合在资源有限的微控制器上使用。
01 Aras Innovator二次开发实战:从IOM到AML的完整交互指南
本文详细介绍了Aras Innovator二次开发实战,从IOM到AML的完整交互指南。通过JavaScript和C#代码示例,展示了如何在客户端和服务端使用IOM进行开发,并深入解析AML语言的基础语法和调试技巧。文章还提供了文档管理和BOM管理等典型场景的实战案例,帮助开发者快速掌握Aras Innovator二次开发的核心技术。
lwIP 的 Raw API 使用指南
lwIP 是一个功能强大且灵活的轻量级 TCP/IP 协议栈,适用于各种嵌入式系统。通过正确的配置和集成,可以实现高效的网络通信功能。在 FreeRTOS 等 RTOS 环境中使用 lwIP,可以充分利用 RTOS 的任务调度能力,提高系统的实时性和响应速度。掌握 lwIP 的基本使用方法和关键配置选项,是开发网络嵌入式应用的基础。
msfvenom制作windows/linux/android/ios木马
msfvenom选项如下 -p, --payload<payload> 指定 payload(攻击荷载)。如果使用自定义payload,请使用'-'或者stdin指定。 -l, --list [module_typel列出指定模块的所有可用资源。模块类型包括:payloads, encoders, nops, all -n, --nopsled <length>为payload预先指定一个NOP滑动长度。 -f, --format <format>指定输出格式(使
Superpowers与 OpenSpec、Spec Kit 对比
按照官方仓库定义,Superpowers 是一套构建在 composable skills 之上的完整软件开发工作流。它不是单纯的 prompt 集合,而是把一系列工程动作做成默认流程。一个需要明确的点:Superpowers 并不只偏 Claude Code,根据。
lwIP深度解析:嵌入式网络开发的终极轻量级TCP/IP协议栈指南
lwIP(Lightweight IP)是一款专为嵌入式系统设计的轻量级TCP/IP协议栈,它以极低的资源占用和高效的性能著称,广泛应用于物联网设备、工业控制、智能家居等资源受限场景。作为嵌入式网络开发的核心组件,lwIP能够在仅几十KB的RAM和ROM空间中实现完整的TCP/IP协议族功能,为嵌入式设备提供稳定可靠的网络连接能力。 ## 一、lwIP的核心优势与应用场景 ### 1.1 轻量
轴承寿命预测 | 基于BiLSTM双向长短期记忆神经网络的轴承寿命预测附matlab完整代码
轴承寿命预测 | 基于BiLSTM双向长短期记忆神经网络的轴承寿命预测附matlab完整代码
lwIP RAW TCP/IP接口
lwIP为使用TCP/IP协议通信的应用程序编程提供了两种接口接口(APIs): * 低层次的称之为"core" / "callback" 或者 "raw" API * 高层次的称之为"sequential" API lwIP "sequential" API为使用T
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
//地址端口,一般建议值大于50000,使用htons(host to net short),进行地址转换(将一个无符号短整型数值转换为网络字节序,即大端模式)///地址IP,使用函数inet_addr(192.168.116.130);PF_UNIX == AF_UNIX ==>单机程序。功能:如果该函数在服务器端调用,则表示将参数1相关的文件描述符文件与参数2 指定的接口地址关联, 用于从该接口接受数据。参数:domain 地址族,PF_INET == AF_INET ==>互联网程序。
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
lwIP RAW TCP/IP接口 .
lwIP为使用TCP/IP协议通信的应用程序编程提供了两种接口接口(APIs): * 低层次的称之为"core" / "callback" 或者 "raw" API * 高层次的称之为"sequential" API lwIP "sequential" API为使用TCP/IP协议栈编程提供符合常规的、通用的途径,它与BSD socket API非常相似。程序的执行过程同样是基于"op
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

1万+



被折叠的 条评论
为什么被折叠?



