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

2023-05-16

通过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代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现 的相关文章

  • freertos---软定时器

    一 软件定时器介绍 freeRTOS软件定时器的时基是基于系统时钟节拍实现的 可以创建很多个 在硬件定时器资源不充足的情况下非常有用 软件定时器一般用作周期性地执行函数 在创建软件定时器时指定软件定时器的回调函数 在回调函数中实现相应的功能
  • FreeRTOS系列

    1 RTOS简介 RTOS全称为 Real Time Operation System 即实时操作系统 RTOS强调的是实时性 又分为硬实时和软实时 硬实时要求在规定的时间内必须完成操作 不允许超时 而软实时里对处理过程超时的要求则没有很严
  • STM32F767ZI-NUCLEO移植运行micropython过程记录

    注意 本教程移植microPython是通过烧写hex文件实现的 网上其他教程很多是介绍使用USB DFU方式 设备boot0至高电平 通过DfuSeDemo烧写 由于自己还不熟没有使用这种方式 后续有时间再尝试 另外本教程是基于STM32
  • RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (二、无线温湿度传感器 之 CubeMX配置)

    应用篇 在STM32L051上使用RT Thread 第二篇 使用STM32CubeMX 进行对应外设配置 同时做一些简单测试 目录 前言 一 使用 STM32CubeMX 配置 1 1 基础步骤 1 2 修改配置 1 3 踩坑记录 二 初
  • freeRTOS手册 第六章 . 中断管理

    如果我对本翻译内容享有所有权 允许任何人复制使用本文章 不会收取任何费用 如有平台向你收取费用与本人无任何关系 第六章 中断管理 章节介绍和范围 事件 嵌入式实时系统必需对环境中的事件做出响应 比如 外部网络设备收到一个发送给TCP IP栈
  • FreeRTOS_中断

    传送门 博客汇总帖 传送门 Cortex M3 中断 异常 传送门 Cortex M3笔记 基础 笔记内容参考 正点原子的FreeRTOS开发手册 cortex m3权威指南 Cortex M3和Cortex M4权威指南等 文中stm32
  • STM32F103移植FreeRTOS必须搞明白的系列知识---2(FreeRTOS任务优先级)

    STM32F103移植FreeRTOS必须搞明白的系列知识 1 Cortex CM3中断优先级 STM32F103移植FreeRTOS必须搞明白的系列知识 2 FreeRTOS任务优先级 STM32F103移植FreeRTOS必须搞明白的系
  • 基于STM32的FreeRTOS学习之中断测试实验(五)

    记录一下 方便以后翻阅 本章内容是接着上一章节进行的实际演练 1 实验目的 FreeRTOS可以屏蔽优先级低于configMAX SYSCALL INTERRUPT PRIORITY的中断 不会屏蔽高于其的中断 本次实验就是验证这个说法 本
  • FreeRTOS笔记(十)中断

    中断 当CPU在执行某一事件A时 发生另外一个更重要紧急的事件B请求CPU去处理 产生了中断 于是CPU暂时中断当前正在执行的事件A任务而对对事件B进行处理 CPU处理完事件B后再返回之前中断的位置继续执行原来的事件A 这一过程统称为中断
  • FreeRTOS死机原因

    1 中断回调函数中没有使用中断级API xxFromISR 函数 xSemaphoreGiveFromISR uart busy HighterTask 正确 xSemaphoreGive uart busy 错误 2 比configMAX
  • FreeRTOS学习---“定时器”篇

    总目录 FreeRTOS学习 任务 篇 FreeRTOS学习 消息队列 篇 FreeRTOS学习 信号量 篇 FreeRTOS学习 事件组 篇 FreeRTOS学习 定时器 篇 FreeRTOS提供了一种软件定时器 用来快速实现一些周期性的
  • FreeRTOS笔记(二)

    FreeRTOS笔记 二 静态任务 文章目录 FreeRTOS笔记 二 静态任务 一 任务定义 二 任务创建 2 1 定义任务栈 2 2 定义任务函数 2 3 定义任务控制块 2 4 实现任务创建函数 三 实现就绪列表 3 1 定义就绪列表
  • STM32CubeMX学习六 之ADC配置

    文章目录 前言 一 本地环境 二 开始 1 定时器配置 2 引脚配置 在这里插入图片描述 https img blog csdnimg cn e5b6f155a1b8468cb15046a0a9d031cd png 3 内部时钟配置 4 A
  • FreeRTOSConfig.h 配置优化及深入

    本篇目标 基于上一篇的移植freertos stm32f4 freertos 上 修改 FreeRTOSConfig h 文件的相关配置来优化辅助 FreeRtos 的使用 并且建立一些基本功能 信号量 消息地列等 的简单应用位于 stm3
  • LWIP学习笔记(2)---IP协议

    IP首部 最高位在左边记为 bit 最低位在右边 记为31 bit 传输顺序 先0 7bit 在8 15bit 然后16 13 最后24 31bit 这种方式称为 big endian 也叫网络字节序 版本 ipv4 或 6 ipv6 首部
  • 当一个任务写入变量而其他任务读取该变量时,我们是否需要信号量?

    我正在研究 freeRtos 并且我有一个名为 x 的变量 现在 每秒只有一个任务正在写入该变量 而其他任务正在读取该变量值 我需要用互斥锁来保护变量吗 如果变量为 32 位或更小 并且其值是独立的并且不与任何其他变量一起解释 则不需要互斥
  • 如何将 void* 转换为函数指针?

    我在 FreeRTOS 中使用 xTaskCreate 其第四个参数 void const 是传递给新线程调用的函数的参数 void connect to foo void const task params void on connect
  • 在 Atollic TrueStudio、STM32CubeMX 中导入 C 库

    我目前正在开发 STM32F767ZI Nucleo 板和一个小安全芯片 microchip atecc508a 通过 i2c 连接进行连接 该芯片有一个可用的库加密验证库 https github com MicrochipTech cr
  • 有可用的 FreeRTOS 解释语言库吗?

    我在一家公司工作 该公司使用 FreeRTOS 为多个设备创建固件 最近 我们对新功能的要求已经超出了我们固件工程师的工作能力 但我们现在也无力雇用任何新人 即使进行微小的更改 也需要固件人员在非常低的级别上进行修改 我一直在为 FreeR
  • NTP请求包

    我试图弄清楚我需要在 NTP 请求包中发送 客户端 什么才能从服务器检索 NTP 包 我正在 Cortex M3 Stellaris LM3S6965 上使用 LWIP 据我了解 我将收到 UDP 标头 然后收到具有不同时间戳的 NTP 协

随机推荐

  • 解读gazebo_ros_control gazebo_ros

    本篇的目的是想解读gazebo ros control 以及 gazebo ros 因为gazebo本身是独立于ros的 通过教程Intermediate Control plugin 以及教程 Category Write a plugi
  • vtaskstartscheduler(); //开启任务调度语句不执行

    项目场景 xff1a FreeRTOS实时嵌入式操作系统开发 基于stm32 第一章移植代码 问题描述 xff1a 任务调度器执行到vtaskstartscheduler 开启任务调度语句不执行 span class token keywo
  • python3中定义类变量,并使用类函数修改类变量的值

    定义类变量的方式有两种 1 在 init 中定义self elements 其中self elements是类变量名 a是传入Difference类的参数名 xff0c 这里的 init 作用是定义了类变量名 xff0c 将外部参数a传给类
  • printf函数的内涵以及造成的严重内存问题

    问题的引出 xff1a 在某型号的核心网络交换机设备中 xff0c 为调试方便 xff0c 实现了一个把内存内容从终端打印的功能 xff0c 也就是dump memory xff0c 屏幕的左边显示十六进制 xff0c 右边以ASCII形式
  • 关于docker那点事儿——Dockerfile编写

    Dockerfile编写 前言一 Dockerfile创建镜像二 Dockerfile常用指令三 示例1 Dockerfile构建nginx镜像2 Dockerfile构建微服务 四 CMD与ENTRYPOINT比较 前言 Dockerfi
  • SylixOS信号量(二进制信号量、 计数型信号量、 互斥信号量(简称互斥量)、 读写信号量)

    目录 二进制信号量 互斥信号量 计数器信号量 读写信号量 SylixOS 信号量 多个线程在读写某个共享数据 xff08 全局变量等 xff09 时必须通过某种方法实现共享数据的互斥访问或者同步访问 xff08 例如线程 B 等待线程 A
  • 什么是优先级反转及解决方法

    什么是优先级反转 优先级反转 xff0c 是指在使用信号量时 xff0c 可能会出现的这样一种不合理的现象 xff0c 即 xff1a 高优先级任务被低优先级任务阻塞 xff0c 导致高优先级任务迟迟得不到调度 但其他中等优先级的任务却能抢
  • STM32CubeMX在F103上的ADC注入通道配置异常问题

    前言 最近业余时间在搞无刷电机FOC的控制 xff0c 其中有一部分是关于流过电机三相绕组电流采集的 xff0c 需要用到STM32内置的ADC xff0c 核心是需要使用注入通道以确保ADC数据采集的实时性 xff0c 但是我在STM32
  • C++ static静态成员变量用法

    C 43 43 static静态成员变量用法 参考网址 xff1a 1 http c biancheng net cpp biancheng view 209 html 2 https www runoob com cplusplus cp
  • 解决AndroidStudio 控制台编译输出中文乱码,黑方块+问号之类的

    100 有效 解决AndroidStudio 控制台编译输出中文乱码 xff08 黑色方框问号 xff09 xff0c 亲测解决 xff01 xff08 转载 xff09 Pdx 666的博客 CSDN博客 背景在AndroidStudio
  • sphinx安装及简单使用

    sphinx安装及简单使用 如果你要编写技术文档 可以用 reStructuredText 或 Markdown 格式编辑文件 xff0c 然后使用 Sphinx 工具转换成 html PDF ePub等格式 xff0c 或者托管到 git
  • cmake之CMakelist.txt的使用

    文章目录 常用命令1 指定 cmake 的最小版本2 打印信息2 1 打印普通信息2 2 打印告警2 3 打印错误 3 项目名称4 设置变量5 查找指定的库文件6 设置包含的目录7 设置链接库搜索目录8 指定编译包含的源文件8 1 明确指定
  • python爬虫 记录一次爬取淘宝的过程

    淘宝可以说是一个检验爬虫技术是否过关的最强关卡了 xff0c 下面来打破它吧 淘宝的所有操作差不多都是在登录的状态下进行的 xff0c 这时候想要对淘宝进行请求获取信息就必须在登录的状态下进行了 方式一 xff1a xff08 seleni
  • 问题tensorflow.python.framework.errors_impl.ResourceExhaustedError:OOM

    tensorflow python framework errors impl ResourceExhaustedError 2 root error s found 0 Resource exhausted OOM when alloca
  • ROS安装超详细保姆级教程

    1 版本选择 ROS与Ubuntu版本是有着对应关系的 xff0c 其中Ubuntu1604 43 ROS Kinetic xff1b Ubuntu1804 43 ROS Melodic xff1b Ubuntu2004 43 ROS No
  • 2021年9月22号,实战烧写树莓派sd卡的系统

    1 下载格式化u盘的软件 xff0c 软件地址 xff0c 阿里云盘地址 xff1a https www aliyundrive com s ux2re9FFxd2 2 将有sd卡的读写盘插入电脑接口 3 打开软件 xff0c 点击格式化即
  • 工作流与BPM的区别

    一 工作流是什么 xff1f 根据国际工作流管理联盟 Workflow Management Coalition xff0c WFMC 的定义 xff0c 工作流就是 一类能够完全或者部分自动执行的经营过程 xff0c 它根据一系列过程规则
  • 被遗忘的软件产品形态

    从2010年以后 xff0c 很多公司开发的软件产品 xff0c 很少有客户端了 xff0c web2 0之后 xff0c 主流的业务系统基本上都是基于Web去构建业务系统 这几年见到的业务应用系统都是基于Web的构建的 而在To C市场
  • C端产品工作流程

    文章目录 发现需求需求分析用户需求定义产品需求定义构建产品方案收集需求确定产品功能 产品需求分类产品目标分解产品版本规划需求评审产品功能设计需求评审确定执行计划测试验收发布上线 发现需求 通过自身的体验发现需求 通过间接的体验发现需求 1
  • STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现

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