问题,网上买的开发板,STM32F107芯片使用 LWIP UDP,开发板做服务器或者客户端,用网线与电脑通信。
故障,
1 如果电脑先启动完成,开发板再上电,UDP网络可以正常通信。
2 如果开发板先上电,电脑后上电,开发板以太网就死机,开发板必须要重启才能连上。
有什么办法能解决开发板死掉的问题,UDP似乎没办法检测连接状态?
那个老板没办法解决,才来发帖求助。
部分程序如下:
udp_RS485_server_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p,struct ip_addr *addr, u16_t port)
{
RS485_udp_pcb->remote_ip = *addr;
RS485_dest_port = port;
// RS485_dest_ip_addr = *addr;
RS485_udp_pcb = pcb;
RS485_dest_p = p;
if(p != NULL)
{
RS485_Send_Data(p->payload,p->tot_len); // payloadΪudpÊý¾Ý¿éµÄÆðʼλÖÃ
pbuf_free(p); /* ÊͷŸÃUDP¶Î */
}
}
void UDP_server_init(void)
{
struct udp_pcb *pcb;
struct ip_addr ipaddr1;
pcb = udp_new(); //ÉêÇëudp¿ØÖÆ¿é
udp_bind(pcb,IP_ADDR_ANY,RS232_SERVER_PORT); /* °ó¶¨±¾µØIPµØÖ·ºÍ¶Ë¿ÚºÅ£¨×÷Ϊudp·þÎñÆ÷£© */
udp_recv(pcb,udp_RS232_server_recv,NULL); /* ÉèÖÃUDP¶Îµ½Ê±µÄ»Øµ÷º¯Êý */
pcb = udp_new(); //ÉêÇëudp¿ØÖÆ¿é
udp_bind(pcb,IP_ADDR_ANY,RS485_SERVER_PORT); /* °ó¶¨±¾µØIPµØÖ·ºÍ¶Ë¿ÚºÅ£¨×÷Ϊudp·þÎñÆ÷£© */
udp_recv(pcb,udp_RS485_server_recv,NULL); /* ÉèÖÃUDP¶Îµ½Ê±µÄ»Øµ÷º¯Êý */
// IP4_ADDR(&ipaddr1,192,168,1,21);
//udp_connect(pcb,&ipaddr1,RS485_SERVER_PORT); /* ?????? */
}
int main(void)
{
struct udp_pcb *pcb;
/* Setup STM32 system (clocks, Ethernet, GPIO, NVIC) and STM3210C-EVAL resources */
System_Setup();
/* Initilaize the LwIP satck ipµØÖ·ÉèÖã¬macÉèÖã¬*/
LwIP_Init();
TIM_Configuration(RS232_TIMER_OUT);//¶¨Ê±Æ÷2ÅäÖᣵ¥Î»£ºms
/* Initilaize the webserver module */
UDP_server_init();
while(1)
{
System_Periodic_Handle();//×÷Ϊ·þÎñÆ÷µÄÀýÐÐʼþ·þÎñ£¬Ö÷ÒªÊǸüÐÂTCP timers
}
} |