使用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,进行上电复位操作

cpp 复制代码
  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初始化

周期发送测试数据

cpp 复制代码
  udp_client_init();
  for(;;)
  {
    osDelay(1000);
	sprintf((char*)lwip_udp_send_buf,"UDP_client send\r\n");//周期发送UDP数据到远端IP
	lwip_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

相关推荐
努力创造奇迹2 小时前
STM32 HAL库 实现485通信
stm32·单片机·嵌入式硬件
Tlog嵌入式3 小时前
STM32提高篇: 以太网通讯
网络·stm32·单片机·嵌入式硬件·mcu·iot
番茄老夫子4 小时前
适合stm32 前端adc使用的放大器芯片
stm32·单片机·嵌入式硬件
m0_疾风5 小时前
STM32
stm32·单片机·嵌入式硬件
硬匠的博客5 小时前
C/C++基础
stm32·单片机·嵌入式硬件
LaoZhangGong1236 小时前
MCU屏和RGB屏
经验分享·stm32·单片机·嵌入式硬件·fsmc
格里姆肖6 小时前
LVGL源码(7):渲染
c语言·stm32·单片机
Geek__19929 小时前
STM32并口屏应用实例:点亮你的显示世界之程序篇
stm32·单片机·嵌入式硬件
OKay_J12 小时前
蓝桥杯备赛笔记(嵌入式)
笔记·stm32·学习·蓝桥杯
正点原子12 小时前
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——USB测试 #USB HOST #USB 鼠标
linux·功能测试·stm32·嵌入式硬件·计算机外设·usb