目录

前言

一、STM32CubeMX配置

二、修改代码

三、硬件测试

总结

前言

该工程应用的以太网芯片是LAN8720,代码是基于STM32CUbeMx6.2.1配置生成的,在CubeMx中配置了ETH和LWIP,还有串口1和FREERTOS,最后通过创建任务函数实现udp的以太网数据收发功能。在测试中,可以在电脑的DOS窗口ping通在LWIP设置的单片机开发板的ip地址,通过网络调试助手可以实现数据的收发功能。

一、STM32CubeMX配置

1、选择STM32F407VET6芯片创建工程,首先配置RCC和SYS,再配置时钟,配置界面如下

2、配置ETH,配置界面如下

3、配FREERTOS和LWIP,配置界面如下

4、分配中断优先级,配置界面如下(如果需配置串口,先配置一下串口)

5、到这里,CubeMX就算配置完成了,就可以生成代码了

二、修改代码

1、打开生成的工程文件,找到HAL_ETH_MspInit函数,在最下面添加芯片复位的三行代码(作用是在芯片初始化时,对芯片复位一下,该芯片复位引脚对应我单片机开发板上的PA3)

2、在main.c中添加修改函数,首先是包含的文件,然后是创建任务函数,

#include "main.h"
#include "cmsis_os.h"
#include "lwip.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */#include "stdio.h"
#include "udp_echoserver.h"
/* USER CODE END Includes */
/* USER CODE BEGIN 0 */
void controlTask(void * param)
{MX_LWIP_Init();vTaskDelete( NULL );}
void commandTask(void * param)
{udp_echoserver_init();while(1){vTaskDelay(2);}}TaskHandle_t StartTaskHandle;
void StartTask(void * arg)
{taskENTER_CRITICAL();          xTaskCreate(controlTask, "controlTask", 200,NULL,4,NULL);xTaskCreate(commandTask, "commandTask", 200,NULL,4,NULL);vTaskDelete(StartTaskHandle); taskEXIT_CRITICAL();
}
/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */printf("³õʼ»¯Íê±Ï");xTaskCreate(StartTask,"commanderTask",200,NULL,2,&StartTaskHandle);vTaskStartScheduler();/* USER CODE END 2 *//* Call init function for freertos objects (in freertos.c) */MX_FREERTOS_Init();/* Start scheduler */osKernelStart();/* We should never get here as control is now taken by the scheduler *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

2、此时在电脑上是能够PING通在CubeMx中配置的ip地址的,如果需要实现udp数据收发功能,还需要创建功能文件,代码如下

void udp_echoserver_init(void)
{struct udp_pcb *upcb;err_t err;/* Create a new UDP control block  */upcb = udp_new();if (upcb){/* Bind the upcb to the UDP_PORT port *//* Using IP_ADDR_ANY allow the upcb to be used by any local interface */err = udp_bind(upcb, IP_ADDR_ANY, UDP_SERVER_PORT);if(err == ERR_OK){/* Set a receive callback for the upcb */udp_recv(upcb, udp_echoserver_receive_callback, NULL);}else{udp_remove(upcb);// printf("can not bind pcb");}}else{// printf("can not create pcb");}
}
uint8_t receivebuf[30] = {0};
//uint8_t send_buf[2] = {0x01,0x02};
uint8_t send_buf[] = "ÒѾ­ÊÕµ½Êý¾Ý";
int receivelen = 0;
void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p,const struct ip4_addr *addr, u16_t port)
{struct pbuf *pq;   //´´½¨Ò»¸ö½á¹¹Ìå±äÁ¿receivelen = p->len;memcpy(receivebuf,p->payload,p->len);//p->payloadÖ¸½ÓÊÕµ½µÄʵ¼ÊÊý¾Ý£pp->lenÊÇÖ¸½ÓÊÕµ½µÄÊý¾Ý³¤¶È£»£»½«p±äÁ¿½ÓÊÕµ½µÄÊý¾Ý¸´ÖƵ½receivebufÀïÃæpbuf_free(p);//ÊÍ·Åpudp_connect(upcb, addr, UDP_CLIENT_PORT);  //½¨Á¢udpÁ¬½Ópq = pbuf_alloc(PBUF_TRANSPORT,14,PBUF_POOL);//allocate memory  14Ï൱ÓÚ·ÖÅä14¸ö×Ö½Úpbuf_take(pq,(char*)receivebuf,14);//copy data to bufudp_send(upcb,pq);//send udp datamemset(receivebuf,0x00,30);  //Çå³ý»º´æudp_disconnect(upcb);pbuf_free(pq);    //  /* Connect to the remote client */
//  udp_connect(upcb, addr, UDP_CLIENT_PORT);
//
//  /* Tell the client that we have accepted it */
//  udp_send(upcb, p);//  /* free the UDP connection, so we can accept new clients */
//  udp_disconnect(upcb);
//
//  /* Free the p buffer */
//  pbuf_free(p);
}

三、硬件测试

1、用网线将开发板和电脑网口连接上,配置电脑的ip地址,然后可以在电脑的DOS串口ping通开发板的IP地址,测试界面如下

2、用网线将开发板和电脑网口连接上,打开网络调试助手,测试数据收发功能

总结

以上是我对LAN8720以太网芯片的应用,希望对大家有帮助

整个工程代码下载:https://download.csdn.net/download/weixin_64705314/87672487?spm=1001.2014.3001.5503

STM32CubeMX+STM32F407+FreeRTos+LAN8720 以太网通信实现数据收发功能相关推荐

  1. 关于stm32f407接LAN8720以太网通信调试

    终于有个时间总结一下关于lan8720的调试过程. 调试之前也是翻阅了各大微博,各大论坛,详细的认真的看了每一位大神发表的文章.取其精华去其糟粕,最终调通了lan8720的驱动.话不多说,切入正题. ...

  2. STM32F407+FreeRTOS+LAN8720+LWIP+STM32CubeMX+DHCP

    记录一下通过STM32CubeMX配置STM32F407使用lan8720A使用lwip实现dhcp功能,使用硬件正点原子战舰开发板,STM32CubeMX版本6.4:FreeRTOS版本10.2.1 ...

  3. STM32F407多路串口通信进行数据收发

    一直被说是就不能把几个串口放在一起,写个标准例程直接用,非要每次用哪个串口才现场改程序,被迫把usart1,usart2,usart3进行了资源整合,挂在这以备不时之需. 功能简述: 串口1,串口2, ...

  4. 485通信实现自动收发功能

    在平时使用485通信时,好多人往往首选的就是MAX485芯片,如下图所示: 常规的方法就是使用RE和DE引脚通过程序来切换接收数据和发送数据,但是这样写起程序来比较麻烦,调试起来也比较费劲.为了方便的 ...

  5. STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现

    通过STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现 本文使用了正点原子的阿波罗开发板,接下来我将粗略的对STM32F767通过STM32cubeMX ...

  6. 来吧展示!以太网配合FreeRTOS实现socket通信!实战STM32F4以太网DP83848配合LWIP

    目的:实现STM32F407+FreeRTOS+Ethernet(DP83848)+Lwip实现socket通信,在实现之前我们先来了解下几点储备知识 一. 以太网行业标准MII/RMII 1 以太网 ...

  7. DE2-115 以太网通信之一88E1111网卡接收PC数据

    想利用手头上的DE2-115 写一个关于以太网通信的驱动,经过了这么多天的实验调试终于有了一些认识. 1.我在观察网卡发送数据与接收数据的过程中发现,我从fpga上的一个网卡发送数据,然后另一个网卡接 ...

  8. 以太网通信(1)UDP —— 数据发送

    目录 一.以太网通信简介 1.OSI七层模型 2.以太网数据包解析 3.IP首部校验和计算与检验 二.以太网通信实例 1.整体实验框图 2.发送部分时序图 3.实验代码及仿真结果 总结 一.以太网通信 ...

  9. 项目:基于以太网通信,单片机作为客户端,接收CAN-Ethernet的十六进制数据

    一.物理连接 二,流程分析 电脑连接CAN分析仪,电脑通过软件USB-CAN把can十六进制数据发到CAN分析仪.CAN分析仪连接CAN转以太网设备,数据通过CAN转以太网设备后,通过网线传送到单片机 ...

最新文章

  1. react复习总结(1)--react组件开发基础
  2. 通过NVIDIA PilotNet,人人都能变成人工智能的老师
  3. android tesseract-ocr实例教程(包含中文识别)(附源码)
  4. 简单的session共享的封装
  5. Java 洛谷 P1002 过河卒讲解
  6. DTO(领域数据传输对象)是做什么的
  7. 手把手引进门之 ASP.NET Core Entity Framework Core(官方教程翻译版 版本3.2.5)
  8. html中的分页条怎么写,如何写分页(含HTML)
  9. Java™ 教程(控制流语句)
  10. VB实训项目:学生成绩管理系统V1.0
  11. 最新25个高质量PSD素材免费下载
  12. Java_脚本引擎_01_用法入门
  13. 路由器的级联(LAN-WAN)
  14. 【知识点】信道路径衰落分类、计算公式、换算
  15. 我去,神操作!虚拟机Ubuntu18.04居然可以安装NVIDIA + 附带安装源码与命令
  16. java图片裁剪类似qq头像_Android实现类似换QQ头像功能(图片裁剪)
  17. 集美大学计算机专业2020,2020年集美大学计算机应用技术考研调剂
  18. USB接口无法识别设备
  19. linux中常用nginx命令
  20. java评论、回复功能设计和实现

热门文章

  1. 【论文笔记】一些关于区块链的激励系统的论文笔记
  2. Lecture 16 Dependency Grammar
  3. Htb socket wp
  4. Java GridLayout(网格布局)布局管理器
  5. 对增益、相位裕度的个人理解
  6. 计算机音乐版,计算机音乐多开版
  7. 工业物联网必然成为第四次工业革命的领潮者
  8. 拒绝从网络访问这台计算机没有用户,拒绝从网络服务器访问此 (Windows 10) - Windows security | Microsoft Docs...
  9. 读书笔记-OpenCL编程指南 简介
  10. debian 安装 opencl