STM32
直播中

李舒桀

7年用户 1320经验值
私信 关注
[问答]

用STM32F407做无操作系统的LWIP移植,一直连接不上网的原因?

STM32F407做无操作系统的LWIP 移植,遇到一个问题
一直连接不上网
最开始
        rval=ETH_Init( ETH_InitStructure,LAN8720_PHY_ADDRESS);                //ÅäÖÃETH
        if(rval==ETH_SUCCESS)//ÅäÖóɹ¦
        {
                ETH_DMAITConfig(ETH_DMA_IT_NIS|ETH_DMA_IT_R,ENABLE);          //ʹÄÜÒÔÌ«Íø½ÓÊÕÖжϠ       
        }

配置不成功
然后我做了修改
//        ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;                           //¿ªÆôÍøÂç×ÔÊÊÓ¦¹¦ÄÜ
  ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable;//hank        
配置成功,但是DHCH老是不成功
然后看打印的信息
netif->output()dhcp_discover: deleting()ing
dhcp_discover: SELECTING
dhcp_discover(): set request timeout 16000 msecs
tcp_slowtmr: no active PCBs

发现是
  prev = NULL;
  pcb = tcp_active_pcbs;
  if (pcb == NULL) {
    LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbsn"));
  }
  while (pcb != NULL) {
           LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcbn"));
    LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSEDn", pcb->state != CLOSED);
    LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTENn", pcb->state != LISTEN);
    LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAITn", pcb->state != TIME_WAIT);
    if (pcb->last_timer == tcp_timer_ctr) {
      /* skip this pcb, we have already processed it */
      pcb = pcb->next;
      continue;
    }
这里问题,然后调试,发现很奇怪
编程软件之后 tcp_active_pcbs 就为0 了  所以程序就出错了
但是 这是个结构体 struct tcp_pcb *tcp_active_pcbs;
指针怎么会是0呢
而且程序编译后,tcp_active_pcbs 就为0  但是把  tcp_active_pcbs  放到WATCH窗口里又能看到数据
我用原子的例子程序编译也是同样的结果
我查看MAP 文件  这些代码是在 TCP.C 文件里
MAP 里有给TCP.C 分配位置
0x200000c9   COMPRESSED   0x00000003   PAD
    0x200000cc   COMPRESSED   0x00000004   Data   RW         1542    .data               raw.o
    0x200000d0   COMPRESSED   0x00000024   Data   RW         1564    .data               tcp.o
    0x200000f4   COMPRESSED   0x00000020   Data   RW         1590    .data               tcp_in.o
    0x20000114   COMPRESSED   0x0000000c   Data   RW         1628    .data               timers.o
    0x20000120   COMPRESSED   0x00000008   Data   RW         1645    .data               udp.o
    0x20000128   COMPRESSED   0x00000012   Data   RW         1727    .data               ip.o

不知道哪位大侠知道是什么原因么








回帖(1)

王军

2024-4-10 18:14:48
1。不正确的硬件或接线:仔细检查硬件设置和接线连接,以确保它们是正确的。
2.配置不正确:请确保代码中正确设置了以太网配置(如MAC地址、IP地址、子网掩码、网关)。3.PHY初始化:验证PHY初始化是否为您的特定LAN8720 PHY正确配置。检查PHY地址和初始化顺序。
4.时钟配置:确保在STM32F407 MCU中正确配置以太网外围设备和相关时钟。
5.中断处理:检查以太网中断处理代码是否正确执行,包括中断的正确初始化和启用。
6.数据包处理:确保LWIP配置和数据包处理例程正确执行。验证是否正确处理了接收到的数据包。
7.以太网电缆或交换机:确保以太网电缆或开关正常工作。请尝试使用其他电缆或连接到其他交换机。
8.调试:利用任何可用的调试功能,如UART打印语句或调试工具,深入了解问题并识别潜在问题。建议提供更具体的详细信息,包括代码片段和错误消息,以帮助确定连接问题的确切原因。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分