当前位置: 首页 > article >正文

STM32以太网实战:手把手教你配置SMI接口,搞定PHY寄存器读写

STM32以太网实战手把手教你配置SMI接口搞定PHY寄存器读写在嵌入式以太网开发中PHY芯片的配置往往是项目成败的关键。很多开发者能够轻松完成MAC层的初始化却在PHY寄存器读写这个环节卡壳——明明硬件连接正确却无法正常通信或者调试时发现PHY状态寄存器读取异常却不知如何排查。本文将带你深入STM32的SMI接口实战用代码说话解决这些实际问题。1. 环境准备与硬件连接在开始编码之前确保你的硬件环境满足以下条件开发板STM32F407/STM32H743等支持以太网的型号PHY芯片常见型号如LAN8720A、DP83848等开发环境STM32CubeIDE HAL库硬件连接SMI接口MDC时钟、MDIO数据必须正确连接复位电路PHY的复位引脚需正确配置晶振25MHzMII或50MHzRMII常见硬件问题排查表现象可能原因检查点读取PHY ID失败MDC/MDIO接反交换MDC/MDIO线序寄存器值异常上拉电阻缺失MDIO需4.7K上拉通信不稳定时钟配置错误检查AHB时钟分频提示使用示波器测量MDC信号时正常应能看到2.5MHz以下的方波。如果完全没有信号可能是GPIO模式配置错误。2. SMI接口初始化实战SMIStation Management Interface是STM32与PHY芯片通信的专用接口通过MDC时钟线和MDIO数据线实现寄存器访问。以下是完整的初始化代码示例// 在stm32f4xx_hal_conf.h中启用以太网外设 #define HAL_ETH_MODULE_ENABLED // 初始化SMI接口时钟 void ETH_SMI_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); // MDC - PA1, MDIO - PA2 (根据具体型号调整) GPIO_InitStruct.Pin GPIO_PIN_1 | GPIO_PIN_2; GPIO_InitStruct.Mode GPIO_MODE_AF_PP; GPIO_InitStruct.Pull GPIO_NOPULL; GPIO_InitStruct.Speed GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate GPIO_AF11_ETH; HAL_GPIO_Init(GPIOA, GPIO_InitStruct); } // 配置ETH时钟分频 void ETH_ClockConfig(void) { RCC_PeriphCLKInitTypeDef PeriphClkInit {0}; PeriphClkInit.PeriphClockSelection RCC_PERIPHCLK_ETH; PeriphClkInit.EthClockSelection RCC_ETHCLKSOURCE_PLL; HAL_RCCEx_PeriphCLKConfig(PeriphClkInit); } // 完整ETH初始化 void MX_ETH_Init(void) { ETH_MACConfigTypeDef MACConf {0}; ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT], DMATxDscrTab[ETH_TX_DESC_CNT]; heth.Instance ETH; heth.Init.AutoNegotiation ETH_AUTONEGOTIATION_ENABLE; heth.Init.Speed ETH_SPEED_100M; heth.Init.DuplexMode ETH_MODE_FULLDUPLEX; heth.Init.PhyAddress LAN8720_PHY_ADDRESS; // 通常为0或1 HAL_ETH_Init(heth); // 配置DMA描述符 HAL_ETH_DMATxDescListInit(heth, DMATxDscrTab, Tx_Buff[0][0], ETH_TX_DESC_CNT); HAL_ETH_DMARxDescListInit(heth, DMARxDscrTab, Rx_Buff[0][0], ETH_RX_DESC_CNT); // 启动ETH HAL_ETH_Start(heth); }关键点解析GPIO复用配置必须将MDC/MDIO引脚设置为正确的Alternate FunctionAF11 for ETH时钟分频SMI时钟由AHB时钟分频得到最大不超过2.5MHzPHY地址通过硬件引脚配置常见值为0或13. PHY寄存器读写操作详解PHY芯片通过SMI接口暴露一系列寄存器用于配置和监控网络状态。以下是核心操作函数// 读取PHY寄存器 uint32_t ETH_ReadPHYRegister(uint16_t PHYReg) { uint32_t value 0; HAL_ETH_ReadPHYRegister(heth, LAN8720_PHY_ADDRESS, PHYReg, value); return value; } // 写入PHY寄存器 void ETH_WritePHYRegister(uint16_t PHYReg, uint16_t value) { HAL_ETH_WritePHYRegister(heth, LAN8720_PHY_ADDRESS, PHYReg, value); } // 示例读取PHY ID用于验证通信 uint32_t Get_PHY_ID(void) { uint32_t phyid1 ETH_ReadPHYRegister(PHY_ID1R); uint32_t phyid2 ETH_ReadPHYRegister(PHY_ID2R); return (phyid1 16) | (phyid2 0xFFF0); }常用PHY寄存器速查表寄存器地址功能说明BMCR0x00基本控制复位、自协商等BMSR0x01基本状态链路状态、自协商完成PHYID10x02PHY标识符1PHYID20x03PHY标识符2ANAR0x04自协商通告ANLPAR0x05自协商链路伙伴能力ANER0x06自协商扩展状态注意读写PHY寄存器时必须等待SMI接口空闲ETH_MACMIIAR的MII Busy位清零否则操作会被忽略。4. 典型应用场景与调试技巧4.1 链路状态检测实时监测网络连接状态是网络应用的基础功能// 检查链路状态阻塞式 uint8_t ETH_WaitLinkUp(void) { uint32_t timeout 0; uint32_t bmsr 0; while(timeout PHY_LINK_TIMEOUT) { bmsr ETH_ReadPHYRegister(PHY_BMSR); if(bmsr PHY_LINKED_STATUS) return 1; HAL_Delay(100); timeout 100; } return 0; } // 优化版非阻塞检测 uint8_t ETH_CheckLinkStatus(void) { uint32_t bmsr ETH_ReadPHYRegister(PHY_BMSR); return (bmsr PHY_LINKED_STATUS) ? 1 : 0; }4.2 速度与双工模式配置根据实际需求配置网络参数void ETH_Set_Speed_Duplex(uint8_t speed, uint8_t duplex) { uint16_t bmcr ETH_ReadPHYRegister(PHY_BMCR); // 关闭自协商 bmcr ~PHY_AUTONEGOTIATION; ETH_WritePHYRegister(PHY_BMCR, bmcr); // 手动配置模式 bmcr ~(PHY_SPEED_100 | PHY_FULLDUPLEX); if(speed ETH_SPEED_100M) bmcr | PHY_SPEED_100; if(duplex ETH_MODE_FULLDUPLEX) bmcr | PHY_FULLDUPLEX; ETH_WritePHYRegister(PHY_BMCR, bmcr); HAL_Delay(10); // 软复位使配置生效 bmcr | PHY_RESET; ETH_WritePHYRegister(PHY_BMCR, bmcr); while(ETH_ReadPHYRegister(PHY_BMCR) PHY_RESET); }4.3 常见问题排查指南问题1读取PHY ID返回0xFFFFFFFF检查MDC/MDIO线序是否正确测量MDC是否有时钟信号确认PHY地址设置正确问题2寄存器写入后读取值不一致确保等待SMI接口空闲检查BUSY位检查PHY是否处于复位状态验证上拉电阻是否正常工作问题3链路时断时续检查双工模式是否匹配交换机与PHY配置测量电源稳定性PHY对电源噪声敏感尝试降低MDC时钟频率5. 高级技巧与性能优化5.1 批量读写优化标准HAL库每次读写都会检查BUSY状态对于批量操作效率较低。可以优化为// 批量读取PHY寄存器优化版 void ETH_ReadPHYRegisters(uint16_t PHYReg, uint16_t *values, uint8_t count) { for(uint8_t i0; icount; i) { while(ETH-MACMIIAR ETH_MACMIIAR_MB); ETH-MACMIIDR 0; ETH-MACMIIAR (LAN8720_PHY_ADDRESS 11) | ((PHYRegi) 6) | ETH_MACMIIAR_MB; while(ETH-MACMIIAR ETH_MACMIIAR_MB); values[i] ETH-MACMIIDR; } }5.2 中断模式监控通过中断实时监测链路状态变化// 配置PHY中断 void ETH_PHY_Interrupt_Config(void) { // 使能链路状态变化中断 ETH_WritePHYRegister(PHY_IMR, PHY_INT_LINK_STATUS); // 配置EXTI中断连接PHY的中断引脚 __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct {0}; GPIO_InitStruct.Pin GPIO_PIN_13; // 假设PHY_INT接PB13 GPIO_InitStruct.Mode GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull GPIO_PULLUP; HAL_GPIO_Init(GPIOB, GPIO_InitStruct); HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0); HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); } // 中断处理函数 void EXTI15_10_IRQHandler(void) { if(__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_13) ! RESET) { uint16_t status ETH_ReadPHYRegister(PHY_ISR); if(status PHY_INT_LINK_STATUS) { // 处理链路状态变化 uint8_t link ETH_CheckLinkStatus(); // ...通知应用层 } __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_13); } }5.3 低功耗模式处理在低功耗应用中正确处理PHY状态void ETH_Enter_LowPowerMode(void) { // 关闭PHY uint16_t bmcr ETH_ReadPHYRegister(PHY_BMCR); bmcr | PHY_POWERDOWN; ETH_WritePHYRegister(PHY_BMCR, bmcr); // 关闭ETH时钟 __HAL_RCC_ETHMAC_FORCE_RESET(); __HAL_RCC_ETHMAC_RELEASE_RESET(); __HAL_RCC_ETHMAC_CLK_DISABLE(); } void ETH_Exit_LowPowerMode(void) { // 恢复ETH时钟 __HAL_RCC_ETHMAC_CLK_ENABLE(); // 唤醒PHY uint16_t bmcr ETH_ReadPHYRegister(PHY_BMCR); bmcr ~PHY_POWERDOWN; ETH_WritePHYRegister(PHY_BMCR, bmcr); // 重新初始化ETH MX_ETH_Init(); }

相关文章:

STM32以太网实战:手把手教你配置SMI接口,搞定PHY寄存器读写

STM32以太网实战:手把手教你配置SMI接口,搞定PHY寄存器读写 在嵌入式以太网开发中,PHY芯片的配置往往是项目成败的关键。很多开发者能够轻松完成MAC层的初始化,却在PHY寄存器读写这个环节卡壳——明明硬件连接正确,却无…...

高工独家报告|谁在收割2026智驾市场红利?440万辆背后的芯片大洗牌

高工智能汽车研究院发布《2026年中国市场智能汽车SoC芯片行业分析报告》。报告立足中国乘用车市场,基于乘用车前装量产数据库,全面解析智能驾驶SoC(含前视一体机、域控制器及高阶自动驾驶辅助芯片)与智能座舱SoC(含端侧…...

CAXA 表格样式

位置属性和 CAD 类似默认【标准】自带,删不掉。预览常规-表格方向向上;向下;单元样式标题;表头;数据;【切换】对应下方 常规、文字的属性设置。常规【对齐】创建行时合并单元:文字命令位置先设置…...

别再怪PoE不稳定了!手把手教你排查网线、供电、配置三大坑(附真实监控项目踩坑实录)

PoE稳定性实战指南:从网线到供电的深度排查手册 凌晨三点,监控室突然响起警报——某重要区域的摄像头集体离线。值班工程师的第一反应往往是"设备又坏了",但真实情况可能藏在那些容易被忽略的细节里:一根劣质网线在低温…...

深入Linux内核:图解PTP硬件时间戳(HW Timestamp)从网卡到用户空间的完整路径

深入Linux内核:图解PTP硬件时间戳从网卡到用户空间的完整路径 1. 高精度时间同步的技术演进与PTP核心价值 在分布式系统与工业自动化领域,微秒级甚至纳秒级的时间同步已成为刚需。传统NTP协议受限于软件实现和网络抖动,精度通常只能达到毫秒级…...

使用C#代码在 PowerPoint 中组合或取消组合形状

在 PowerPoint 中,对形状进行组合和取消组合是两个非常实用的功能。通过组合,您可以将多个形状整合为一个整体,从而像操作单个对象一样同时移动、设置格式、调整大小或旋转这些形状。而取消组合则可以解除这些形状之间的关联,使您…...

2026 AI 标书工具深度测评:技术原理、功能对比与选型指南

一、行业背景与测评说明1.1 招投标行业数字化痛点传统标书制作存在三大核心痛点:效率低下:一份 100 页的标准标书,纯人工制作需 3-5 天,其中 80% 时间用于解析招标文件、整理框架和填充通用内容废标风险高:据行业统计&…...

Blender3mfFormat终极指南:开启3D打印无缝工作流的新时代

Blender3mfFormat终极指南:开启3D打印无缝工作流的新时代 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 你是否曾为Blender与3D打印软件之间的格式转换而烦恼…...

2023年天梯赛真题解析L2-2(优先级队列)

L2-046 天梯赛的赛场安排 题目链接: https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId1649748772841508873&page1 题目分析: 本题的考点是结构体优先级队列,因为每个学校包含的信息较多&am…...

工业内窥镜哪家好用?

经常有不同行业的朋友问我,工业内窥镜品牌这么多,到底该怎么选?其实对于大多数企业来说,选择一款适用性广、能满足多种检测场景的设备,才是最划算的。我用了这么多年韦林工业内窥镜,最大的感受就是它几乎能…...

微信小程序 健身服务与轻食间平台系统健身减肥系统

目录同行可拿货,招校园代理 ,本人源头供货商项目概述核心功能模块技术实现亮点商业模式差异化优势项目技术支持源码获取详细视频演示 :同行可合作点击我获取源码->获取博主联系方式->进我个人主页-->同行可拿货,招校园代理 ,本人源头供货商 项目概述 微信…...

昇腾环境300v pro 搭建qwen3 vl

1.启动dockerdocker run -itd \--name qwen-vl-serve \--nethost \--device/dev/davinci0 \--device/dev/davinci_manager \--device/dev/devmm_svm \--device/dev/hisi_hdc \-v /home/zhouty/Qwen3-VL-8B-Instruct:/workspace/models \-v /usr/local/Ascend/driver:/usr/local…...

如何为Claude Code配置Taotoken的API Key与Base地址实现稳定调用

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 如何为Claude Code配置Taotoken的API Key与Base地址实现稳定调用 Claude Code作为一款强大的AI编程助手,其原生服务在某…...

OpenClaw入门教程:从零部署到第一个智能体

OpenClaw OpenClaw(原 Moltbot)是一个开源的 AI 智能体(Agent)框架,旨在通过连接大语言模型(LLM)与外部工具(如浏览器、API、办公软件),实现自动化任务执行。…...

如何用MusicFree插件构建你的跨平台音乐生态:从零开始的全流程指南

如何用MusicFree插件构建你的跨平台音乐生态:从零开始的全流程指南 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins 厌倦了在不同音乐应用间反复切换?MusicFree插件系统为你…...

【MLOps】模型部署与监控实战:从训练到生产的完整链路

一、MLOps概述与重要性 在机器学习项目中,模型训练仅仅是第一步。将训练好的模型部署到生产环境并持续监控其性能,是确保业务价值实现的关键环节。MLOps(Machine Learning Operations)正是解决这一问题的方法论和实践体系。 1.1 什…...

PyCharm无法引用本地扩展包问题的结解决方法

一、问题:PyCharm无法引用pygame等本地扩展包。二、原因分析PyCharm使用了自带的Python解释器,而扩展包在自己的Python里。三、解决方法:1、换成自己的解释器,也就是把pygame所在的Python解释器引进来。2、具体步骤:汉…...

NVIDIA Profile Inspector完整指南:解锁显卡隐藏性能,游戏帧数提升50%

NVIDIA Profile Inspector完整指南:解锁显卡隐藏性能,游戏帧数提升50% 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏卡顿、画质不佳而烦恼吗?NVIDIA Pro…...

有哪些AI论文网站是真的坚守学术严谨,而不是空洞拼凑?

在 AI 写作技术迅猛发展的当下,越来越多的论文工具涌现出来,声称能快速生成高质量学术内容。然而,真正经得起推敲的却寥寥无几。许多工具看似功能强大,实则存在逻辑混乱、术语错误、格式不规范等硬伤,生成的文章缺乏深…...

IPD咨询洞察:企业前后端为什么总是拧巴?IPD给出了答案

很多企业有一个共同的困境:执行力不差,但结果总差那么一口气。产品做出来了,却没有竞争力;战略定下来了,却落不到产品上;研发埋头苦干,市场却说卖不动——前端和后端始终拧巴,内耗比…...

【AI时代】一句指令复刻所有网页 WEB原型不用愁

【AI时代】一句指令复刻所有网页 WEB原型不用愁“连接 CDP,参考 baidu.com,开发功能原型,1:1 复刻现有页面。”就这么一句话,AI 帮你把原型做出来了。📸 效果对比 原始参考页面生成效果💡 这是 原型开发方式…...

GitHub Copilot 下月改按量计费,我算了一周的 token 账单

微软上个月官宣:6月1日起,GitHub Copilot 全部计划转向按量计费(usage-based pricing)。原来每月19美元的订阅费变成19美元的token额度,用完就得充。 我用了一周时间,把自己日常开发中 Copilot、Claude Cod…...

QMCDecode:3步解锁你的QQ音乐收藏,告别格式限制的烦恼

QMCDecode:3步解锁你的QQ音乐收藏,告别格式限制的烦恼 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录&#…...

【 Godot 4 学习笔记】命名规范

命名规范类型命名规范示例文件与文件夹snake_case (蛇形)player_controller.gd, assets/类名 / 脚本名PascalCase (大驼峰)PlayerController, YAMLParser场景节点名PascalCase (大驼峰)HitBox, Camera3D, Player函数 / 方法snake_case (蛇形)func load_level():变量 / 信号snak…...

Windows平台PDF处理终极指南:Poppler for Windows让你告别复杂编译

Windows平台PDF处理终极指南:Poppler for Windows让你告别复杂编译 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 还在为Windows系统上…...

小白进阶挖洞大神 SRC 漏洞挖掘全流程实战指南

凌晨两点,大学生张三盯着电脑屏幕突然跳出的「高危漏洞奖励到账」提示,手抖得差点打翻泡面——这是他挖到人生第一个SRC漏洞(某电商平台的越权访问漏洞)后收到的第一笔奖金,金额足够支付三个月生活费。这样的故事&…...

挖 SRC 必备 25 个漏洞平台 零基础入门到实战全汇总

【值得收藏】程序员必看:网络安全漏洞挖掘平台大全,附高额奖励攻略 本文详细介绍了30网络安全应急响应中心(SRC)平台,包括腾讯、360、华为、京东等企业官方漏洞平台,以及补天、Seebug等第三方平台。这些平台允许白帽黑客提交企业…...

一文分清黑客、骇客、白客、红客,各自职责一目了然

黑客 起源 “黑客”一词是英文Hacker的音译。这个词早在莎士比亚时代就已存在了,但是人们第一次真正理解它时,却是在计算机问世之后。根据《牛津英语词典》解释,“hack”一词最早的意思是劈砍,而这个词意很容易使人联想到计算机…...

28 岁大专学历顺利转行网安 过来人 8 条避坑经验心得

网络安全行业 “人才缺口 300 万 、平均年薪超 25 万” 的红利,让无数职场人动了转行心思。尤其是学历普通(如大专)的群体,既面临原有岗位的天花板,又渴望通过技术转型实现薪资跃迁。但网安行业看似门槛低,…...

Worldquant研究顾问速通

几天时间速通拿了金牌,中间停了一两周,然后仔细研究了下,学了相关知识,搭建自己ai驱动的工作流后每天大约10分钟设置好任务,可探索到10来个可以提交的alpha,目前产出比大约在1/100,simulate100个…...