通过STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现

本文使用了正点原子的阿波罗开发板,接下来我将粗略的对STM32F767通过STM32cubeMX进行以太网协议配置。

具体步骤


1.首先使能ETH,模式选择RMII;

2.使能LWIP和FREERTOS;

因为阿波罗的开发板PHY芯片的ETH_DXT1和ETH_DXT0用的是PG13,PG14引脚,和默认的不同,所以这里改一下

3.配置时钟,在这里我放上我自己的时钟配置图,只要不标红就行,我用的是25MHz外部晶振作时钟源 ;


4.配置ETH,由于阿波罗开发板的LAN8720芯片的PHYAD0引脚悬空,故PHY Address设置为0;

5.由于我用的STM32cubeMX的版本是将LAN8742A作为默认芯片,所以我们这里不做修改,只用将内部参数改为LAN8720参数即可;

6.配置LWIP,本人这里不使用DHCP获取IP地址等信息,并且我使用的是TCP,所以未对UDP使能,设置如图;

7.配置FREERTOS,我在这里加了两个线程备用


8.按下生成按钮,生成项目,生成时需要选择编译软件为自己用的软件,本人使用的是V5;

由于阿波罗开发板的PHY芯片的RESET引脚是依靠PCF8574的P7位控制,所以我们要在项目中引入PCF8574的代码,以下代码可以在阿波罗资料盘中找到

打开main.c里的加上#include “pcf8574.h”,并在初始化部分将PCF8574初始化

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f7xx_hal.h"
#include "cmsis_os.h"
#include "lwip.h"
#include "gpio.h"/* USER CODE BEGIN Includes */
#include "pcf8574.h"
/* USER CODE END Includes *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void MX_FREERTOS_Init(void);/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*//* USER CODE END PFP *//* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.** @retval None*/
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 */PCF8574_Init();/* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 *//* 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 */}

打开freertos.c里的加上
#include “gpio.h”
#include “sys.h”
#include “pcf8574.h”
#include “tcp_echoserver.h”,并在主线程将PCF8574初的P7管脚使能
PCF8574_WriteBit(ETH_RESET_IO,0);代码如下

/* Includes ------------------------------------------------------------------*/
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "gpio.h"
#include "sys.h"
#include "pcf8574.h"
#include "tcp_echoserver.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables *//* USER CODE END Variables */
osThreadId defaultTaskHandle;
osThreadId myTaskLEDHandle;
osThreadId myTaskTCPHandle;/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */extern void tcp_echoserver_init(void);
/* USER CODE END FunctionPrototypes */void StartDefaultTask(void const * argument);
void LEDTask(void const * argument);
void TCPTask(void const * argument);extern void MX_LWIP_Init(void);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) *//*** @brief  FreeRTOS initialization* @param  None* @retval None*/
void MX_FREERTOS_Init(void) {/* USER CODE BEGIN Init *//* USER CODE END Init *//* USER CODE BEGIN RTOS_MUTEX *//* add mutexes, ... *//* USER CODE END RTOS_MUTEX *//* USER CODE BEGIN RTOS_SEMAPHORES *//* add semaphores, ... *//* USER CODE END RTOS_SEMAPHORES *//* USER CODE BEGIN RTOS_TIMERS *//* start timers, add new ones, ... *//* USER CODE END RTOS_TIMERS *//* Create the thread(s) *//* definition and creation of defaultTask */osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);/* definition and creation of myTaskLED */osThreadDef(myTaskLED, LEDTask, osPriorityIdle, 0, 128);myTaskLEDHandle = osThreadCreate(osThread(myTaskLED), NULL);/* definition and creation of myTaskTCP */osThreadDef(myTaskTCP, TCPTask, osPriorityIdle, 0, 1024);myTaskTCPHandle = osThreadCreate(osThread(myTaskTCP), NULL);/* USER CODE BEGIN RTOS_THREADS *//* add threads, ... *//* USER CODE END RTOS_THREADS *//* USER CODE BEGIN RTOS_QUEUES *//* add queues, ... *//* USER CODE END RTOS_QUEUES */
}/* USER CODE BEGIN Header_StartDefaultTask */
/*** @brief  Function implementing the defaultTask thread.* @param  argument: Not used * @retval None*/
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void const * argument)
{/* init code for LWIP */MX_LWIP_Init();/* USER CODE BEGIN StartDefaultTask */PCF8574_WriteBit(ETH_RESET_IO,0);       //Æô¶¯PHYоƬTcp_Server_Init();/* Infinite loop */for(;;){osDelay(1);}/* USER CODE END StartDefaultTask */
}/* USER CODE BEGIN Header_LEDTask */
/**
* @brief Function implementing the myTaskLED thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_LEDTask */
void LEDTask(void const * argument)
{/* USER CODE BEGIN LEDTask *//* Infinite loop */for(;;){osDelay(1); }/* USER CODE END LEDTask */
}/* USER CODE BEGIN Header_TCPTask */
/**
* @brief Function implementing the myTaskTCP thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_TCPTask */
void TCPTask(void const * argument)
{/* USER CODE BEGIN TCPTask *//* Infinite loop */for(;;){osDelay(1); }/* USER CODE END TCPTask */
}

接下来我们的开发板连上电脑,保证电脑IP地址和开发板IP地址在同一网段后按Windows+R后输入cmd回车打开CMD,在界面输入ping xxx.xxx.xxx.xxx(xxx代表开发板IP地址),可以得到

这样开发板就ping通了,这个时候就可以引入服务器或是客户端的代码,实现对应功能。

源码以上上传Gitee,链接放在旁边,点赞打赏走一走
ModbusTCP代码

STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现相关推荐

  1. cubemx lan8720模块_通过STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现

    本文使用了正点原子的阿波罗开发板,接下来我将粗略的对STM32F767通过STM32cubeMX进行以太网协议配置. 具体步骤 1.首先使能ETH,模式选择RMII: 2.使能LWIP和FREERTO ...

  2. STM32CubeMX+LAN8720+LWIP+FreeRTOS实现网络通讯

    STM32CubeMX+LAN8720+LWIP+FreeRTOS实现网络通讯 使用STM32CubeMX可以非常方便的将FreeRTOS+LWIP移植到工程中,本文就是介绍如何利用STM32Cube ...

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

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

  4. STM32CubeMX+LAN8720+LWIP不带操作系统实现网络通讯

    STM32CubeMX+LAN8720+LWIP不带操作系统实现网络通讯 使用STM32CubeMX可以非常方便的将LWIP移植到工程中,本文就是介绍如何利用STM32CubeMX移植LWIP到STM ...

  5. Stm32CubeMx lwip+freeRTOS TCP 服务

    如何添加lwip参照上一篇   stm32CubeMx lwip + freeRTOS 今天讲一下,如何添加TCP服务 LwIP 提供了三种编程接口,分别为 RAW/Callback API.NETC ...

  6. stm32f407+lwip+freertos程序附PCB图

    stm32f407+lwip+freertos程序附PCB图 提供上位机与本设备的通信协议文档 描述:程序和电路原理图和PCB都是本人亲手设计,亲测可用,独一无二,相信对想要入手以太网的工程师有极高的 ...

  7. stm32f407+lwip+freertos程序

    stm32f407+lwip+freertos程序附PCB图 描述:程序和电路原理图和PCB都是本人亲手设计,亲测可用,独一无二,相信对想要入手以太网的工程师有极高的参考价值<font colo ...

  8. 【从0到1】GD32F450+LAN8720+LWIP(裸机)移植过程记录

    参考资料 (1)<Lwip应用开发实战指南--基于STM32> (2)<STM32库开发实战指南--基于野火挑战者开发板> (3)<GD32F4xx_User_Manua ...

  9. 野火挑战者V2开发板CubeMX+LWIP+FreeRTOS+TCP_Server+TCP_Client实现

    首先说一下开发环境:MDK5版本为5.26.2.0,CubeMX版本为6.6.1,FreeRTOS API选择的是 CMSIS v1,LWIP版本为2.1.2.单片机型号为STM32F429IGT6, ...

最新文章

  1. java考勤与工资管理系统
  2. 福利 | 13篇精选国外资源合集(技术指南、大咖经验、资源分享...)
  3. c语言多文件 clang,c – 具有多行函数声明参数的Clang格式问题
  4. wordpress外部调用到html_Spring 自调用事务失效,你是怎么解决的?
  5. .NET Core中间件与依赖注入的一些思考
  6. 【读书笔记0103】Beginning linux programming-shell programming
  7. linux关机_3.5 开关机命令及7个运行级别《LINUX-centos7-操作系统入门到精通》
  8. Orcale分析函数OVER(PARTITION BY... ORDER BY...)的讲解
  9. Java运行环境下载
  10. msr830路由器配置虚拟服务器,华三MSR系列路由器(V7)平台家庭宽带配置IPV6
  11. python操作VCF文件
  12. “一站式”电子书转换工具“Calibre”
  13. X书x-mini-sig_x-mini-mua
  14. js json字符串 转为json数组
  15. Gurobi + Python
  16. 未成熟男人; 成熟男人
  17. KubeSphere 社区双周报 | KubeKey v3.0.2 发布 | 2022-11-24
  18. 地震见真情【汶川地震后巴基斯坦全国帐篷都给了中国】
  19. 《啊哈!算法》学习心得
  20. Matlab中有与、 或、 异或的操作

热门文章

  1. 大数据可视化之气象数据可视化(雷达、云图、落区、等值面)
  2. Vimium:全程使用键盘来操作浏览器的插件,脱离鼠标点击浏览器的限制,与Vim类似
  3. 民航客运量变化趋势的多元线性回归模型--基于R(附R程序及讲解)
  4. Midas Civil提供与Revit 的接口
  5. 简易太阳系及牧师与魔鬼
  6. 找出1000以内的所有质数,并且统计1000以内质数的个数
  7. 智能聊天机器人小黄鸡
  8. 《统计学最全思维导图》
  9. 我的世界虚拟服务器联机,我的世界模拟城市联机教程-的世界怎么联机
  10. 如有需要跟我学习 触摸精灵软件的朋友请加我QQ 811037998 备注来源 CSDN