终极末影龙 2023-09-16 11:01 采纳率: 0%
浏览 11

LWIP使用RAW API实现UDP回传昌数据失败

板子:STM32F103VE
网卡:ENC28J60

基于STM32F103使用LWIP,使用RAW API实现UDP回传实验
当调试助手发送的数据小于1455字节的时候,能够正常回显

img

当发送数量大于等于1455字节的时候,调试助手不能收到回显

img

我在UDP回调函数里面打印了信息,一旦它被调用(即收到调试助手的数据)就会通过串口打印信息。
当调试助手发送的数据小于1455字节的时候,能够正常打印。

img

当发送数量大于等于1455字节的时候,不能打印。这似乎说明回调函数没有被调用

同样的当调试助手发送的数据小于1455字节的时候,WireShark抓包正常。

img

当发送数量大于等于1455字节的时候,抓不到单片机发过来的包。这似乎更加印证是回调函数没有被调用。

img

我不知道为什么会这样,网上说的方法我试过都不行。

下面是UDP回调函数,LWIP与UDP初始化函数

img

下面是lwipopts.h文件

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-16 12:07
    关注

    【以下回答由 GPT 生成】

    // UDP回调函数
    void udp_callback(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
    {
        // 打印收到的数据
        for (int i = 0; i < p->len; i++)
        {
            printf("%c", ((char *)p->payload)[i]);
        }
        printf("\r\n");
    
        // 发送回复数据
        udp_sendto(pcb, p, addr, port);
    
        // 释放pbuf
        pbuf_free(p);
    }
    
    // LWIP与UDP初始化函数
    void init_lwip(void)
    {
        // 初始化LWIP
        lwip_init();
    
        // 创建UDP PCB
        udp_pcb *pcb = udp_new();
    
        // 绑定IP地址和端口
        ip_addr_t ipaddr;
        IP4_ADDR(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3);
        udp_bind(pcb, &ipaddr, PORT);
    
        // 注册回调函数
        udp_recv(pcb, udp_callback, NULL);
    }
    
    // lwipopts.h文件内容
    #define IP_ADDR0   192
    #define IP_ADDR1   168
    #define IP_ADDR2   1
    #define IP_ADDR3   100
    #define PORT       5000
    

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月16日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。