stm32F407 调试 LAN8720A ping不通问题解决

7 篇文章 0 订阅
1 篇文章 0 订阅

硬件信息

主控:stm32f407VET6

PHY芯片:LAN8720A

网络变压器:HR91105A 带网口座

TCP/IP 协议栈

LWIP

版图设计

 

PCB制作完成,打样板回来后,发现有几个问题:

  1. HR911105A的 4 脚忘了接。。。应该接到VDDE,此处飞线轻松解决;
  2. LAN8720A的封装用的不太好,芯片背面的焊盘是用来接地的,这也是该芯片唯一接地的地方,而我把这个焊盘画的有点小了,如图:

     

然后拿来野火的例程一通试,因为野火的是stm32F407ZET6,所以网络部分引脚分配和我有一点区别,就是ETH_TX_EN、ETH_TXD0 和 ETH_TXD1。

把这三个引脚改了改:

#define ETH_TX_EN_Pin               GPIO_PIN_11       //B11
#define ETH_TX_EN_GPIO_Port         GPIOB
#define ETH_TXD0_Pin                GPIO_PIN_12       //B12
#define ETH_TXD0_GPIO_Port          GPIOB
#define ETH_TXD1_Pin                GPIO_PIN_13       //B13
#define ETH_TXD1_GPIO_Port          GPIOB 

然后就是连接网线,配置IP,一通ping,结果并不能ping通。

  • 关防火墙,没用
  • 往LAN8720A底下的过孔灌锡,使其可靠接触,没用
  • 此时发现R7 R9两个电阻的阻值有问题,野火推荐是4.7K ,正点原子是10K ,我画成了510R。。。不过是下拉电阻应该没影响,换成4.7K ,没用
  • HR911105A的两个灯的串联电阻阻值不对,我也都画成了510R,可是灯都亮了,能有个毛的影响。
  • 换成正点原子的例程一通试,没用

现在是程序能够跑到 eth init 成功,也能跑到 LinkUP,可是就TMDping不通。

然后就查网上各种帖子,有人说把PHY芯片的地址设为1就可以ping通了,

/* LAN8720_PHY_ADDRESS Address*/ 
#define LAN8720_PHY_ADDRESS          1U

我也试了试,发现无论PHY芯片地址设为几,都能 init 成功,这不扯淡吗?看了看官方手册,人家就是说如果10脚不接,地址默认就为0,设置成0肯定是对的。

这时又发现了我LAN8720A的复位脚没接,OMG,这个到底有没有影响?再查芯片手册。

手册上说,这个脚人家为了防止你犯傻,已经内部上拉了,所以不接它肯定不影响你传输东西!

现在是绿灯常亮,黄灯偶尔闪一下,ping的时候,程序里倒是进了中断,但是就是ping不通。

好吧,再读一下程序,发现:



卧槽,

够坑啊,这他么怎么不用宏,直接写了个GPIOG啊,我100脚VET6哪有GPIOG,果断改成GPIOB,结果直接ping通,哈哈哈 大快人心!

难怪ping不通,能收到但是发不出来肯定不通啊。

然后我再试了试改下PHY芯片地址,改成其他数值都不行,只有0 可以,看来这个LWIP的程序是有点问题的,以后有时间了再仔细考究下。

  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
你好!关于 STM32F407LAN8720 以太网通信的调试,我可以给你一些指导。首先,确保你的硬件连接正确,包括连接正确的引脚和电源。然后,你需要在 STM32F407 上配置以太网控制器和 PHY。以下是一些基本步骤: 1. 配置时钟:使用 RCC(Reset and Clock Control)模块配置系统时钟和以太网时钟。确保以太网时钟与 PHY 的时钟匹配。 2. 配置 GPIO:将相关的引脚配置为以太网功能。这些引脚包括以太网收发数据引脚(TXD0、TXD1、RXD0、RXD1)、时钟引脚(REF_CLK)、重启引脚(RESET)等。 3. 配置以太网 MAC(Media Access Control):使用 ETH(Ethernet)库函数或寄存器设置以太网控制器的 MAC 地址、传输模式、帧过滤器等。 4. 配置以太网 PHY(Physical Layer):使用 ETH 库函数或寄存器设置 PHY 控制寄存器,如速度、双工模式等。此外,还可以通过读取和写入 PHY 寄存器来监测和调整链路状态。 5. 初始化以太网:调用 ETH 库函数或设置相关寄存器来初始化以太网控制器。 6. 实现网络数据传输:使用 ETH 库函数或寄存器来发送和接收以太网数据帧。你可以使用标准的 TCP/IP 协议栈,如 lwIP(lightweight IP)来实现更高级的网络通信功能。 在调试过程中,你可以使用串口输出调试信息,观察以太网控制器和 PHY 的状态变化。此外,还可以使用网络调试工具,如 Wireshark,来监视网络数据流量和分析问题。 需要注意的是,以上提到的步骤是一个基本的框架,具体的实现细节可能会因为硬件和软件平台的不同而有所差异。你可以参考 STM32F407 的参考手册和以太网控制器的数据手册来获取更详细的信息和代码示例。 希望这些信息能对你有帮助!如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值