微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32中ETH驱动配置注意事项

STM32中ETH驱动配置注意事项

时间:11-19 来源:互联网 点击:
1.MII/RMII/SMI接口连接和配置
SMI又称站点管理接口,用于cpu与外置PHY芯片通讯,配置相关参数,包含MDC和MDIO两个管脚(CPU上有对应引脚,当然用普通GPIO口模拟SMI管理也是可行的,不过需要自己设置时序,按照固定帧结构写入和读取数据,这个我就不具体说明,有空我会单独将程序给出)。MII和RMII是两种以太网数据传输接口,因为RMII在使用更少接口的情况下具有RMII相同的功效,因此我建议一般采用RMII模式,如下图连接即可: 
特别注意:RMII模式下REF_CLK要连接CPU的MCO引脚,且MCO输出时钟应为50MHz. 2.PHY初始化   一般来说,stm32外部驱动PHY芯片有两种连接方式,MII和RMII总线,这个与硬件设计有关,不过stm32芯片一般都支持这两种总线连接方式,因为RMII总线在传输效果不变的情况下占用接口更少,因此一般推荐RMII方式.   以DP83848芯片为例:   从上面可以看出RMII总线对应的输入时钟要设置为50MHZ, 当然这与你原理图的布线有,连接PHY芯片X1接口对应GPIO接口的外设区域时钟就要设定为该值,考虑到挂在同区域外设的时钟要求,为了方便设计,对于stm32f207vet6(我用的芯片),将系统时钟从120MHz改为100MHz,该区域外设时钟设置为1/2即可。对于stm32f107vc则需要通过PLL3将MCO端口时钟拉高到50Mhz输出到phy。 目前来说大部分人对于stm32驱动的移植都是直接把官方例程拿过来用,但我建议还是对照参考手册仔细研读每一项,自己配置ETH参数,因为stm32芯片集成的MAC配置对于数据的接收和发送影响很大。

ETH_DeInit();/* Software reset */ETH_SoftwareReset();/* Wait for software reset */while (ETH_GetSoftwareResetStatus() == SET);/* ETHERNET Configuration*//* Call ETH_StructInit if you dont like to configure all ETH_InitStructure parameter */ETH_StructInit(Ð_InitStructure);/* Fill ETH_InitStructure parametrs *//* ETH_MACCR--*///参数是否自动配置,选择disable需要自动配置默写参数 ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable;ETH_InitStructure.ETH_Watchdog = ETH_Watchdog_Disable;                            //关闭看门狗定时器,允许接收超长帧ETH_InitStructure.ETH_Jabber = ETH_Jabber_Disable;                                //关闭jabber定时器,允许发送超长帧ETH_InitStructure.ETH_InterFrameGap = ETH_InterFrameGap_40Bit;                //发送帧间间隙ETH_InitStructure.ETH_Speed = ETH_Speed_100M;                                     //快速以太网速度ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;                    //不启用自循环模式ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;                                 //全双工模式/*自动填充/CRC剥离处理不执行,转发所有帧*/ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;   #if CHECKSUM_BY_HARDWARE ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;                //IPV4头文件硬件校验#endif/* ETH_MACFFR-*/ ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Disable;                                   //MAC过滤只接受通过源目的地址的数据ETH_InitStructure.ETH_SourceAddrFilter = ETH_SourceAddrFilter_Normal_Enable;                 //MAC过滤源地址错误帧?ETH_InitStructure.ETH_PassControlFrames = ETH_PassControlFrames_BlockAll;                    //MAC不转发任何控制帧ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;        //接收广播帧ETH_InitStructure.ETH_DestinationAddrFilter = ETH_DestinationAddrFilter_Normal;              //目的地址过滤结果正常ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;                         //混杂模式,启用帧过滤ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;             //过滤器正常工作,不传送控制帧ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;                 //单播帧目的地址完美过滤

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top