打印
[STM32H7]

H743 + DP83848 调试遇到奇怪问题

[复制链接]
1180|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了

使用特权

评论回复
5
shenxiaolin| | 2024-6-27 17:30 | 只看该作者
一般情况下和堆栈还是又一定关系。

使用特权

评论回复
6
suncat0504| | 2024-6-29 19:22 | 只看该作者
等待大佬解惑,跟着学习。

使用特权

评论回复
7
szt1993| | 2024-6-30 08:56 | 只看该作者
先确认硬件连接

使用特权

评论回复
8
阿尔法99|  楼主 | 2024-7-5 13:04 | 只看该作者
lb654321 发表于 2024-6-26 10:42
我也参考过基于STM32CubeMX创建的STM32H743+DP83848+LWIP网络通信程序调试_20221127算是胎教级教程了_h743  ...

能用一下你的工程吗?

使用特权

评论回复
评论
lb654321 2024-7-17 17:05 回复TA
可以,不过我这写的代码水平不佳,你凑合看,加我vMr_Li764 我把工程发你参考下 
9
阿尔法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++;
}

使用特权

评论回复
10
tax2r6c| | 2024-7-11 20:36 | 只看该作者
ARM设备在没有PC发送数据的情况下仍然不断接收数据,这可能是由于网络广播或组播数据导致的

使用特权

评论回复
11
d1ng2x| | 2024-7-11 20:40 | 只看该作者
可能是软件实现中存在bug,导致设备不断接收数据。检查并调试软件代码,确保没有逻辑错误或死循环

使用特权

评论回复
12
lamanius| | 2024-7-11 21:41 | 只看该作者
网络中可能存在广播或组播数据包,这些数据包会被所有连接到同一网络的设备接收。即使你的PC没有发送数据,网络中的其他设备或服务可能正在发送广播或组播数据。解决方法:检查网络中的广播和组播流量,并尝试过滤或忽略这些数据包

使用特权

评论回复
13
kaif2n9j| | 2024-7-11 22:46 | 只看该作者
网络中的设备可能会定期发送ARP(地址解析协议)请求,以获取其他设备的MAC地址。这些ARP请求会被所有设备接收。解决方法:确保你的设备正确响应ARP请求,并且不会因为ARP请求而误认为是数据包

使用特权

评论回复
14
q1d0mnx| | 2024-7-11 23:56 | 只看该作者
可能是网络配置问题导致设备错误地接收数据。例如,IP地址冲突、子网掩码设置不正确等。检查并确保网络配置正确,包括IP地址、子网掩码、网关等

使用特权

评论回复
15
su1yirg| | 2024-7-12 08:30 | 只看该作者
LWIP堆栈的配置可能存在问题,导致设备不断接收数据。例如,接收缓冲区设置不当、接收超时设置不当等。检查并调整LWIP堆栈的配置参数,确保它们适合你的应用场景

使用特权

评论回复
16
suw12q| | 2024-7-12 10:00 | 只看该作者
可能是硬件问题导致设备错误地接收数据。例如,网卡故障、网线接触不良等。检查硬件连接,确保网卡和网线工作正常

使用特权

评论回复
17
cen9ce| | 2024-7-12 12:38 | 只看该作者
使用网络抓包工具(如Wireshark)抓取网络数据包,分析接收到的数据包的来源和类型,以确定是否存在广播、组播或其他异常流量

使用特权

评论回复
18
zhizia4f| | 2024-7-12 12:45 | 只看该作者
在代码中添加日志记录功能,记录接收到的数据包的详细信息,以便分析和调试

使用特权

评论回复
19
q1ngt12| | 2024-7-12 15:06 | 只看该作者
逐步调试代码,特别是在数据接收处理的部分,查找可能导致不断接收数据的问题点

使用特权

评论回复
20
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自己生成的一个接收处理线程,我看它这也有释放内存的函数啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

219

帖子

1

粉丝