[STM32H7] 【求助】RNDIS使用DHCP得不到IP地址的问题

[复制链接]
1459|8
 楼主| 纪国圣 发表于 2022-5-14 13:06 | 显示全部楼层 |阅读模式
HC, ip
最近在GITHUB上搜索到有位国外的程序员Nico Korn使用FREERTOS+FREERTOS TCP实现了RNDIS功能。项目网址如下:
https://github.com/nicokorn/STM32F4XX_RNDIS_DEMO
原作者使用STM32F411作为下位机,IDE为IAR v9。演示视频见docs文件夹:
58054627f3062906c8.png
由于使用HAL开发,于是尝试移植到STM32H7A3上,结果遇到了问题:
1.移植后上位机可以识别网卡
69873627f312baf886.png
但是却不能得到有效的IP地址:
46774627f3182791c4.png
得到的地址为169.254.114.19。查找资料知道是因为下位机未收到DHCP服务器分配的地址,所以从169.254.xxx.xxx中随机得到的一个IP地址。可以PING通:
64521627f32b57ffcd.png
但由于不在一个网段内肯定是不可能访问下位机的网页。
2.尝试使用静态IP,同样不能访问该下位机的网页。
3.以前使用LWIP的DHCP遇到过这样的问题,尝试增大HEAP值,也没什么作用。
4.抓包发现STM32H7A3尝试DHCP Discover,却没有任何回应:
31264627f349ee4d88.png
单步调试发现在执行到函数dhcpserver_handle的FreeRTOS_recvfrom时,其返回值lengthOfbytes一直为负数,作者对此注释写着:// Error (maybe the connected socket already shut down the socket?). Attempt graceful shutdown.   
问题是以前使用另外的以为大神Sergey Fetisov编写的RNDIS插上USB后是可以通过浏览器直接访问其STM32中存储的web,其代码中也开启了DHCP,但没遇到这个问题。在演示视频中作者也是插上USB后是可以通过浏览器直接访问其STM32中存储的web。为何移植后却不行?
5.为了排除其他因数,基本上只更换了HAL库,其余部分没变,但问题依旧。是否电脑部分需要设置?望各位大神不吝赐教。
移植的源代码如下:
STM32H7A3_RNDIS_DEMO.zip (2.54 MB, 下载次数: 5)
 楼主| 纪国圣 发表于 2022-5-15 20:58 | 显示全部楼层
望各位大佬解答。
rosemoore 发表于 2022-5-28 17:29 | 显示全部楼层
交叉网线连接的?
 楼主| 纪国圣 发表于 2022-5-28 18:19 | 显示全部楼层
本帖最后由 纪国圣 于 2022-5-28 18:25 编辑
rosemoore 发表于 2022-5-28 17:29
交叉网线连接的?

不是通过传统的网线连接,而是用USB走RNDIS协议实现一个虚拟网卡。
loutin 发表于 2022-5-29 11:23 | 显示全部楼层
你是通过交换机还是直连?
cemaj 发表于 2022-5-29 11:50 | 显示全部楼层
RNDIS没用过,看看网段是不是一致呢?
 楼主| 纪国圣 发表于 2022-5-29 15:21 | 显示全部楼层
loutin 发表于 2022-5-29 11:23
你是通过交换机还是直连?

直接接到电脑上的。国外的那位大神也是这样连的,一点问题也没有。
 楼主| 纪国圣 发表于 2022-5-29 15:24 | 显示全部楼层
cemaj 发表于 2022-5-29 11:50
RNDIS没用过,看看网段是不是一致呢?

现在就是网段不一致的问题。DHCP分配IP失败。
tifmill 发表于 2022-5-29 17:30 | 显示全部楼层
自动获取ip的吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

407

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部