当前位置: 首页 > news >正文

使用stm32cubeide stm32f407 lan8720a freertos lwip 实现udp client网络数据转串口数据过程详解

1前言

项目需要使用MCU实现网络功能,后续确定方案stm32f407 外接lan8720a实现硬件平台搭建,针对lan8720a也是用的比较多的phy,网上比较多的开发板,硬件上都是选用了这个phy,项目周期比较短,选用了这个常用phy。记得十年前,刚参加工作那会接触的第一个项目,就是MCU实现网络控制协议,当时lwip也不是很流行呢,网络协议栈只能手撕了,当时硬着头皮写,最多也写到UDP,不过对付当时的项目也够用了。抽时间,可以把当时手撕UDP的协议拿出来再看看。技术都是不断的更新迭代,十年后,现在stm32cubeide、stm32cubemx等软件都集成了lwip,这让开发更快速、便捷。但是作为过来人建议,初学者,最好刚开始还是使用固件库、lwip的源码移植,这样对系统理解的更深刻,毕竟网络协议栈真是一门大学问。

文章使用工程下载地址

udp客户端,具体测试过程参考5.3/5.4章节

https://download.csdn.net/download/li171049/90577013

udp服务端,具体测试过程参考5.5章节

https://download.csdn.net/download/li171049/90581052

2硬件设计

lan8720a的硬件原理图比较成熟,没啥特别要注意的,lan8720a和stm32f407采用rgmii的接口。

stm32f407采用串口6作为调试串口,直接通过ttl,也就是该串口的数据可以通过网络数据发送出来,也可以接收到网络数据通过该串口打印出来。

3软件设计

采用STM32CubeIDE 1.17.0,针对硬件配置如下

 3.1时钟配置

3.2总体配置

如下图所示

3.3phy的复位管脚

3.4ETH的配置

如下图所示,选用RMII模式,这里需要注意,Rx Mode的配置为默认即可,针对采用操作系统、和不使用操作系统,该选项的配置会自动更改。

 

  3.5 freeRTOS的配置

这里增大默认任务堆栈,不然会出现堆栈溢出错误。

3.6lwip的配置

主要是采用静态IP,不开启DHCP,针对电脑进行ping包测试。

 4关键代码

4.1phy开机复位

针对phy复位IO,进行上电复位操作

  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);HAL_Delay(55);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);HAL_Delay(55);

 4.2UDP初始化

周期发送测试数据

  udp_client_init();for(;;){osDelay(1000);sprintf((char*)lwip_udp_send_buf,"UDP_client send\r\n");//周期发送UDP数据到远端IPlwip_udp_send_flag |= LWIP_SEND_DATA;			//标记有数据需要发送udp_client_send_data();}

 5测试记录

5.1测试电脑IP配置

与板卡配置为同一网段,192.168.1.22

 5.2ping包测试

电脑的的ping包测试

5.3网络调试助手接收、发送udp数据 

使用网络调试助手,监听192.169.1.22:1500端口号,

测试如下图所示,可以看到能够周期接收到UDP_client send

同时发送192.169.1.70:1500,QQQ,可以看到串口能够收到对应字样

5.4串口工具接收网口数据

串口接收,随便使用一个串口工具,配置波特率115200,即可

5.5udp server测试记录

如下图所示,针对udp server测试记录,STM32工程中使用UDP server绑定1400端口号进行数据监听,收到数据后,将数据原路返回发送,同时通过串口打印接收到的数据,具体测试记录如下图所示。

6 文章使用工程下载地址

udp客户端,具体测试过程参考5.3/5.4章节

https://download.csdn.net/download/li171049/90577013

udp服务端,具体测试过程参考5.5章节

https://download.csdn.net/download/li171049/90581052

 


http://www.mrgr.cn/news/97568.html

相关文章:

  • JavaScript基础--22-call、apply 和 bind
  • #MongoDB 快速上手
  • springcloud进阶
  • Python星球日记 - 第10天:模块与包
  • php调用大模型应用接口实现流式输出以及数据过滤
  • 原子操作(cpp atomic)
  • UE4初学笔记
  • Vue3+Vite+TypeScript+Element Plus开发-06.Header响应式菜单缩展
  • 2025 数字中国创新大赛数字安全赛道数据安全产业积分争夺赛初赛-东部赛区WriteUp
  • C++第14届蓝桥杯b组学习笔记
  • xv6-labs-2024 lab2
  • 深入解析嵌入式Linux系统架构:从Bootloader到用户空间 - 结合B站视频教学
  • 【Android Audio】Parameter Framework - pfw
  • LeetCode 解题思路 33(Hot 100)
  • JavaScript基础--20-JavaScript 预编译机制深度解析
  • 【CPP】内存泄漏详解
  • Ollama
  • spring boot + Prometheus + Grafana 实现项目监控
  • Android 学习之 Navigation导航
  • PyTorch 笔记