使用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 分钟前
STM32F103的启动过程
stm32·单片机·嵌入式硬件
idcardwang1 小时前
xl9555-IO拓展芯片
stm32·单片机·嵌入式硬件
Y1rong1 小时前
STM32之EXTI
stm32·单片机·嵌入式硬件
兆龙电子单片机设计1 小时前
【STM32项目开源】STM32单片机智能语音家居控制系统
stm32·单片机·嵌入式硬件·物联网·开源·自动化
意法半导体STM321 小时前
【官方原创】SAU对NSC分区的影响 LAT1578
stm32·单片机·嵌入式硬件·mcu·信息安全·trustzone·stm32开发
SmartRadio2 小时前
MK8000(UWB射频芯片)与DW1000的协议适配
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·dw1000
LDR0062 小时前
芯片电路的引脚标识代表什么?
stm32·单片机·嵌入式硬件
猪八戒1.03 小时前
中断(按键、SYSTICK、串口)
stm32·单片机·嵌入式硬件
chem41114 小时前
STM32 ISP下载
stm32·单片机·接口隔离原则
BreezeJuvenile4 小时前
ADC_案例练习:独立模式单通道转换
stm32·单片机·adc·hal·寄存器·单通道采集