[STM32H7] H743 + DP83848 调试遇到奇怪问题

[复制链接]
2404|21
 楼主| 阿尔法99 发表于 2024-6-25 10:39 | 显示全部楼层 |阅读模式
根据网络上的文章基于STM32CubeMX创建的STM32H743+DP83848+LWIP网络通信程序调试_20221127算是胎教级教程了_h743 cubemx lwip-CSDN博客,用CUBEMX6.4.0,建立工程,更改相关参数。可以跟PC收发数据。但是遇到一个问题。PC没有发送的情况下,ARM这边一直在接收数据。尝试更改IP和端口号,也还是不断接收数据。只有把网线断开,ARM这边才接收不到数据。请问这是什么原因导致的呢?
 楼主| 阿尔法99 发表于 2024-6-25 10:45 | 显示全部楼层
PC这边确定没发送数据。ARM这边不断在接送数据。
LOVEEVER 发表于 2024-6-25 19:13 | 显示全部楼层
那就奇怪了,没有发出自己就接收了?干扰吗?
lb654321 发表于 2024-6-26 10:42 | 显示全部楼层
我也参考过基于STM32CubeMX创建的STM32H743+DP83848+LWIP网络通信程序调试_20221127算是胎教级教程了_h743 cubemx lwip-CSDN博客这个博客,我现在的问题是我使用LWIP-UDP的时候正常收发一段时间就会断联,我的UDP接收回调函数就再也进不去了,PC端也识别不到我板子的ip了
shenxiaolin 发表于 2024-6-27 17:30 | 显示全部楼层
一般情况下和堆栈还是又一定关系。
suncat0504 发表于 2024-6-29 19:22 | 显示全部楼层
等待大佬解惑,跟着学习。
szt1993 发表于 2024-6-30 08:56 来自手机 | 显示全部楼层
先确认硬件连接
 楼主| 阿尔法99 发表于 2024-7-5 13:04 | 显示全部楼层
lb654321 发表于 2024-6-26 10:42
我也参考过基于STM32CubeMX创建的STM32H743+DP83848+LWIP网络通信程序调试_20221127算是胎教级教程了_h743  ...

能用一下你的工程吗?

评论

可以,不过我这写的代码水平不佳,你凑合看,加我vMr_Li764 我把工程发你参考下  发表于 2024-7-17 17:05
 楼主| 阿尔法99 发表于 2024-7-5 16:17 | 显示全部楼层
lb654321 发表于 2024-6-26 10:42
我也参考过基于STM32CubeMX创建的STM32H743+DP83848+LWIP网络通信程序调试_20221127算是胎教级教程了_h743  ...

这个函数你是怎么处理的?我怀疑你没有释放内存,时间长了,导致内存溢出了。但是的程序进入pbuf_free(p)后,就死机

void ethernetif_input(struct netif *netif)
{
  err_t err;
  struct pbuf *p;
        p = NULL;
       
  /* move received packet into a new pbuf */
  p = low_level_input(netif);

  /* no packet could be read, silently ignore this */
  if (p == NULL) return;

  /* entry point to the LwIP stack */
  err = netif->input(p, netif);

  if (err != ERR_OK)
  {
    /* LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n")); */
    pbuf_free(p);
    p = NULL;
  }

                ETHrxcount=p->len;
                if(ETHrxcount>99)
                        ETHrxcount=99;
//                memcpy(ETHrxbuff,p->payload,ETHrxcount);
                pbuf_free(p);
                p = NULL;

        ETHirqcount++;
}

tax2r6c 发表于 2024-7-11 20:36 | 显示全部楼层
ARM设备在没有PC发送数据的情况下仍然不断接收数据,这可能是由于网络广播或组播数据导致的
d1ng2x 发表于 2024-7-11 20:40 | 显示全部楼层
可能是软件实现中存在bug,导致设备不断接收数据。检查并调试软件代码,确保没有逻辑错误或死循环
lamanius 发表于 2024-7-11 21:41 | 显示全部楼层
网络中可能存在广播或组播数据包,这些数据包会被所有连接到同一网络的设备接收。即使你的PC没有发送数据,网络中的其他设备或服务可能正在发送广播或组播数据。解决方法:检查网络中的广播和组播流量,并尝试过滤或忽略这些数据包
kaif2n9j 发表于 2024-7-11 22:46 | 显示全部楼层
网络中的设备可能会定期发送ARP(地址解析协议)请求,以获取其他设备的MAC地址。这些ARP请求会被所有设备接收。解决方法:确保你的设备正确响应ARP请求,并且不会因为ARP请求而误认为是数据包
q1d0mnx 发表于 2024-7-11 23:56 | 显示全部楼层
可能是网络配置问题导致设备错误地接收数据。例如,IP地址冲突、子网掩码设置不正确等。检查并确保网络配置正确,包括IP地址、子网掩码、网关等
su1yirg 发表于 2024-7-12 08:30 | 显示全部楼层
LWIP堆栈的配置可能存在问题,导致设备不断接收数据。例如,接收缓冲区设置不当、接收超时设置不当等。检查并调整LWIP堆栈的配置参数,确保它们适合你的应用场景
suw12q 发表于 2024-7-12 10:00 | 显示全部楼层
可能是硬件问题导致设备错误地接收数据。例如,网卡故障、网线接触不良等。检查硬件连接,确保网卡和网线工作正常
cen9ce 发表于 2024-7-12 12:38 | 显示全部楼层
使用网络抓包工具(如Wireshark)抓取网络数据包,分析接收到的数据包的来源和类型,以确定是否存在广播、组播或其他异常流量
zhizia4f 发表于 2024-7-12 12:45 | 显示全部楼层
在代码中添加日志记录功能,记录接收到的数据包的详细信息,以便分析和调试
q1ngt12 发表于 2024-7-12 15:06 | 显示全部楼层
逐步调试代码,特别是在数据接收处理的部分,查找可能导致不断接收数据的问题点
lb654321 发表于 2024-7-17 17:29 | 显示全部楼层
阿尔法99 发表于 2024-7-5 16:17
这个函数你是怎么处理的?我怀疑你没有释放内存,时间长了,导致内存溢出了。但是的程序进入pbuf_free(p) ...

void ethernetif_input(void* argument)
{
  struct pbuf *p;
  struct netif *netif = (struct netif *) argument;

  for( ;; )
  {
    if (osSemaphoreAcquire(RxPktSemaphore, TIME_WAITING_FOR_INPUT) == osOK)
    {
      do
      {
        p = low_level_input( netif );
        if (p != NULL)
        {
          if (netif->input( p, netif) != ERR_OK )
          {
            pbuf_free(p);
          }
        }
      } while(p!=NULL);
    }
  }

}这和函数是CUBEMX自己生成的一个接收处理线程,我看它这也有释放内存的函数啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

230

帖子

1

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