STM32CubeMx下LWIP教程(一)-PHY硬件层搭建

发布者:悠然自在最新更新时间:2018-04-22 来源: eefocus关键字:STM32CubeMx  LWIP教程  PHY  硬件层搭建 手机看文章 扫描二维码
随时随地手机看文章

关于LWIP的PHY搭建,采用的PHY芯片为LAN8720A,RMII模式。 
关于硬件连接部分采用的是原子的板子F407,硬件连接如下: 
这里写图片描述 
注意:LAN8720A 可以通过 PHYAD0 引脚来配置,该引脚与 RXER 引脚复用,芯片内部自带下拉电阻,当硬复位结束后, LAN8720A 会读取该引脚电平,作为器件的 SMI 地址,接下拉电阻时(浮空也可以,因为芯片内部自带了下拉电阻),设置 SMI 地址为 0,当外接上拉电阻后,可以设置为 1。本硬件RXER引脚浮空,其PHY芯片地址为0

关于SMT32CubeMx引脚时钟等配置根据实际情况配置即可,不在此进行赘述; 
点开ETH配置中的Parameter Setting选项卡,配置如下: 
这里写图片描述 
在这个选项卡中,只需按照实际填写PHY地址即可,我用的PHY芯片地址为0,在此输入0即可; 
点开ETH配置中的Advanced Parameters选项卡,选择如下: 
这里写图片描述 
由于STM32CubeMx系统默认的是,LAN8742A,因此我们选择user PHY配置LAN8720A; 
其配置如下: 
这里写图片描述 
关于PHY芯片的配置项不多,多数采用默认参数即可,需要更改的已用红线标示如来: 
PHY Address Value:就是我们在之前设置的PHY芯片地址; 
PHY Name:这个仅是一个标志符,可以随便设置,在这里我设置的是LAN8720; 
PHY Special Control/Status Register Offset:可以根据芯片手册查到,如下: 
这里写图片描述 
注意:该寄存器的地址是十进制的31 
同样的,关于PHY Speed mask和PHY Duplex mask寄存器的设置如下: 
这里写图片描述 
其中Bits4:2就包含了PHY Speed mask和PHY Duplex mask的掩码, 
Bits2代表两种速度10MB/s和100MB/s;PHY Speed mask(0x0004) 
Bits4代表两种工作方式半双工和全双工;PHY Duplex mask(0x0010)

然后开启ETH的中断即可,采用默认优先级即可;

LWIP配置如下: 
这里写图片描述 
其余保持默认即可

最后在生成的代码中,ETH硬件初始化部分加入对PHY硬件复位的代码:(注意:因为硬件设计,才在此处加入此代码,根据实际情况添加) 
这里写图片描述

添加如下代码:

/* Includes ------------------------------------------------------------------*/

#include "main.h"

#include "stm32f4xx_hal.h"

#include "lwip.h"

#include "gpio.h"


/* USER CODE BEGIN Includes */

#include "tcp.h"

#include "stats.h"

/* USER CODE END Includes */


static struct tcp_pcb *tcp_echoserver_pcb;


void tcp_echoserver_init(void);

static err_t tcp_echoserver_accept(void *arg,struct tcp_pcb *newpcb,err_t err);

static err_t tcp_echoserver_recv(void *arg,struct tcp_pcb *tpcb,struct pbuf *p,err_t err);


void tcp_echoserver_init(void)

{

    err_t err;


    tcp_echoserver_pcb=tcp_new();


    if(tcp_echoserver_pcb!=NULL)

    {

        err=tcp_bind(tcp_echoserver_pcb,IP_ADDR_ANY,7);


        if(err==ERR_OK)

        {

            tcp_echoserver_pcb=tcp_listen(tcp_echoserver_pcb);

            tcp_accept(tcp_echoserver_pcb,tcp_echoserver_accept);

        }


        else

        {

            memp_free(MEMP_TCP_PCB,tcp_echoserver_pcb);

        }

    }

}


static err_t tcp_echoserver_accept(void *arg,struct tcp_pcb *newpcb,err_t err)

{

    tcp_recv(newpcb,tcp_echoserver_recv);


    return ERR_OK;

}


static err_t tcp_echoserver_recv(void *arg,struct tcp_pcb *tpcb,struct pbuf *p,err_t err)

{

    tcp_write(tpcb,p->payload,p->len,1);

    pbuf_free(p);


    return ERR_OK;

}

/* USER CODE END 0 */


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_LWIP_Init();


  /* USER CODE BEGIN 2 */

    tcp_echoserver_init();

  /* USER CODE END 2 */


  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */

    MX_LWIP_Process();

  }

  /* USER CODE END 3 */


}

将程序下载至目标板,连接网线至电脑; 
更改电脑IPV4的属性如下: 
这里写图片描述 
最后使用命令行ping目标板,如下: 
这里写图片描述 
至此就完成了PHY芯片的测试,LWIP正常工作;

写在后面的话,关于其他PHY芯片的配置于此类似,但需注意各个芯片寄存器地址的差异;


关键字:STM32CubeMx  LWIP教程  PHY  硬件层搭建 引用地址:STM32CubeMx下LWIP教程(一)-PHY硬件层搭建

上一篇:STM32Cubemx下实现通用定时器微秒级延时
下一篇:Stm32cubeMX生成配置工程的例子和过程记录

推荐阅读最新更新时间:2024-03-16 16:00

STM32CubeMX系列教程02_STM32CubeMX工具、HAL库下载、安装说明
一、写在前面 上一篇文章是对STM32CubeMX做了一个简单介绍,可能初学者看了之后也不是很理解。那么本文开始动手实践,实践也是快速掌握知识的一种办法。 本文针对初学者,内容比较基础,主要是给大家起引导作用。 包含:下载JRE、STM32CubeMX和HAL库三部分内容。HAL库的几种安装方式。 二、下载 本节主要下载内容:JRE、STM32CubeMX和HAL库。 2.1 下载JRE 由于 STM32CubeMX 软件是基于 JAVA 环境运行的,所以需要安装 JRE (Java Runtime Environment)才能使用, 建议到官网下载最新版本JRE。 地址: https://www.java.c
[单片机]
<font color='red'>STM32CubeMX</font>系列<font color='red'>教程</font>02_STM32CubeMX工具、HAL库下载、安装说明
STM32CubeMX:GPIO操作
芯片:STM32F103C8T6 应用管脚: 输出:PA0、PA1 配置界面 /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_GPIO_WritePin(GPIOA,LED0_Pin,(GPIO_PinState)!HAL_GPIO_ReadPin(GPIOA,LED0_Pin)); HAL_GPIO_WritePin(GPIOA,LED1_Pin,GPIO_PIN_SET); HAL_Delay(500); HAL_GPIO_WritePin(GPIO
[单片机]
<font color='red'>STM32CubeMX</font>:GPIO操作
STM32CUBEMX】增加自定义 Groups 问题
背景 最近在使用 STM32CUBEMX 生成工程,想新建几个 Groups 放自己的文件。 平常自建的工程,我都是在 Manage Project Items 里面增加的。在使用STM32CUBEMX 生成的工程,发现每次在Manage Project Items 里面增加Groups,Keil 直接就崩了,压根就建不上。下图中的InterFace就是我自建的 Groups ,点击 “OK” ,Keil 就会崩掉。 解决方法 可以右键“Target XX”,下拉菜单里面有个选项“Add Groups”,使用“Add Groups”就可以新建 Groups。 在新建完后,可以在 Manage Project Items
[单片机]
【<font color='red'>STM32CUBEMX</font>】增加自定义 Groups 问题
STM32CubeMX新建第一个工程
STM32CubeMX的新建工程其实很简单,如果需要有复杂的配置,整个工程就有很多细节的地方需要注意。 一、打开STM32CubeMX软件,点击“新建工程”: 2、选择芯片型号,点选后,双击选中对应型号(点一次是查看其信息,双击直接选择进入): 双击后 3、设置软件工程,Project - Settings弹出设置窗口,设置好参数,点击OK即可 注意:默认是选择最新版本的库,在使用时要选择自己的库,如上图第7步。 接着我们进行自由设置: 四、工程配置 接下的配置才是与我们最终运行代码密切相关的,我们这里以简单的配置IO(PE5引脚)驱动LED为例来讲述。 A、放大芯片图标,找到PE5(可以通过Fin
[单片机]
<font color='red'>STM32CubeMX</font>新建第一个工程
泰克推出首款面向MIPI M-PHY® 3.1的测试解决方案
泰克MSO/DPO70000DX示波器和P7600系列TriMode™探头提供用于M-PHY测量的业内最低噪声解决方案。 中国 北京,2014年11月24日 – 全球示波器市场的领导厂商---泰克公司日前宣布,推出针对MIPI®联盟新批准的MIPI M-PHY® 3.1的首款物理层发射器特性检测和调试解决方案。泰克的新解决方案支持MIPI M-PHY High Speed Gears 1、2 和3标准及SYS模式,并可与泰克MSO/DPO 70000DX示波器和P7600系列探头一起组成用于MIPI M-PHY测量的业内最低噪声解决方案。 MIPI M-PHY串行接口技术在下一代移动设备上得到越来越广泛的应用,用于
[测试测量]
【STM32】HAL库 STM32CubeMX教程八---定时器输入捕获
前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6/ STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 知识概括: 通过本篇博客您将学到: PWM工作原理 STM32CubeMX创建PWM例程 HAL库定时器PWM函数库 PWM创建呼吸灯 什么是PWM 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非
[单片机]
【STM32】HAL库 <font color='red'>STM32CubeMX</font><font color='red'>教程</font>八---定时器输入捕获
STM32CubeMX学习笔记——FreeRTOS_任务创建与删除
Github https://github.com/HaHaHaHaHaGe/Planof2019_half/tree/master/Course_Project/FreeRTOS/Class01_CreateTask 简介 在STM32CubeMX上配置FreeRTOS非常的简单,几乎不需要做任何操作,只需要勾选 移植FreeRTOS就成功了,关于在非Cube上的RTOS配置文件内的相关内容,也在下方的Configuration栏中给好了 所有的配置都可以在这里完成 任务创建 有别于在没有使用Cube下的创建方式,在Cube中它专门提供了可视化的创建方式,并且增加了中间文件cmsis_os.c将freertos中
[单片机]
<font color='red'>STM32CubeMX</font>学习笔记——FreeRTOS_任务创建与删除
STM32CubeMX学习--(6)USB大容量存储设备
CUBE配置 USB_OTG_FS配置 记得勾选NVIC中断使能。 USB_DEVICE配置 clock配置 修改代码 主要修改usbd_storage_if.c文件 /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : usbd_storage_if.c * @version : v1.0_Cube * @brief : Memory management layer. ***********
[单片机]
<font color='red'>STM32CubeMX</font>学习--(6)USB大容量存储设备
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved