求高手,有偿,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 上传
单片机也没接收到数据

有没有高手指点一下,我的问题到底出在哪里?
如果有高手知道问题在哪里,并可包解决的话,可私聊,有偿
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。