LWIP UDP使用

news/2025/3/10 21:17:36/文章来源:https://www.cnblogs.com/T3rra/p/18687753

MCU: 小华HC32F4A0
板子没有合适的接口作为串口输出了,调试有点困难,想了个办法把lwip的UDP重定向到fputc函数
代码参考:https://www.cnblogs.com/54zorb/p/9609021.html
UDP相关代码

/********************************* UDP测试 ************************************/
/* udp控制块 */
static struct udp_pcb *upcb;/******************************************************************************* 描述  : 接收回调函数* 参数  : -* 返回  : 无
******************************************************************************/
static void udp_receive_callback(void *arg, struct udp_pcb *upcb,struct pbuf *p, const ip_addr_t *addr, u16_t port)
{uint32_t i;/* 数据回传 */udp_send(upcb, p);
//    udp_sendto(upcb, p, addr, port);/* 打印接收到的数据 */printf("get msg from %d:%d:%d:%d port:%d:\r\n",*((uint8_t *)&addr->addr), *((uint8_t *)&addr->addr + 1),*((uint8_t *)&addr->addr + 2), *((uint8_t *)&addr->addr + 3), port);if (p != NULL){struct pbuf *ptmp = p;while(ptmp != NULL){for (i = 0; i < p->len; i++){printf("%c", *((char *)p->payload + i));}ptmp = p->next;}printf("\r\n");}/* 释放缓冲区数据 */pbuf_free(p);
}/******************************************************************************* 描述  : 发送udp数据* 参数  : (in)pData 发送数据的指针* 返回  : 无
******************************************************************************/
void UDP_Client_Send(char *pData, uint16_t len)
{struct pbuf *p;/* 分配缓冲区空间 */p = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_POOL);if (p != NULL){/* 填充缓冲区数据 */pbuf_take(p, pData, len);/* 发送udp数据 */udp_send(upcb, p);/* 释放缓冲区空间 */pbuf_free(p);}
}/******************************************************************************* 描述  : 创建udp客户端* 参数  : 无* 返回  : 无
******************************************************************************/
void UDP_Client_Init(void)
{ip_addr_t serverIP;err_t err;IP4_ADDR(&serverIP, 192, 168, 1, 20);/* 创建udp控制块 */upcb = udp_new();if (upcb!=NULL){/* 配置本地端口 */upcb->local_port = UDP_LOCAL_PORT;/* 配置服务器IP和端口 */err= udp_connect(upcb, &serverIP, UDP_REMOTE_PORT);if (err == ERR_OK){/* 注册接收回调函数 */udp_recv(upcb, udp_receive_callback, NULL);/* 发送udp数据 */char text[] = "udp client connected";UDP_Client_Send(text, sizeof(text));printf("udp client connected\r\n");}else{udp_remove(upcb);printf("can not connect udp pcb\r\n");}}
}

在主函数里调用UDP_Client_Init即可

相关头文件

#include "lwip/udp.h"#define UDP_REMOTE_PORT			2025
#define UDP_LOCAL_PORT			2024
// UDP相关
extern void UDP_Client_Init(void);
extern void UDP_Client_Send(char *pData, uint16_t len);

头文件可能有缺漏,根据报错把改包含的加进来
lwipopts.h里的UDP开关需要开启,设为1

/* ---------- UDP options ---------- */
#define LWIP_UDP                        1

hc32_ll_utility.c里修改fputc函数

int32_t fputc(int32_t ch, FILE *f)
{(void)f;  /* Prevent unused argument compilation warning */char a = ch;UDP_Client_Send(&a, 1);return ch;
}

效果如下图
netassist

image

用sscom更方便看UDP输出的调试信息

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873692.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型论文精选|| 多 LLM 文本摘要:创新方法与卓越成果

多LLM文本摘要:创新方法与卓越成果 论文 https://arxiv.org/abs/2412.1多LLM文本摘要:创新方法与卓越成果论文 https://arxiv.org/abs/2412.15487 Multi-LLM Text Summarization 2412.15487 多LLM摘要框架在每一轮对话中有两个至关重要的步骤:生成和评估。根据使用的是多LLM…

国产化板卡设计原理图:2018-基于双FT-M6678 DSP的3U VPX的信号处理平台

基于双FT-M6678 DSP的3U VPX的信号处理平台一、板卡概述该板卡是由我公司自主研发的基于3U VPX架构的信号处理板,该处理板包含2片 FT-M6678 DSP芯片,1片 Spartan-3系列XC3S200AN配置芯片,两片DSP分别有1路RapidIO x4连接至VPX背板,两片DSP之间通过Hyperlink x4和SGMII互联。…

国产化板卡设计原理图:2288-基于FMC接口的JFM7K325T PCIeX4 3U VPX接口卡

基于FMC接口的JFM7K325T PCIeX4 3U VPX接口卡 一、板卡概述 标准VPX 3U板卡, 基于JFM7K325T 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8、64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持各种接口输入,软件支持windows,Linux驱动。可应用于高性能计算,频域算…

vue template 转 jsx 写法及TS类型应用

vue 的响应式数据 + jsx 开发体验简直不要太好,心智负担确实小,简直完爆 react(纯属个人暴论),不足的地方就是生态了,这点确实比不过 react。 本文更侧重于 TS 类型的写法,毕竟初次接触 vue jsx 时,实在对其 TS 类型声明很不顺手。要说 vue 模板语法哪些 API 不能在 js…

团队任务分配与高效执行应该如何做?从这些方面合理调配

本文聚焦团队任务分配与高效执行,深度剖析团队协作中任务分配不合理、沟通协作障碍、目标不明确、缺乏有效监督反馈等痛难点,阐述团队协作的必要性,进而给出合理分配任务、加强沟通协作等解决方法,还推荐了相关工具,为提升团队效能提供指引 。一、团队协作的痛难点 (一)…

2025.1.23

今天正式开始YOLOv8的相关学习。 YOLOv8的架构设计主要体现在以下几个方面:1. 改进的特征提取网络    YOLOv8在特征提取网络方面进行了显著改进,采用了更深、更宽的网络结构,以提高对复杂场景的处理能力。CSPNet(Cross Stage Partial Network):    CSPNet的引入有…

Android平台从上到下,无需ROOT/解锁/刷机,应用级拦截框架的最后一环,SVC系统调用拦截。

Android平台从上到下,无需ROOT/解锁/刷机,应用级拦截框架的最后一环,SVC系统调用拦截。Android平台从上到下,无需ROOT/解锁/刷机,应用级拦截框架的最后一环 —— SVC系统调用拦截。☞ Github: https://www.github.com/iofomo/abyss ☜ 由于我们虚拟化产品的需求,需要支持…

Seq 日志: .NET 应用程序中集成与快速入门

Seq 是一个功能强大且易于使用的日志服务器,特别适合用于集中管理和可视化 .NET 应用程序的日志。它支持结构化日志记录,提供实时查询和分析功能,帮助开发者快速定位和解决问题。 安装和配置 SeqWindows 部署: 可以从 Seq 下载页面:https://datalust.co/download 获取最新…

折腾笔记[11]-使用rust进行直接法视觉里程计估计

使用rust实现了一个完整的直接法视觉里程计系统,能够通过比较两幅图像中的像素强度来估计相机的运动。它通过单层和多层的优化策略,结合图像金字塔和并行计算,提高了位姿估计的精度和效率。最终,代码输出了优化后的相机位姿变换矩阵,并可视化了投影点的位置。摘要 使用rus…

5 链路层

5 链路层 5.1 概述 节点(node):运行链路层协议的设备(主机、路由器、交换机、WiFi接入点) 链路(link):沿着通信路径连接相邻节点的通信信道 数据链路层(data link layer):将数据报封装在链路层帧(frame)中通过通信链路从一个节点传输到另一个节点 链路层提供的服务…

【动态规划】01背包专题

01背包在恰好等于的情况下求最小物品数 MELON的难题每个物品(石头)的价值w[i]就是其自己的个数,为1 体积题目已给出。 状态定义:f[i][j]表示在前i个物品中选,且体积总和恰好等于j需要的物品个数的最小值 初始化: f[i][0] = 0 , 1 <= i <= n f[0][j] = INF, 1 <=…

阿里开源语音克隆CosyVoice2 整合包

CosyVoice2 win整合包 语音克隆CosyVoice2 链接:https://pan.quark.cn/s/5e75615a5cd4 修改webui.py默认值: # 修改默认推理模式 mode_checkbox_group = gr.Radio(choices=inference_mode_list, label=选择推理模式, value=inference_mode_list[1])# 修改随机推理种子 seed =…