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

这篇具有很好参考价值的文章主要介绍了STM32CubeMX+STM32F407+FreeRTos+LAN8720 以太网通信实现数据收发功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、STM32CubeMX配置

二、修改代码

三、硬件测试

总结

前言

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

一、STM32CubeMX配置

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

二、修改代码

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

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

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

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数据收发功能,还需要创建功能文件,代码如下

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

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);//ÊÍ·Åp
	
  udp_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 buf
	udp_send(upcb,pq);//send udp data
	memset(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地址,测试界面如下

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

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

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

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

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

总结

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

整个工程代码下载:https://download.csdn.net/download/weixin_64705314/87672487?spm=1001.2014.3001.5503文章来源地址https://www.toymoban.com/news/detail-477997.html

到了这里,关于STM32CubeMX+STM32F407+FreeRTos+LAN8720 以太网通信实现数据收发功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32的以太网外设+PHY(LAN8720)使用详解(3):PHY寄存器详解

    前面介绍到,站管理接口(SMI)允许应用程序通过2线时钟和数据线访问任意PHY寄存器,同时该接口支持访问最多32个PHY,也就是说PHY地址共有5位。 应用程序可以从32个PHY中选择一个PHY,然后从任意PHY包含的32个寄存器中选择一个寄存器,发送控制数据或接收状态信息。任意给

    2024年02月03日
    浏览(35)
  • 【STM32】HAL库-以太网外设-LAN8720A-LWIP-无操作系统

    KEIL:MDK_ARM_5.27 MCU:STM32F429IGT6 PHY_IC:LAN8720A LWIP:LWIP2.1.2 STM32CUBEMX:6.6.1 HAL:V1.27.1 LAN8720A使用RMII接口与STM32的ETH外设进行数据通信 STM32使用SMI接口读/写LAN8720A的寄存器 LAN8720A由外部25MHz晶振提供时钟,LED2/NINTSEL引脚配置为下拉,故PHY(LAN8720A)提供50MHz时钟给RMII的NINT/REFCLKO(此时引脚

    2024年02月08日
    浏览(35)
  • 关于STM32F4和GD32F4以太网,LAN8720+lwip+freemodbus,实现modbus tcp

    关于STM32F4和GD32F4以太网,LAN8720+lwip+freemodbus 这里使用了大佬 小灰灰搞电子 的代码,文章看 STM32F407+LAN8720移植Lwip和freeModbus实现MODBUS TCP 代码看 STM32F407+LAN8720+LWIP移植freemodbus TCP.zip 他的代码是基于正点原子F407的板子开发的,如果是别的板子,需要修改引脚 小灰灰的代码里,没

    2024年02月14日
    浏览(22)
  • ESP32以太网(ETH)环境和参数配置,基于内部mac和外部PHY(LAN8720A)

    ESP32在网上的资料很多,但问题也各式各样。由于ESP32主要做wifi功能,因此对于以太网的资料也很少。相对应的开发板也很少。 本人使用的是淘宝上购买的雨甄机电的带网口的开发板(如下图) 安信可ESP-32S 参考资料主要以热心博主《兴趣使然_ 》的 (5条消息) ESP32 单片机学习

    2024年02月15日
    浏览(30)
  • 【ETH】以太网----PHY芯片LAN8720A----电路原理图

    LAN8720A 是低功耗的 10/100M 以太网 PHY 层芯片,I/0 引脚电压符合EEE802.3-2005 标准,支持通过 RMI 接口与以太网 MAC 层通信,内置 10-BASE-T/100BASE-TX 全双工传输模块,支持 10Mbps 和 100Mbps。 LAN8720A 可以通过自协商的方式与目的主机最佳的连接方式(速度和双工模式),支持 HPAuto-MDIX 自动

    2024年02月06日
    浏览(72)
  • STM32F407+LWIP+DP83848以太网驱动移植

      最近有个项目上需要用到网络功能,于是开始移植网络相关代码。在移植的过程中感觉好难,网上找各种资料都没有和自己项目符合的,移植废了废了好的大劲。不过现在回头看看,其实移植很简单,主要是当时刚开始接触网络,各种新的知识和概念扑面而来,加上LWI

    2024年02月12日
    浏览(23)
  • STM32H723配置以太网+Freertos注意事项

    由于STM32H743涨价到300元以上,项目换用了Pin2Pin替换的STM32H723,看上去cpu运行速度快了20%达到550Mhz。 但是内存布局存在很大不一样,而且ST官方代码库升级迭代快,要手动修改地方每个版本不一样,在有H743的经验下,花了2天时间搞好了记录一下。很多信息来源于英文ST支持论

    2023年04月18日
    浏览(26)
  • STM32F407以太网DMA描述符和数据链路层收发数据

    本文主要介绍STM32F407单片机MAC内核的DMA描述符,以及如何实现以太网二层的数据收发。这一篇先实现数据链路层的正常收发,下一篇再去介绍如何把LWIP移植到单片机上。大部分资料都是把LWIP移植和以太网卡驱动放在一起介绍,对新手不友好。所以我在这篇文章先把网卡驱动

    2024年02月10日
    浏览(32)
  • STM32H743+LWIP+LAN8720+STM32cubeMX6.8.0

    最详细 一步到位 带程序 无偿分享   经历一个星期的痛苦,程序终于调试ping通了 网上的H743的博客我一个一个试一个一个试,到最后没有一个正常ping通,写本篇博客的目的就是为了后续再进行调试的人不在踩坑,听懂掌声,哈哈哈。 废话就不多说了,正文开始: 1、打开S

    2024年02月07日
    浏览(33)
  • STM32F107+LAN8720A使用STM32cubeMX配置网络连接+tcp主从机+UDP app

    里面提到的资源和写完的例程放出来, 链接:https://pan.baidu.com/s/1vdPKbLk7jg0Nvw0gc5qmEQ?pwd=dri2 提取码:dri2 https://download.csdn.net/download/qq_27620407/85443546 ETH 选择RMII模式 PHY Address设置 0 RX Mode:Polling Mode 使用的不是官方芯片的话就设置 user PHY 自己命个名,无所谓是啥 下面Extened是抄的别

    2023年04月09日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包