最近在GITHUB上搜索到有位国外的程序员Nico Korn使用FREERTOS+FREERTOS TCP实现了RNDIS功能。项目网址如下:
https://github.com/nicokorn/STM32F4XX_RNDIS_DEMO
原作者使用STM32F411作为下位机,IDE为IAR v9。演示视频见docs文件夹:
由于使用HAL开发,于是尝试移植到STM32H7A3上,结果遇到了问题:
1.移植后上位机可以识别网卡
但是却不能得到有效的IP地址:
得到的地址为169.254.114.19。查找资料知道是因为下位机未收到DHCP服务器分配的地址,所以从169.254.xxx.xxx中随机得到的一个IP地址。可以PING通:
但由于不在一个网段内肯定是不可能访问下位机的网页。
2.尝试使用静态IP,同样不能访问该下位机的网页。
3.以前使用LWIP的DHCP遇到过这样的问题,尝试增大HEAP值,也没什么作用。
4.抓包发现STM32H7A3尝试DHCP Discover,却没有任何回应:
单步调试发现在执行到函数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)
|