大家好! 我使用taobao上买的STM32F407VET,在STM32CubeMX进行配置。STM32CubeMX版本是4.15,HAL驱动是F4 1.12,附加FreeRTOS和LwIP组件。 采用微雪DP83848模块,工作正常。更换微雪LAN8720A模块。没有调试成功。 按照网上查找的说法,LAN8720A修改PHY地址、PHY_SR、PHY_SPEED_STATUS、PHY_DUPLEX_STATUS,即可正常工作。 #define PHY_SR ((uint16_t)31U) /*!< PHY status register Offset */ #define PHY_SPEED_STATUS ((uint16_t)0x0004U) /*!< PHY Speed mask */ #define PHY_DUPLEX_STATUS ((uint16_t)0x0010U) /*!< PHY Duplex mask */ 不能工作。下载该模块http://www.waveshare.net/shop/LAN8720-ETH-Board.htm的资料和示例,不能工作。 查看LAN8720A芯片手册,微雪LAN8720A模块对比原子开发板的原理图,有一些区别: 1。PHY地址是1而不是0。 2。LED1(绿色)电路禁能了内部1.2V稳压器。这个没有想明白为什么。 3。采用OSCIN模式,模块提供有50M有源晶振。 另外,检查发现购买的模块MCIO上拉电阻和REST上拉电阻阻值交换。手册上推荐的MCIO上拉电阻是152,错用复位的472。怀疑是悍错了。 改造:1。将LED1电路A接VCC处划断,原331电阻旋转90度改到A,K段就近连到地。符合手册上推荐的使能1.2V稳压器。 2。交换MCIO上拉电阻和REST上拉电阻。 3。检查发现中断引脚330电阻没有焊接,无需断开。 继续实验,读PHY MII寄存器正确。出现的问题是,不能PING通。芯片刚启动时会出现两个超时,然后是无法到达。似乎没有发生输入接收中断。 跟踪后发现,初始化正常通过,没有出现错误。 PS:这里要吐嘈一下,HAL初始化函数中的问题:如果PHY地址设置错误,读出寄存器的值全是1,即65535,掩码操作判断状态全部正常! 应该增加一个判断是否为0xFFFF的条件。 修改了ethernetif_set_link函数,调用1次 netif_set_link_up(link_arg->netif)。 似乎所有的TCP任务都处于阻塞状态。 不知道大家有没有成功调试通过的经验,希望介绍一下。 #define PHY_SR ((uint16_t)31U) /*!< PHY status register Offset */ #define PHY_MICR ((uint16_t)30U) /*!< MII Interrupt Control Register */ #define PHY_MISR ((uint16_t)29U) /*!< MII Interrupt Status and Misc. Control Register */ #define PHY_LINK_STATUS ((uint16_t)0x0004U) /*!< PHY Link mask */ #define PHY_SPEED_STATUS ((uint16_t)0x0004U) /*!< PHY Speed mask */ #define PHY_DUPLEX_STATUS ((uint16_t)0x0010U) /*!< PHY Duplex mask */ #define PHY_MICR_INT_EN ((uint16_t)0x0000U) /*!< PHY Enable interrupts */ #define PHY_MICR_INT_OE ((uint16_t)0x0010U) /*!< PHY Enable output interrupt events */ #define PHY_MISR_LINK_INT_EN ((uint16_t)0x0000U) /*!< Enable Interrupt on change of link status */ #define PHY_LINK_INTERRUPT ((uint16_t)0x0010U) /*!< PHY link status interrupt mask */ |
软件为keil5,头文件未找到
通过FATFS文件系统读写SD卡创建文件可以了,但加入MSC,一直显示一个没有格式化的U盘盘符,也不能格式化,这是什么问题导致的
STM32双核H7核间通信的方法
STM32F103C8T6使用CubeIDE烧录运行报硬件错误,相同代码MDK烧录却可以正常运行
MCSDK5.4.4 FOC电流闭环运行电机偶发停转问题
MCSDK6.3.1使用SIXSTEP如何才能使用电流模式呢?我在配置了电流传感器后仍然无法使用电流模式。
STM32G473VET6同时使用6个片上放大器(OPAMP)的PGA加外部偏置模式,引脚位置让差分信号走线分离,信号有无较大影响?
STM32CubeMX 使用"FW_F1 V1.8.6"生成FreeRTOS代码缺少"freertos_mpool.h"?
CMAKE生成代码后问题。
各位大佬,比方说我用STM32CubeMX配置了单片机的管脚,然后用STM32CubeIDE编写代码,代码编写一半的过程中,我发现管脚配置中要添加新的外设设置,用CudeMX添加配置后重新生成代码,怎么保证我之前在CubeIDE中自己编写的代码部分不被覆盖掉?
当时项目开发时间紧,耗不起。最后采用了DP83848方案。
这两天同事又拿出来这个LAN8720A。结果……
不小心升级了软件到最新版:
STM32CubeMX Software V4.20.0 / 28 February 2017
STM32CubeF4 Firmware Package V1.15.0 / 17-February-2017
生成的芯片默认是LAN8720A了!如果选择外部中断,编译会出现提示:
如果注释掉,仍然有问题:
看来这个版本的软件系统秉承一贯的粗糙风格,太不稳定了。
无语——
直接选择的CPU 407,SYS选择Tim4
应该能编译通过的。
我是Debian 9, 32位环境,eclipse 4.6 + gnu mcu 2.5.1 + JLink OB。
个人感觉出现上述问题,是选择了CPU,没有选择板子造成的。修改的地方很多。
简便办法就是到STM32CubeMX 中新建一个工程,选择 NUCLEO-429ZI板子。有相应的资料可以查看。选中ETH,可以参考生成的代码片段。或者到仓库中查找该板子的例程。
我用的模块没有中断,只能用查询方法。
很久没有看了。估计你的问题解决了。
个人开发中也遇到过连接不稳定情况。多数是硬件布线问题以及元件选择导致的。例如,原型开发中,差分线没有严格等长,尽管没有超过5cm,也出现不稳定情况。在客户现场应用,因为环境低温,网线插头热胀冷缩导致接触不良情况也有,更改水晶头,增加软件心跳包验证等手段最终才解决(即不产生影响生产的故障)。
解决这些问题,我一般会用代换法,用验证过的器件将问题划分为硬件和软件,逐步缩小范围。
评分
查看全部评分
用LAN8742的BSP生成工程就行,不用BSP不会生成ETH Phy的初始化代码啥的。LAN8742和LAN8720没啥区别,就是多了个WOL功能,不碰WOL的话,直接用8742的BSP不会有任何问题