最近需要用到LWIP的组播,我用的是 STM32F103VC + ENC28J60 + LWIP。LWIP中是支持组播的,下面记录下实现方法。
1.既然ENC28J60要接收组播数据,首先要保证能接收到,检查ERXFCON 寄存器是不是过滤掉了你的组播数据,我之前的设置是:
ENC28J60_Write(ERXFCON,ERXFCON_UCEN|ERXFCON_CRCEN|ERXFCON_PMEN);//能实现UDP,TCP的收发。但组播数据不行。
后来修改为
ENC28J60_Write(ERXFCON,ERXFCON_CRCEN);//实现组播
也可以直接将它清0接收所有数据包。
2.LWIP中打开IGMP开关。opt.h中
#define LWIP_IGMP 1
3.low_level_init函数中使能IGMP标志
netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP |NETIF_FLAG_IGMP;//添加IGMP
4.LWIP组播需要定时调用igmp_tmr();函数。所以将其放入LWIP_poll循环中。
#if LWIP_IGMP
if(timer_expired(&last_igmp_time,IGMP_TMR_INTERVAL/CLOCKTICKS_PER_MS))//IGMP处理定时器处理函数
{

本文介绍了如何在STM32F103VC开发板上使用LWIP堆栈和ENC28J60以太网控制器实现组播功能。关键步骤包括调整ENC28J60的ERXFCON寄存器设置,启用LWIP的IGMP选项,设置网络接口的IGMP标志,并确保igmp_tmr()函数定期调用。同时,还修改了UDP初始化时的组播计时器设置。
最低0.47元/天 解锁文章
1841

被折叠的 条评论
为什么被折叠?



