STM32开发之LWIP UDP示例记录(带FreeRTOS)

DEMO

//
// Created by shchl on 2024/3/8.
//
#include <string.h>
#include "main.h"
#include "lwip/udp.h"
#include "FreeRTOS.h"
#include "task.h"

void udp_task_run(void *args);

static TaskHandle_t upd_handle;

void create_udp_thread() {
    xTaskCreate((TaskFunction_t) udp_task_run,
                (const char *) "udp_task",
                (uint16_t) 256,
                (void *) NULL,
                (UBaseType_t) 10,
                (TaskHandle_t *) &upd_handle);
}

static void udp_demo_callback(void *arg,
                              struct udp_pcb *upcb,
                              struct pbuf *p,
                              const ip_addr_t *addr,
                              u16_t port) {
    struct pbuf *q = NULL;
    // todo 业务逻辑
    udp_send(upcb, p);
    printf("接收来自远端:%s", (char *) p->payload);
    pbuf_free(p);


}

static char *st_buffer = "We get a data\n";
extern struct netif g_lwip_netif;

void udp_task_run(void *arg) {
    struct pbuf *q;
    struct udp_pcb *udpecho_pcb;
    /*创建一个pbuf数据包*/

    /* 新建一个控制块*/
    udpecho_pcb = udp_new();
    /*设置远端连接信息*/
    udpecho_pcb->remote_port = 8080;
    IP4_ADDR(&udpecho_pcb->remote_ip, 192, 168, 8, 2);
    /* 绑定本地端口号 */
    udp_bind(udpecho_pcb, &g_lwip_netif.ip_addr, 8000);
    /* 注册接收数据回调函数 */
    udp_recv(udpecho_pcb, udp_demo_callback, (void *) st_buffer);
    int ttl = 0;
    while (1) {
        while (ttl > 100) {
            q = pbuf_alloc(PBUF_TRANSPORT, strlen(st_buffer), PBUF_POOL);
            pbuf_take(q, st_buffer, strlen(st_buffer));
            udp_send(udpecho_pcb, q);
            pbuf_free(q);
            ttl = 0;
        }
        ttl++;
        vTaskDelay(10);
    }
}

结果

在这里插入图片描述

lwip是怎么调用到udp的回调流程

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: STM32CubeIDE是ST公司推出的一款开发工具,用于开发STM32系列微控制器。 LWIP(Lightweight IP)是一个轻量级的开源TCP/IP协议栈,适用于嵌入式系统。 在STM32CubeIDE中使用LWIP库进行UDP通信,可以通过以下步骤实现: 1. 首先,需要创建一个新的STM32项目,并选择合适的型号和外设。在项目配置中,选择LWIP库,并启用UDP协议。 2. 在代码中,需要进行一些配置。首先,在"LwIP SYS"组件中,设置正确的IP地址和子网掩码。然后,在"LwIP UDP"组件中,配置正确的端口号,以及设置允许UDP广播和多播。 3. 接下来,需要创建UDP通信的客户端和服务器端。客户端需要创建一个socket,并设置目标IP地址和端口号。然后,可以使用lwip_sendto函数发送UDP数据包。 4. 服务器端需要创建一个socket,并绑定到本地IP地址和端口号。然后,使用lwip_recvfrom函数接收来自客户端的UDP数据包。 5. 在接收到UDP数据包后,可以对数据进行处理,并根据需要进行相应的操作。例如,可以将数据发送到其他设备,或者执行相应的程序逻辑。 通过以上步骤,就可以在STM32CubeIDE中使用LWIP库实现UDP通信。在实际应用中,根据具体需求,可以进一步优化代码和功能,以实现更复杂的通信功能。 ### 回答2: STM32CubeIDE是STMicroelectronics推出的一款面向STM32微控制器的集成开发环境。它集成了STM32CubeMX配置工具和TrueSTUDIO IDE,可以方便地进行STM32微控制器的开发和调试。 lwIP是一个轻量级的嵌入式TCP/IP协议栈,它为嵌入式系统提供了网络通信功能。在STM32CubeIDE中,可以通过lwIP协议栈实现UDP通信。 在使用STM32CubeIDE进行lwIP UDP通信时,首先需要通过STM32CubeMX配置工具进行初始化设置。在配置工具中,可以选择启用lwIP协议栈,并设置相关的网络参数,如IP地址、子网掩码、网关等。同时,还可以选择启用UDP协议,并设置相关的端口号。 配置完成后,生成代码并导入到STM32CubeIDE中。接下来,可以在工程中编写相关的代码实现UDP通信功能。首先,需要创建一个UDP Socket,并设置相关的参数,如IP地址和端口号。然后,可以使用lwIP提供的API函数发送和接收UDP数据包。 发送UDP数据包时,可以使用lwIP提供的函数lwip_sendto(),将要发送的数据和目标地址通过参数传入。接收UDP数据包时,可以使用lwIP提供的函数lwip_recvfrom(),指定接收数据的缓冲区和缓冲区大小,并将接收到的数据和发送方的地址存储在传入的参数中。 通过以上的步骤,就可以在STM32CubeIDE中实现lwIP UDP通信。用户可以根据实际需求进行相关的配置和代码编写,以实现网络通信功能。需要注意的是,在使用lwIP协议栈时,需要了解其相关的API函数和使用方法,以确保正确实现所需功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

詩不诉卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值