使用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

相关推荐
糖糖单片机设计5 分钟前
基于STM32的电子密码锁设计与实现(矩阵键盘+防拆检测+GSM远程报警)
人工智能·stm32·单片机·嵌入式硬件
充哥单片机设计40 分钟前
【STM32开源项目】智能家电控制系统
stm32·单片机·嵌入式硬件·毕业设计·智能家电控制·家电控制
捷瑞电子工坊5 小时前
嵌入式蓝桥杯从零点亮第一个LED
stm32·蓝桥杯·cubemx·嵌入式·led·ll·锁存
新晨单片机设计6 小时前
S004R-基于STM32单片机智能门禁系统(密码、指纹、人脸、刷卡、蓝牙)【Proteus仿真+Keil程序+原理图】
stm32·单片机·嵌入式硬件·proteus
桀人6 小时前
MCU系统架构——总线——统一编址
stm32·单片机·嵌入式硬件
可乐鸡翅好好吃7 小时前
通讯协议--硬件模拟和软件模拟
stm32·嵌入式硬件
Zw-awa7 小时前
STM32F103C8T6 最小系统板:从型号差异到启动方式
stm32
LCG元18 小时前
STM32F103 驱动 HX711 称重实战:DOUT 就绪时序、增益切换陷阱与两点标定精度实测
stm32·单片机·嵌入式硬件
染予18 小时前
代码中相关C语言知识点总结
stm32
优信电子19 小时前
STM32 驱动 DHT30 测量环境温湿度(兼容SHT30):从时序解析到完整代码实战
stm32·嵌入式·传感器·sht30·温湿度·环境测量·dht30