完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
小弟最近才开始使用STM32CubeMX,使用的是STM32F107+DP83848,在调试网口时,遇到问题,在此请各位大大,牛人帮帮忙。
我ETH,配为RMII模式: 使用LwIP,使用UDP,没有动态分配IP地址 除了修改了ip地址、子网掩码、网关,All LwIP Options 里面的选项都是默认的,没有进行修改。 初始化如下: void udp_server_init(void) { Server_PCB = udp_new(); udp_bind(Server_pcb,IP_ADDR_ANY,UDP_LOCAL_PORT); udp_recv(Server_pcb,udp_server_recv,NULL); } 回调函数如下:收到有数据就放到接收数组中去,并将该收到的数据再回传原IP地址 void udp_server_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p,struct ip_addr *addr, u16_t port) { struct ip_addr destAddr = *addr; uint8_t i; if(p != NULL) { for(i=0;i IP_Recv=*((uint8_t *)p->payload+i); udp_sendto(Server_pcb,p,&destAddr,port); } pbuf_free(p); } 这样接收和发送都没有问题,对每个IP地址发过来数据也都能马上将数据回传。 但当我想同时对多个IP地址进行发送时,总是第一个发送能成功,后面的发送都不能成功,本来自己对lwip就不熟悉,现在被这个问题困扰好几天都没有找到原因,只有在此求助各位大侠了。 struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT,8,PBUF_RAM); if(Other1_Connect == 1) { udp_sendto(Server_pcb,p,&Other1_addr,Other1_port); Delay_m(5000); } //*************************************************************************** if(Other2_Connect == 1) { udp_sendto(Server_pcb,p,&Other2_addr,Other2_port); Delay_m(5000); } 以上程序是放到某一个定时器中断回调函数来执行的(1s中产生一个中断),Other1_Connect变量是在收到某一个ip地址来的数据后置1,Other2_Connect同样是。但问题就来了,如果Other1_Connect先置1,它能将p的内容发送给该地址,随后再对Other2_Connect置1,它对应的IP没有数据接收;如果Other2_Connect先置1,该地址能接收数据,但Other1_Connect随后置1,它对应的地址又接收不到数据。 有人说UDP连续发送之间应该有足够延时,不然不能正常发送,但我将Delay_m()已经改的足够大了,还是不能连续发送,还请各位大大赐教啊,小弟就先谢谢了。。。。 |
|
相关推荐
1个回答
|
|
帮顶....
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2542 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2327 浏览 5 评论
3146 浏览 3 评论
2798 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2758 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
601浏览 1评论
851浏览 0评论
959浏览 0评论
616浏览 0评论
442浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 10:42 , Processed in 2.579639 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号