STM32407 FreeRtos系统下lwip实现发送和接收数据包进行链路测试

这篇具有很好参考价值的文章主要介绍了STM32407 FreeRtos系统下lwip实现发送和接收数据包进行链路测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

下面是一个基于STM32F407 FreeRTOS系统下lwIP实现发送和接收数据包进行链路测试的案例。

  1. 硬件配置和软件环境搭建

首先,需要准备好STM32F407开发板、以太网网线和一台电脑,然后在电脑上安装好STM32CubeMX工具和Keil MDK软件,创建一个新的工程,并按照以下步骤进行配置:

1)选择MCU型号:选择STM32F407VG。

2)设置系统时钟:将系统时钟设置为168MHz,选择HSI作为输入源。

3)配置以太网:使用MAC和PHY通信,选择RMII接口,将ETH1引脚分别连接到RST、REF_CLK、RXD0、RXD1、TXD0和TXD1引脚。

4)添加FreeRTOS:选择使用CMSIS-RTOS V2,创建一个线程以测试链路。

5)添加lwIP:选择使用STM32CubeMX生成的代码,将lwIP配置为DHCP客户端,生成相应的代码。

  1. 代码实现

下面是基于FreeRTOS和lwIP实现的链路测试代码:

1)创建线程

在main.c文件中,添加以下代码来创建一个线程来测试链路:

void StartDefaultTask(void const * argument)
{
  // create a UDP packet and send it to the target IP address and port
  struct udp_pcb *udp;
  struct pbuf *p;
  ip_addr_t dest_ip;
  err_t err;

  // set the target IP address
  IP4_ADDR(&dest_ip, 192, 168, 1, 100);

  while (1)
  {
    // allocate a UDP packet
    udp = udp_new();
    p = pbuf_alloc(PBUF_TRANSPORT, 10, PBUF_RAM);
    memcpy(p->payload, "0123456789", 10);

    // send the packet to the target IP address and port
    err = udp_sendto(udp, p, &dest_ip, 7);
    if (err != ERR_OK)
    {
      printf("Failed to send UDP packet: %d\n\r", err);
    }

    // free the packet and the UDP connection
    pbuf_free(p);
    udp_remove(udp);

    osDelay(1000);
  }
}

2)接收数据包

在main.c文件中,添加以下代码来接收数据包:

// create a UDP connection and bind it to a port
struct udp_pcb *udp;
err_t err;
ip_addr_t my_ip;
IP4_ADDR(&my_ip, 192, 168, 1, 200);
udp = udp_new();
err = udp_bind(udp, &my_ip, 7);
if (err != ERR_OK)
{
  printf("Failed to bind UDP port: %d\n\r", err);
}

// receive packets on the bound port
struct pbuf *p;
struct ip_addr src_ip;
u16_t src_port;
while (1)
{
  p = udp_recv(udp, (udp_recv_fn)udp_recv_callback, NULL);
  if (p != NULL)
  {
    printf("Received UDP packet of length %d\n\r", p->tot_len);
    udp_disconnect(udp);
    pbuf_free(p);
  }
  else
  {
    osDelay(1);
  }
}

接收数据包的回调函数如下:

void udp_recv_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
{
  // do nothing
}

3)配置lwIP

在lwipopts.h文件中,进行如下配置:

1)启用DHCP客户端:

#define LWIP_DHCP              1

2)设置IP地址:

#define LWIP_IPADDR            0xC0A801C8UL /* 192.168.1.200 */
#define LWIP_NETMASK           0xFFFFFF00UL /* 255.255.255.0 */
#define LWIP_GATEWAY           0xC0A80101UL /* 192.168.1.1 */

3)设置堆栈大小:

#define TCPIP_THREAD_STACKSIZE 2048
#define DEFAULT_THREAD_STACKSIZE 2048
  1. 编译和运行

配置好代码后,使用Keil MDK编译和下载代码到STM32F407开发板中。将开发板连接到网络,程序会自动获取IP地址,创建一个UDP连接并绑定到7号端口。线程将每隔1秒钟创建一个UDP数据包并发送给目标IP地址和端口。

在电脑上打开终端程序,并使用以下命令监听7号端口:

nc -lu 7

如果链路正常,可以看到网卡接收到数据包并将其打印出来。如果链路异常,可以检查网络连接和硬件配置是否正确。

基本概念:STM32F407VET6是一款基于ARM Cortex-M4内核的微控制器,具有高性能的处理能力和丰富的外设资源,包括Ethernet MAC接口。FreeRTOS是一款基于优先级的实时操作系统,可帮助实现可靠和高效的多任务处理。lwIP是一款轻量级的开源TCP/IP协议栈,可用于实现网络通信功能。

按照以下步骤进行操作:

  1. 配置硬件资源:使用STM32CubeMX工具生成代码,并配置Ethernet MAC接口和相关的时钟和引脚资源。

  2. 配置FreeRTOS环境:包括任务创建、任务优先级、时间片管理和内存管理等。

  3. 配置lwIP协议栈:包括IP地址、网关、子网掩码、UDP或TCP协议等。

  4. 实现数据包发送和接收功能:使用lwIP提供的API函数实现基本的网络通信功能,例如发送和接收UDP数据包或TCP连接。

  5. 进行链路测试:可以使用ping命令或其他工具测试网络连接是否正常。可以在服务器端和客户端之间互相发送数据包进行验证和调试。

需要注意一些常见问题和细节,例如网络配置、数据包大小、延迟和丢包等。可以参考STM32CubeMX和lwIP的官方文档,以及相关的示例代码和资源。

在实现过程中,还可以考虑使用一些额外的功能和服务,例如DHCP、DNS、SNMP、HTTP等。这些功能可以进一步扩展和优化节点的网络通信能力和自主性。文章来源地址https://www.toymoban.com/news/detail-660676.html

到了这里,关于STM32407 FreeRtos系统下lwip实现发送和接收数据包进行链路测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【通过STM32CubeMx配置LWIP+FreeRTOS并通过Socket实现TCP_Client/Sever】

    测试平台 → Nucleo_F429ZI 软件工具 → STM32CubeMx 6.6.1 MDK 5.3.0 网络调试助手V1.2 在CubeMx上面选择NUCLEO-F429ZI开发板,并采用默认配置 使能FreeRTOS 修改defaultTask的栈大小 由于使用了FreeRTOS,因此系统的TimeBase Source修改成TIM1 使能LWIP,并且先禁用DHCP,设置好静态IP Platform选择LAN8742 修改

    2024年02月08日
    浏览(20)
  • 【STM32】关于LWIP高频率快速发送大量数据(1MB以上)卡死问题解决 + 提高LWIP发送速率的办法

    STM32型号:STM32F47VGTx 初始LWIP版本:1.4.1 PHY: ksz8051 最近遇到了个问题,从sd卡读数据存储到一个1024大小的数组,每次读200个字节,while循环读取,每次读取完成后立即通过lwip的conn_write接口通过tcp方式发送出去。但是会出现发送速率只有9kb/s的情况,而且高频率快速发送大量数

    2024年02月04日
    浏览(16)
  • STM32使用三种方式(阻塞、中断、DMA)实现串口发送和接收数据

    记录下学习STM32开发板的心得的和遇见的问题。 板卡型号:STM32F405RGT6 软件:STM32CubeMX、IAR STM32串口外设提供了3种接收和发送方式:阻塞、中断、DMA,主要给大家分享中断方式接收不定长数据和DMA使用空闲中断接收不定长数据。 阻塞发送: 阻塞接收: 两个函数需要注意的就

    2024年02月03日
    浏览(23)
  • lwip:使用lwip UDP分包发送大量数据所遇问题以及解决方法(HPM6750、STM32)

    最近在调试HPM6750的项目时,考虑到调试方便需要将一些中间数据上传至PC分析,而且数据量又比较大,准备使用UDP分包发送,在调试的时候发现如下几个问题: sdk提供的lwip例程在使用时,分包会出现后一包的数据覆盖前一包数据的情况; 分包后,UDP首部校验和错误; sdk将

    2024年04月13日
    浏览(16)
  • STM32 CubeMX LwIP + freertOS 移植

    开发板: 官方 STM32F746  MCU型号:STM32F746NGH 网卡型号:LAN8742A  原理图如下 先用裸机测试LAN8742A的网卡驱动 使用CubeMX创建工程 系统时钟和时基定时器如下 无系统LWIP协议栈设置,静态IP地址,关闭DHCP 生产代码,下载进开发板。开发板网口与电脑网口通过网线直连,设置电脑本

    2024年01月16日
    浏览(61)
  • STM32F407+FreeRTOS+LWIP UDP组播

    MCU:STM32F407ZET6 网卡:LAN8720A LWIP版本:V1.1.0 FreeRTOS 版本:V10.2.1 MII_RX_CLK/RMII_REF_CLK ------PA1                   MII_TXD0 ------PB12 MII_MDIO  ------PA2                                                 MII_TXD1 ------PB13 MII_RESET ------PA3                

    2024年04月26日
    浏览(38)
  • STM32H743使用CubeMX配置Lwip、Freertos

    硬件:野火挑战者开发板STM32H743IIT6 软件版本: CubeMX 6.7.0 STM32CubeH7 Firmware Package V1.11.0 / 04-Nov-2022 原理图: 时钟树参数仅供参考 MPU配置需要查相关资料,一知半解 修改GPIO与硬件原理图对应,串口参数默认 参数配置与硬件对应 此处网络收发地址非常重要!!! 使能中断 串口

    2024年02月07日
    浏览(23)
  • STM-32:USART串口协议、串口外设—数据发送/数据发送+接收

    通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统。比如STM32芯片里面集成了很多功能模块,如定时器计数、PWM输出、AD采集等等,这些都是芯片内部的电路,它们的配置寄存器、数据寄存器都在芯片里面,操作简单,直接读写就行。但是有些功能STM32内部没有

    2024年02月04日
    浏览(26)
  • STM32 —— DMA 发送与接收数据详解

    DMA(Direct Memory Access) :直接存储器存取,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU ,即在传输数据的时候,CPU 可以干其他的事情,好像是多线程一样。数据传输支持从外设到存储器或者存储器到存储器,这里的存储器可以是 SRAM 或者是 FLASH DMA传

    2024年02月13日
    浏览(16)
  • 最详细STM32,cubeMX串口发送,接收数据

    这篇文章将详细介绍 串口 发送数据,接受数据。 实验开发板:STM32F103C8T6。 所需软件:keil5 , cubeMX 。 实验目的:了解 串口的基础知识,掌握串口如何发送,接收数据 。 实验:串口发送数据点亮 led。 如果想了解串口的基础知识可以参考我之前的文章: STM32Cube串口USART发送

    2024年02月04日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包