STM32
直播中

的撒的

10年用户 751经验值
擅长:可编程逻辑
私信 关注
[问答]

STM32H7-LwIP-Examples-mainSTM32H743_Nucleo_ETH配置完系统后,无法ping通怎么解决?

不带系统时候以太接口已调通。
按照例程 STM32H7-LwIP-Examples-mainSTM32H743_Nucleo_ETH 配置完系统后仅默认任务时ping只返回一两包数据,之后程序永远无法ping通。


重新创建任务,tcp-c连接多次才能成功,成功后只能发送一包数据到s端,之后程序卡死。

int sock = -1;  struct sockaddr_in client_addr;  uint8_t DEST_ADDRESS[4]={192,168,1,99};  ip4_addr_t ipaddr;  while((pdTRUE == xSemaphoreTake(xLWIP_Init, 0)));//网口初始化完成后再执行tcp任务  IP4_ADDR( ipaddr, DEST_ADDRESS[0],DEST_ADDRESS[1],DEST_ADDRESS[2],DEST_ADDRESS[3]);  char sendbuf[]="test";  while (1){    sock = socket(AF_INET, SOCK_STREAM, 0);    if(sock < 0){      vTaskDelay(100);      continue;    }    #define DEST_PORT 5555    client_addr.sin_family = AF_INET;    client_addr.sin_port = htons(DEST_PORT);    client_addr.sin_addr.s_addr = ipaddr.addr;    memset( (client_addr.sin_zero), 0, sizeof(client_addr.sin_zero));    if(connect(sock, (struct sockaddr*) client_addr, sizeof(struct sockaddr)) == -1){      vTaskDelay(100);      closesocket(sock);      vTaskDelay(100);      continue;    }    while (1){      if(write(sock,sendbuf,sizeof(sendbuf))<0){        vTaskDelay(100);        break;      }      m=0;      vTaskDelay(100);    }    closesocket(sock);


回帖(1)

siyugege

2024-7-4 16:45:40
以下是一些建议来解决这个问题:

1. 确保网络配置正确:检查您的STM32设备和PC的IP地址是否在同一个子网内,并且没有IP地址冲突。例如,STM32设备的IP地址可以设置为192.168.1.100,子网掩码为255.255.255.0,网关为192.168.1.1。

2. 检查网线连接:确保STM32设备与网络设备(如路由器或交换机)之间的网线连接正常。

3. 更新LwIP库:确保您使用的LwIP库是最新版本,以避免可能的已知问题。

4. 检查TCP连接:在您的代码中,您提到TCP连接多次才能成功。请检查TCP连接的实现,确保在连接失败时有适当的错误处理和重试机制。

5. 检查内存泄漏:在您的代码中,如果存在内存泄漏,可能会导致程序卡死。请检查您的代码,确保在不再需要时释放分配的内存。

6. 使用调试工具:使用调试工具(如ST-Link)来检查程序的运行情况,查找可能的错误或问题。

7. 检查LwIP初始化:确保LwIP初始化正确,并且所有必要的LwIP组件都已正确配置。

8. 检查中断处理:确保STM32设备的以太网中断处理正常,没有丢失或错误处理。

9. 检查网络性能:如果网络性能不佳,可能会导致ping包丢失或延迟。尝试使用有线连接或提高网络设备的性能。


举报

更多回帖

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