STM32的以太网外设+PHY(LAN8720)使用详解(4):STM32管脚配置

news2025/1/31 22:44:35

0 工具准备

1.野火 stm32f407霸天虎开发板
2.LAN8720数据手册
3.STM32F4xx中文参考手册

1 MCU管脚配置

1.1 使能外设相关时钟

STM32配置任何外设的第一步都是使能相关的外设时钟,根据前面的原理图我们需要使能相关的引脚时钟,同时我们需要使能SYSCFG时钟,用来选择MII或RMII模式。
(1)使能GPIO时钟

RCC_AHB1PeriphClockCmd(ETH_MDIO_GPIO_CLK | ETH_MDC_GPIO_CLK |
                               ETH_RMII_REF_CLK_GPIO_CLK | ETH_RMII_CRS_DV_GPIO_CLK |
                               ETH_RMII_RXD0_GPIO_CLK | ETH_RMII_RXD1_GPIO_CLK |
                               ETH_RMII_TX_EN_GPIO_CLK | ETH_RMII_TXD0_GPIO_CLK |
                               ETH_RMII_TXD1_GPIO_CLK,
                           ENABLE);

(2)使能SYSCFG时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

注意:

使用 SYSCFG_PMC 寄存器中的配置位 23 MII_RMII_SEL 选择 MII 或 RMII 模式。以太网控制器处于复位模式或使能时钟前,应用程序必须设置 MII/RMII 模式。

1.2 选择RMII模式

这里我们选择RMII模式和LAN8720进行通信,语句如下:

SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII);

如果使用其它支持MII的PHY,选择MII模式的语句如下:

SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_MII);

使用MII时需要生成TX_CLK 和 RX_CLK 时钟信号,必须向外部 PHY 提供 25MHz 时钟。除了使用外部25MHz石英晶振提供时钟外,还可以通过STM32的MCO引脚输出该信号。
在这里插入图片描述
为了使STN32的MCO引脚输出25MHz时钟信号,可以使用以下语句:

RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1);

上面语句的含义是选择HSE作为时钟源,分频系数为1。由于我们使用的HSE时钟信号是25MHz的,因此便可以在MCO上输出25MHz时钟信号。

1.3 配置GPIO管脚

在开启了相关时钟之后,我们需要配置GPIO到所需要的模式,这些GPIO全部被复用为ETH功能,相关语句如下:

    /* Configure ETH_MDIO */
    GPIO_InitStructure.GPIO_Pin = ETH_MDIO_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(ETH_MDIO_PORT, &GPIO_InitStructure);
    GPIO_PinAFConfig(ETH_MDIO_PORT, ETH_MDIO_SOURCE, ETH_MDIO_AF);

    /* Configure ETH_MDC */
    GPIO_InitStructure.GPIO_Pin = ETH_MDC_PIN;
    GPIO_Init(ETH_MDC_PORT, &GPIO_InitStructure);
    GPIO_PinAFConfig(ETH_MDC_PORT, ETH_MDC_SOURCE, ETH_MDC_AF);

    /* Configure ETH_RMII_REF_CLK */
    GPIO_InitStructure.GPIO_Pin = ETH_RMII_REF_CLK_PIN;
    GPIO_Init(ETH_RMII_REF_CLK_PORT, &GPIO_InitStructure);
    GPIO_PinAFConfig(ETH_RMII_REF_CLK_PORT, ETH_RMII_REF_CLK_SOURCE, ETH_RMII_REF_CLK_AF);

    /* Configure ETH_RMII_CRS_DV */
    GPIO_InitStructure.GPIO_Pin = ETH_RMII_CRS_DV_PIN;
    GPIO_Init(ETH_RMII_CRS_DV_PORT, &GPIO_InitStructure);
    GPIO_PinAFConfig(ETH_RMII_CRS_DV_PORT, ETH_RMII_CRS_DV_SOURCE, ETH_RMII_CRS_DV_AF);

    /* Configure ETH_RMII_RXD0 */
    GPIO_InitStructure.GPIO_Pin = ETH_RMII_RXD0_PIN;
    GPIO_Init(ETH_RMII_RXD0_PORT, &GPIO_InitStructure);
    GPIO_PinAFConfig(ETH_RMII_RXD0_PORT, ETH_RMII_RXD0_SOURCE, ETH_RMII_RXD0_AF);

    /* Configure ETH_RMII_RXD1 */
    GPIO_InitStructure.GPIO_Pin = ETH_RMII_RXD1_PIN;
    GPIO_Init(ETH_RMII_RXD1_PORT, &GPIO_InitStructure);
    GPIO_PinAFConfig(ETH_RMII_RXD1_PORT, ETH_RMII_RXD1_SOURCE, ETH_RMII_RXD1_AF);

    /* Configure ETH_RMII_TX_EN */
    GPIO_InitStructure.GPIO_Pin = ETH_RMII_TX_EN_PIN;
    GPIO_Init(ETH_RMII_TX_EN_PORT, &GPIO_InitStructure);
    GPIO_PinAFConfig(ETH_RMII_TX_EN_PORT, ETH_RMII_TX_EN_SOURCE, ETH_RMII_TX_EN_AF);

    /* Configure ETH_RMII_TXD0 */
    GPIO_InitStructure.GPIO_Pin = ETH_RMII_TXD0_PIN;
    GPIO_Init(ETH_RMII_TXD0_PORT, &GPIO_InitStructure);
    GPIO_PinAFConfig(ETH_RMII_TXD0_PORT, ETH_RMII_TXD0_SOURCE, ETH_RMII_TXD0_AF);

    /* Configure ETH_RMII_TXD1 */
    GPIO_InitStructure.GPIO_Pin = ETH_RMII_TXD1_PIN;
    GPIO_Init(ETH_RMII_TXD1_PORT, &GPIO_InitStructure);
    GPIO_PinAFConfig(ETH_RMII_TXD1_PORT, ETH_RMII_TXD1_SOURCE, ETH_RMII_TXD1_AF);

2 总结

(1)使能相关时钟(一定要使能SYSCFG时钟)
(2)选择ETH为RMII模式
(3)配置复用引脚为ETH功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1329523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年终总结 | 四平八稳

年度回顾 年度关键词:四平八稳 百科解读:形容物体放置的平稳或言行稳当;也指做事但求无过,不思进取。 我在写这篇文章就在思考用什么关键词来描述我过去这一年,似乎这一年没有特别让我特别惊喜的事情,无论是…

网工内推 | 华晨宝马、金士顿,最高16薪招网工,NP以上优先

01 华晨宝马汽车有限公司 招聘岗位:网络工程师 职责描述: 1, 参与公司数字化建设,负责厂区生产区域和办公区域的网络规划、建设和优化,包括有线网络和无线网络; 2, 提供公司数据中心架构规划&a…

「Verilog学习笔记」自动售卖机

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1nsmodule sale(input clk ,input rst_n ,input sel ,//sel0,5$dranks,sel1,10&$drinksinput …

react当中生命周期(旧生命周期详解)

新生命周期https://blog.csdn.net/kkkys_kkk/article/details/135156102?spm1001.2014.3001.5501 目录 什么是生命周期 react中的生命周期 旧生命周期 生命周期图示 常用的生命周期钩子函数 初始化阶段 挂载阶段 在严格模式下挂载阶段的生命周期函数会执行两次原因 更…

RocketMQ高级原理:深入剖析消息系统的核心机制

一、基础概念: 1. 消息模型 RocketMQ基于Producer、Broker、Consumer三部分构建。其中,Producer负责生成消息,Consumer处理消息,而Broker则承担消息存储的角色。Broker服务器可以存储多个Topic的消息,并支持消息在不同…

核货宝订单管理系统提高企业效率

核货宝订单管理系统可以帮助企业提高效率,具体体现在以下几个方面: 一、订单自动化处理:核货宝订单管理系统支持订单批发和多渠道订单导入,它可以从订单的接收、处理、跟进、发货、到售后服务等环节都可以通过系统自动完成&#x…

求职方略-倒金字塔型自我介绍

第一步,开头第一句话提纲挈领,点出你的主要“卖点” 自我介绍的第一句话很重要,要有足够的吸引力,有足够的信息量,还要有足够的说服力,能产生先声夺人的效果。 一般的自我介绍喜欢按照时间线索依次介绍自己的经历,例如:“我大学毕业后就进入一家大公司的研发中心,工…

云渲染怎么批量效果图、影视动画?云渲染在效果图、影视的作用

在设计和建筑领域,设计师往往需要制作出精细逼真的效果图以向客户展示他们的设计思路。然而,在这些行业中,大量生成效果图需求非常费时费力。幸运的是,日期到了云渲染的这个时代,设计师们可以通过云渲染服务以一种更加…

第51周,第二期技术动态

大家好,才是真的好。 今天周五,我们主要介绍与Domino相关产品新闻,以及互联网或其他IT行业动态等。 一、HCL Domino 14 Factory 上周三,即2023 年 12 月 13 日,HCL Notes Domino 14在日本举办了第一个线下产品巡回活…

PS里面怎么提取图上要的颜色然后用到另一个部位去

PS里面要提取图上要的颜色然后用到另一个部位去,具体步骤如下: 在ps里打开特定的图像文件; 想要提取图上的哪个颜色,就使用”吸管工具“在图上特定的位置上点击一下,就会看到前景色变成了相应的颜色; 然…

Ethercat 读从站状态报文分析

涉及的从站寄存器:Register AL Status 0x0130:0x0131 。 1,发送报文 1)IgH dmesg看到的报文 [18773.590655] geshifei ec_master_send_datagrams 1059: Adding datagram datagram->index0 [18773.590656] EtherCAT DEBUG 0: frame siz…

macOS 开发 - MASShortcut

文章目录 关于 MASShortcut项目结构 快速使用源码学习检测是否有热键冲突处理 Event macOS 开发交流 秋秋群:644096295,V : ez-code 关于 MASShortcut MASShortcut 是一款快捷键管理工具,替代和兼容 ShortcutRecorder github : https://git…

nodejs+vue+ElementUi家政服务系统c90g5

项目中登录模块用到token家政服务平台有管理员,雇主,雇员三个角色。管理员功能有个人中心,雇主管理,雇员管理,资料认证管理,项目类型管理,服务项目管理,需求信息管理,服务…

yolo-nas无人机高空红外热数据小目标检测(教程+代码)

前言 YOLO-NAS是目前最新的YOLO目标检测模型。从一开始,它就在准确性方面击败了所有其他 YOLO 模型。与之前的 YOLO 模型相比,预训练的 YOLO-NAS 模型能够以更高的准确度检测更多目标。但是我们如何在自定义数据集上训练 YOLO NAS? 这将是我…

第4节-​简历的基本要素-相关性原则

(点击即可收听) 简历是求职的敲门砖,简历是否优秀的评价标准是求职者能否利用简历得到面试机会并且斩获Offer(录取通知) 相关性原则 相关性是简历撰写中最重要的一个原则,对于工作经验多的人,相关性更重要,…

解决找不到vcruntime140.dll无法继续执行的多种方法分享

最近,我在使用电脑时遇到了一个问题,即“由于找不到vcruntime140.dll无法继续执行”。vcruntime140.dll是Visual C Redistributable Packages中的一个组件,它是Visual Studio 2015中运行C程序所必需的。如果找不到vcruntime140.dll文件&#…

原生JavaScript实现 元素全屏与退出全屏效果

之前写过 前端screenfull实现界面全屏展示功能 突然发现自己犯傻了 其实元素js中就有全屏与取消全屏的方式 html代码如下 <!DOCTYPE html> <html> <head><title>全屏实验</title><style></style> </head> <body><d…

win11下配置visual studio 2022+PCL1.13.1

第一部分&#xff1a;visual studio2022 安装 vs官网网址如下&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/ 第一步&#xff1a;我们打开官网链接&#xff0c;按如下操作点击下载免费版本的exe文件 第二步&#xff1a;打开下载目录下的安装文件进行安装&#…

不明觉厉,Meta宣布了Fairy——快速并行指令引导视频到视频合成

Meta 刚刚宣布了Fairy——一项快速并行指令引导视频到视频合成的创新技术。这一引入图像编辑扩散模型的简约而强大的改进&#xff0c;极大地增强了其视频编辑应用程序的性能。 他们的方法聚焦于基于锚的跨帧注意力的概念&#xff0c;这是一种隐式跨帧传播扩散特征的机制&#…

zynqmp Linux + 裸机 (A53-0 Linux,A53-1 2 3 裸机大数据量实时处理,R5-0 协议处理,R5-1 屏幕显示逻辑等)填坑笔记

fpga 和arm 采用预留内存的方式&#xff0c;采用neon 协处理器只能做到 250M/S 的速度&#xff0c;预留内存采用mmap的方式&#xff0c;当读取内存页的时候采用缺页中断的方式&#xff0c;导致速度拖沓而且预留内存没有进行Linux系统的内存管理&#xff08;在系统内 memcpy的速…