int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_LWIP_Init();
MX_USART3_UART_Init();
MX_TIM6_Init();
/* USER CODE BEGIN 2 */
struct udp_pcb* Demo_upcb;
ip_addr_t myIPADDR,destip;
IP_ADDR4(&myIPADDR,192,168,33,1);
IP_ADDR4(&destip,192,168,33,101);
Demo_upcb = udp_new();
err_t er3 = udp_bind(Demo_upcb, &myIPADDR, 8);
if(er3 != ERR_OK)
{
while(1)
{
HAL_Delay(200);
HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
}
}
sprintf(buffer,"This is UDP message\r\n");
struct pbuf* psend = pbuf_alloc(PBUF_TRANSPORT, 30, PBUF_RAM);
memcpy(psend->payload, buffer , 30);
HAL_TIM_Base_Start_IT(&htim6);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
ethernetif_input(&gnetif);
sys_check_timeouts();
}
/* USER CODE END 3 */
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);//Blue LED
udp_recv(Demo_upcb, &udpcall, NULL);
}
void udpcall(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
{
sprintf(buffer,"This is UDP message \r\n ");
struct pbuf* psend = pbuf_alloc(PBUF_TRANSPORT, 30, PBUF_RAM);
memcpy(psend->payload, buffer , 30);
udp_connect(pcb, addr, port);
err_t err2 = udp_send(pcb, psend);
HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);//Green LED
pbuf_free(psend);
pbuf_free(p);
}
我正在尝试通过 UDP 发送器应用程序将 UDP 数据包发送到 stm32 板的 IP 地址来设置 UDP 连接。在板上,我的目标是读取 UDP 数据包,并在收到每个数据包时将 UDP 数据包发送回我的笔记本电脑。 我将计时器设置为每隔一秒调用一次 HAL_TIM_PeriodElapsedCallback。每隔一秒,将调用 udp_recv() 函数,在此之前,蓝色 LED 将闪烁。我在 udpcall() 函数块中放置了一个闪烁的 LED 代码,以了解函数的 udpcall 是否正在处理中。似乎控件永远不会进入 udpcall 功能,因为绿色 LED 永远不会闪烁。
谁能找出问题所在,以及为什么它不执行 udpcall 函数?