所以我使用 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 开发板和以太网适配器的网关地址设置为相同。
如果您需要更多信息,请告诉我。