STM32 开发板不会向笔记本电脑发送 UDP 数据包

问题描述 投票:0回答:0

所以我使用 CubeMX 配置了开发板并在其中设置了它的 IP 地址。现在,当我尝试通过以太网电缆将数据发送到我的笔记本电脑时,udp_send() 函数返回 ERR_RTE,即路由错误。我检查了我的 IP 地址,它是正确的,但 udp 数据包仍然没有转到我的笔记本电脑。

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_LWIP_Init();
  MX_USART3_UART_Init();
  /* USER CODE BEGIN 2 */
  struct udp_pcb* Demo_upcb;
  ip_addr_t myIPADDR,destip;
  IP_ADDR4(&myIPADDR,192,168,33,111);
  IP_ADDR4(&destip,XXX,XXX,XXX,XXX); // My Laptops IP address

  Demo_upcb = udp_new();
  err_t er3 = udp_bind(Demo_upcb, &myIPADDR, 0);
  if(er3 != ERR_OK)
      {
          while(1)
                  {
                      HAL_Delay(200);
                          HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
                  }
      }

  ethernetif_input(&gnetif);
      sys_check_timeouts();

      err_t er1 = udp_connect(Demo_upcb, IP_ANY_TYPE(works)/&destip(doesnot work), 0);
      if(er1 != ERR_OK)
          {
              while(1)
                      {
                          HAL_Delay(200);
                          HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);
                      }
          }

      sprintf(msg,"This is message from stm32");

      struct pbuf* psend = pbuf_alloc(PBUF_TRANSPORT, 30, PBUF_RAM);

      memcpy(psend->payload, msg , 30);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */


      err_t er2 = udp_send(Demo_upcb, psend);

      if(er2 == ERR_RTE)
      {
          while(1)
          {
              HAL_Delay(200);

                  HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
          }
      }

      HAL_Delay(1000);

      HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);

  }
  /* USER CODE END 3 */
}

但是,当我在我的代码中将 destip 替换为 IP_ANY_TYPE 时,它工作得很好。

这里缺少什么,请帮助。

我的笔记本电脑没有以太网端口,所以我使用的是以太网适配器,它有自己的 IP 地址(只是让你知道)。

子网掩码为 255.255.255.000,笔记本电脑、STM32 开发板和以太网适配器的网关地址设置为相同。

如果您需要更多信息,请告诉我。

udp stm32 ip-address ethernet network-protocols
© www.soinside.com 2019 - 2024. All rights reserved.