求高手,有偿,STM32F407与DP83848芯片在lwip下,实现组播问题

2019-12-22 13:43发布

本帖最后由 zhuhaibc 于 2017-10-11 14:09 编辑

不知怎样编辑这个题目才能吸引更多高手过来,希望管理人员能帮忙编辑一下,谢谢

单片机型号:STM32F407
网口芯片:DP83848
lwip版本:v1.3.2

本地IP为:192.168.0.50,与组播共用端口5568


我做过的修改如下所示:
1、 在opt.h文件中,将
#define LWIP_IGMP                       0
改为
#define LWIP_IGMP                       1
即打开IGMP功能
到论坛上搜 lwip与IGMP搜不到任何信息
2、在ethernetif.c文件中,将语句
netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP;
改为
netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP | NETIF_FLAG_IGMP; //添加IGMP标志

3、添加igmp_tmr()函数的调用
在 netconf.c文件靠前的位置添加变量,大约在该文件的第70行左右,代码如下所示。

#ifdef LWIP_IGMP
uint32_t  IGMPTimer=0;
#endif

然后在该文件的#ifdef USE_DHCP前面,大约在第180行的位置添加igmp计时器调用代码:
#if LWIP_IGMP
if(localtime-IGMPTimer>=IGMP_TMR_INTERVAL)
  {
IGMPTimer=localtime;
    igmp_tmr();
  }
#endif


4、UDP初始化
void UDP_sACN_Init(void)
{
        struct udp_pcb *pcb;
       
        #if LWIP_IGMP
        struct ip_addr ipgroup;
        IP4_ADDR(&ipgroup,230,0,0,11);
        igmp_joingroup(IP_ADDR_ANY,(struct ip_addr *)(&ipgroup));
        #endif
       
        pcb = udp_new();                                                               
        udp_bind(pcb,IP_ADDR_ANY,5568);
       
        udp_recv(pcb,udp_sACN_recv,NULL);
}
编译下载,运行
PC软件发送数据,抓包软件也监听到了数据,但单片机没接收到数据
数据截图2.jpg (108.8 KB, 下载次数: 0) 下载附件 第三次发 2017-10-11 10:54 上传
单片机也没接收到数据

有没有高手指点一下,我的问题到底出在哪里?
如果有高手知道问题在哪里,并可包解决的话,可私聊,有偿
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
xivisi
1楼-- · 2019-12-23 03:40
zhuhaibc 发表于 2017-10-11 13:10
找找看,看有没有代码,想参考参考

早没了……要弄清楚,我也是查资料,
guxingganyue
2楼-- · 2019-12-23 06:05
可以看看这位网友的解决方法

https://www.amobbs.com/forum.php ... =%E7%BB%84%E6%92%AD
zhuhaibc
3楼-- · 2019-12-23 08:42
guxingganyue 发表于 2017-10-11 17:57
可以看看这位网友的解决方法

https://www.amobbs.com/forum.php?mod=viewthread&tid=5647591&highlight=%E ...

谢谢,我的问题找到了,关了电脑的防火墙就行了
zhuhaibc
4楼-- · 2019-12-23 11:05
 精彩回答 2  元偷偷看……

一周热门 更多>