bigbat 发表于 2019-2-22 11:07

【 ST NUCLEO-H743ZI测评】(2)初体验 以太网测试

<div class='showpostmsg'> 本帖最后由 bigbat 于 2019-2-22 11:52 编辑

继续上篇点亮LED之后,开始测试以太网。板子由ST公司提供,板子资料
这是我比较关心的部分。开始我使用STM32CubeMX来进行网络部分的测试,但是却没有成功!我下面就把这个过程描述一下。
首先启动STM32CubeMX后,建立工程选择的是Borad Selector,特意选择了 "ST NUCLEO-H743ZI"板子项目,建立项目后第一个问题就是,lwIP的选项是“灰色”的!查看问题描述卡说:是由于没有启动“CORTEX_M7 的CPU DCache”,那就把它enable吧。

打开后,果然lwIP可以使用了。那就使用lwIP把IP地址设置一下,找到General Settings关闭IPv4-DHCP,设置我的IP为192.168.1.5,掩码255.255.255.0,网关192.168.1.1确认没错,点击生成,

出现错误提示说:PHY设置不完整。就打开ETH项目,结果傻眼了,根本就没有PHY的任何选项,明明记得PHY的选项和初始化就在ETH的tab里呀!怎么没有了,就仔细查看软件的提示,发现说PHY的设置由lwIP部分完成,哦?我似乎明白了,就到lwIP的Tab下面去找,果然有:Platform Settings有这个选项,把LAN8742给选上,然后设置好其它项目,生成代码,成功。

赶紧趁热编译生成,下载到开发板。插上网线“测试”。先ping一下吧!很悲剧:“无法访问目标主机”。使用arp -a也没有发现主机。继续寻找原因。但是资料非常的少。有用的一个帖子说需要“将Ethernet global interrupt”打开。那就找到ETH设置卡,打开了设置。在一次生成代码,下载到板子上,结果问题依旧。还是ping不通。也就是说没有这个IP。上网继续找,说是STM32Cube_FW_H7_V1.3.0有BUG!说是要在函数HAL_ETH_Transmit()前加上SCB_CleanInvalidateDCache()。我看了一下代码中有这一句。就比较纳闷。
后来,就想到使用DHCP功能,就到lwIP选项卡打开了DHCP,程序执行后,打开路由器查看DHCP列表,没有发现“00:80:E1:00:00:00”的主机。上网查了查这个MAC是ST的合法MAC。实在是郁闷,就想是不是这个网卡坏了呀。于是查看网卡的灯,发现“连接”灯亮(绿色),按复位后“数据灯”闪烁(黄色)。应该网卡没有问题。于是启动调试,查看PHY初始化也能执行。一点头绪都没有。
就去找开发板的例程,找了半天也没找到。外国的洋师傅说是在en.stm32cubeh7.zip这个包了。打开发现有两个项目NUCLEO-H743ZI 和STM32H743I-EVAL,找到\STM32Cube_FW_H7_V1.3.0\Projects\STM32H743ZI-Nucleo\Applications\LwIP\LwIP_HTTP_Server_Netconn_RTOS,项目。打开编译、下载、运行。
从路由器里查到IP,打开网页。发现没有问题。


虽然ping不同,但是网页是好的,而且里面还有图片!能不能ping通不是很重要,只要网络通就可以。
既然网卡没有问题那为啥不行呢?继续努力看看啥问题。




此内容由EEWORLD论坛网友bigbat原创,如需转载或用于商业用途需征得作者同意并注明出处




</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

54chenjq 发表于 2019-2-22 15:07

ICMP协议使能呢吗?

bigbat 发表于 2019-2-22 15:34

54chenjq 发表于 2019-2-22 15:07
ICMP协议使能呢吗?

当然是是使能的,肯定不是配置的问题,现在是压根就不能获得IP地址。配套的例程也ping不通,但是能获得IP

bigbat 发表于 2019-2-22 18:00

今天郁闷了一天了,对比两个工程的ethernetif.c文件,发现这两个文件,有多处不一样的地方。暂时没有任何头绪,不知道问题出在哪里.

bigbat 发表于 2019-2-23 18:25

两天了这个STM32CubeMX生成的网络项目还是不行,通过调试发现
/* Registers the default network interface */
netif_set_default(&gnetif);

if (netif_is_link_up(&gnetif))
{
    /* When the netif is fully configured this function must be called */
    netif_set_up(&gnetif);
}
else
{
    /* When the netif link is down this function must be called */
    netif_set_down(&gnetif);
}

程序走到了12行,netif_set_down(&gnetif);处,说明网络压根就没有起来。希望有高手给点指点。

houhou1997 发表于 2019-2-27 00:07

兄弟, 难道不是应该去查   netif_set_default(&gnetif) 这个函数失败在哪里吗? 打个printf跟踪一下gnetif哪里返回为0了嘛

18362591034 发表于 2019-4-13 12:12

官方的例程下载后等1分钟,板子上红蓝灯一亮就能ping通了

foryou1234 发表于 2019-5-10 22:53

这个问题解决了吗,没解决找我,QQ,264935346
页: [1]
查看完整版本: 【 ST NUCLEO-H743ZI测评】(2)初体验 以太网测试