OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12062|回复: 22

如何实现STM32F407+LAN8720热插拔功能?

[复制链接]

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
发表于 2019-3-4 09:17:33 | 显示全部楼层 |阅读模式
30金钱
  近期想实现一个LAN8720A热插拔功能,但是不想用跑什么UCOS等等系统,就是纯属裸跑,看了http://www.openedv.com/forum.php?mod=viewthread&tid=66604&highlight=%C8%C8%B2%E5%B0%CE 该作者的文章,释放了内存等等操作,但是还是不行。跪求论坛里的大神给点建议或者分享一下代码,因为搜索了一下关于网络这块的热插拔的相关内容,但是极少,希望大神们一起分享一下经验。

最佳答案

查看完整内容[请看2#楼]

8720有寄存器可以判断网线是否接入的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

83

帖子

0

精华

高级会员

Rank: 4

积分
932
金钱
932
注册时间
2016-3-21
在线时间
113 小时
发表于 2019-3-4 09:17:34 | 显示全部楼层
8720有寄存器可以判断网线是否接入的C:\Users\admin\Desktop\1.png
1.png
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2019-3-4 10:31:05 | 显示全部楼层
试试FreeRTOS+cycloneTCP
一分耕耘一分收获。
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-3-4 12:51:14 | 显示全部楼层
加油,不懂只能来帮你顶一下!
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

21

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1423
金钱
1423
注册时间
2016-8-3
在线时间
576 小时
发表于 2019-3-4 13:09:21 | 显示全部楼层
1208 发表于 2019-3-4 12:51
加油,不懂只能来帮你顶一下!

你的热插拔是什么意思?不差网线的时候系统正常运行?插上就能用网络了?
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2019-3-4 13:14:24 | 显示全部楼层
yklstudent 发表于 2019-3-4 10:31
试试FreeRTOS+cycloneTCP

不用系统,纯裸跑,用系统就没意义了
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2019-3-4 13:15:03 | 显示全部楼层
1965969523 发表于 2019-3-4 13:09
你的热插拔是什么意思?不差网线的时候系统正常运行?插上就能用网络了?

就是不管任何时间,插拔能正常连接通信
回复

使用道具 举报

21

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1423
金钱
1423
注册时间
2016-8-3
在线时间
576 小时
发表于 2019-3-4 13:17:06 | 显示全部楼层
jiangyy 发表于 2019-3-4 13:15
就是不管任何时间,插拔能正常连接通信

那你不插的时候,系统需要运行吗?还是像原子那样等待网线插入
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2019-3-4 13:19:46 | 显示全部楼层
1965969523 发表于 2019-3-4 13:17
那你不插的时候,系统需要运行吗?还是像原子那样等待网线插入

热插拔的意思就是   即插就能连上,即拔就断开的意思。就跟电脑有线网络类似。
回复

使用道具 举报

21

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1423
金钱
1423
注册时间
2016-8-3
在线时间
576 小时
发表于 2019-3-4 13:21:15 | 显示全部楼层
jiangyy 发表于 2019-3-4 13:19
热插拔的意思就是   即插就能连上,即拔就断开的意思。就跟电脑有线网络类似。

把自协商关了
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2019-3-4 13:23:03 | 显示全部楼层

你做过吗?分享一下
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-3-4 20:13:39 | 显示全部楼层
1965969523 发表于 2019-3-4 13:09
你的热插拔是什么意思?不差网线的时候系统正常运行?插上就能用网络了?

热插拔不就是上电完插上接能用了么
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

21

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1423
金钱
1423
注册时间
2016-8-3
在线时间
576 小时
发表于 2019-3-5 08:34:50 | 显示全部楼层
1208 发表于 2019-3-4 20:13
热插拔不就是上电完插上接能用了么

是的,但是网络通信如果加上自协商的话,程序默认会等待网线连接才会继续向下运行,否则死等
回复

使用道具 举报

21

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1423
金钱
1423
注册时间
2016-8-3
在线时间
576 小时
发表于 2019-3-5 08:42:09 | 显示全部楼层
jiangyy 发表于 2019-3-4 13:23
你做过吗?分享一下

在stm32f4x7_eth.c中

  if(ETH_InitStruct->ETH_AutoNegotiation != ETH_AutoNegotiation_Disable)
  {  
    /* We wait for linked satus... */
    do
    {
      timeout++;
    } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO));
    /* Return ERROR in case of timeout */
    if(timeout == PHY_READ_TO)
    {
      return ETH_ERROR;
    }
    /* Reset Timeout counter */
    timeout = 0;


中的ETH_AutoNegotiation_Disable,换成ETH_AutoNegotiation_Enable
回复

使用道具 举报

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2019-1-29
在线时间
67 小时
发表于 2019-3-12 00:29:21 | 显示全部楼层
我是用CubeMX生成的代码, 加CubeMX带的LAN8742, 直接用在LAN8720上完全OK.  热插拔也没任何问题.  就是程序方面需注意因为拔网线导致的通信超时问题, 做好重试的逻辑就可以了.
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2019-4-18 14:52:53 | 显示全部楼层
ZHDX 发表于 2019-3-12 00:29
我是用CubeMX生成的代码, 加CubeMX带的LAN8742, 直接用在LAN8720上完全OK.  热插拔也没任何问题.  就是程序 ...

分享一下
回复

使用道具 举报

12

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
330
金钱
330
注册时间
2015-6-24
在线时间
124 小时
发表于 2019-9-21 15:51:56 | 显示全部楼层
你好,最近也在完LWIP,请教一下,这个热拔插功能,您是怎么实现的,我想实现的是热拔插DHCP自动获取IP。方便的话麻烦加个QQ。
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2019-9-23 11:36:50 | 显示全部楼层
_yi_feng_ 发表于 2019-9-21 15:51
你好,最近也在完LWIP,请教一下,这个热拔插功能,您是怎么实现的,我想实现的是热拔插DHCP自动获取IP。方 ...

建议你不要用单片机去跑LWIP。我调试了很久,跑的时间长了,会假死现象。应该是用的阻塞式。而且比较占用RAM。推荐你使用硬件TCP协议,比如W5500(SPI)。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-9-16
在线时间
15 小时
发表于 2019-11-20 09:06:44 | 显示全部楼层
ZHDX 发表于 2019-3-12 00:29
我是用CubeMX生成的代码, 加CubeMX带的LAN8742, 直接用在LAN8720上完全OK.  热插拔也没任何问题.  就是程序 ...

有问题吧,我的是LAN8720,如果插上网线初始化成功,这时候再拔掉再插上是可以ping通的,但是不插网线就开机,初始化失败,后面再插网线就没用,我估计你就是这种效果,这不是真正的热拔插
回复

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-8-30
在线时间
5 小时
发表于 2020-4-27 10:41:52 | 显示全部楼层
STM32以太网初始化库文件里面默认是需要插上网络,然后自动协商的,在不插网络的时候可以强行放开某些部分,让整个初始化执行完成,比如把网络设置成百兆全双工。
然后网线热插拔其实也就是检查插入网线,如果有插入的话就跳转到去执行以太网的初始化,这个时候就可以和当前插入的设备自动协商完成匹配,然后就可以使用
回复

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-8-30
在线时间
5 小时
发表于 2020-4-27 10:42:41 | 显示全部楼层
初始化函数里面有几个返回ERROR退出的地方可以适当的放开,更改一下初始化函数
回复

使用道具 举报

28

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2018-3-26
在线时间
294 小时
发表于 2020-10-28 11:36:11 | 显示全部楼层
楼主有没有成功,分享一下
茵茵猪头
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2021-2-24 18:02:43 | 显示全部楼层
DP83848配置图.jpg 自协商开启.jpg
链接回调开启.jpg

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 00:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表