codeskin 发表于 2018-3-5 16:33:14

STM32F429 以太网UDP通讯异常

专家好:
      目前正在调试STM32F429的以太网,项目使用的是FreeRTOS+LWIP模式,创建工程使用的是cubemx,使用的开发板是nucleo-144,目前正在调试以太网部分。测试用程序是简单的echo程序,TCP模式没发现任何问题,即使开2个TCP线程都没问题;测试UDP模式时发现,第一次建立UDP连接后发送数据到开发板能够正常收到开发板的回应,当断开连接然后重新建立连接后则不能够收到开发板的回应。程序如下:
static void udpecho_thread(void *arg)
{
err_t err,recv_err;
struct netconn *conn;
struct netbuf *buf;
ip_addr_t *addr;
unsigned short port;

conn = netconn_new(NETCONN_UDP);
if (conn!= NULL)
{
    err = netconn_bind(conn, IP_ADDR_ANY, 7);
    if (err == ERR_OK)
    {
      while (1)
      {
      recv_err = netconn_recv(conn, &buf);
      
      if (recv_err == ERR_OK)
      {
          addr = netbuf_fromaddr(buf);
          port = netbuf_fromport(buf);
          netconn_connect(conn, addr, port);
          buf->addr.addr = 0;
          netconn_send(conn,buf);
          netbuf_delete(buf);
      }
      }
    }
    else
    {
      netconn_delete(conn);
    }
}
}

望专家解惑。

发表于 2018-3-5 16:37:57

我们来探讨一下,UDP断开后,如果没有主动发起数据到接收程序,接收程序发的任何数据理论终端收不到。TCP不一样,他们建立的是连接,重新连接后,是可以直接发送的。

Angel_YY 发表于 2018-3-5 17:53:52

用的PC机和开发板进行UDP通讯吗?如若是可以在第二次进行UDP通讯的时候换一台PC进行UDP通讯测试,看看能否正常接收到开发板的回应。如果此时有回应,问题可能在上位机。
看代码问题可能是在连接PC时没有连接正确。
netconn_connect(conn, addr, port);

codeskin 发表于 2018-3-9 15:52:14

Angel_YY 发表于 2018-3-5 17:53
用的PC机和开发板进行UDP通讯吗?如若是可以在第二次进行UDP通讯的时候换一台PC进行UDP通讯测试,看看能否 ...

谢谢提供思路,还真没这样试过,貌似不应该是电脑的问题。
页: [1]
查看完整版本: STM32F429 以太网UDP通讯异常