STM32CubeMx + LWIP(实现UDP组播/MQTT/热插拔)系列 二 ----- CubeMx生成文件的简单介绍与热插拔

CubeMx生成的文件主要是两个文件,lwipopts.h和ethnetif.c。

lwipopts.h主要是对于lwip中一些宏的定义的选择。该文件include在lwip的opt.h文件前面。因此在本文件定义的宏,会生效。若lwipopts.h未定义,则使用opt.h文件中的宏。

lwipopts.h

我用到了以下宏:

LWIP_DHCP获取网络IP。

LWIP_IGMPudp的组播使能。

NO_SYS是否使用操作系统。

MEMP_MEM_MALLOC是使用的memp,lwip的mem和memp的区别

另外我还定义了以下宏用来替代默认的宏值。

#define MEM_SIZE           (15*1024)                
 

#define TCP_MSS                 (1500 - 40)          //最大TCP分段,TCP_MSS = (MTU - IP报头大小 - TCP报头大小
#define TCP_SND_BUF             (4*TCP_MSS)        //TCP发送缓冲区大小(bytes).
#define TCP_SND_QUEUELEN        (2* TCP_SND_BUF/TCP_MSS)    //TCP_SND_QUEUELEN: TCP发送缓冲区大小(pbuf).这个值最小为(2 * TCP_SND_BUF/TCP_MSS)
#define TCP_WND                 (2*TCP_MSS)        //TCP发送窗口

opt.h前一部分主要是对网络中用到的值抽出来提供给用户可进行修改。一般来说默认值就可以。最后的宏就是调试的打印宏。这里还是很有用的,可以显示所有你需要的信息。

首先将宏#define LWIP_DBG_TYPES_ON               LWIP_DBG_ON定义。这个宏是所有调试宏的总开关,只有该宏使能,之后的调试宏才会有输出。

然后将你所需要进行打印的模块LWIP_DBG_OFF改为LWIP_DBG_ON。然后你所需要的信息就会输出到printf中去。从printf输出到其他你所需要的通讯外设。一般来说是使用的串口进行输出。stm32的printf函数指针指向了fputc函数。所以定义该函数然后内部写上HAL_UART_Transmit(&husart1, (uint8_t*)&data, 1, 0xffff);就可以了。如果是其他的外设,可根据项目具体修改。

ethnetif.c

该文件中我使用的最主要的就是ethernetif_set_link()函数了,不过你需要先使能回调宏,在我的上一篇cube的配置中有写。如果不配置的话cube是不会生成此函数的。该函数在主函数中进行循环可实现热插拔。另外注意的就是ethernetif_update_config()函数了,该函数回调时调用。会及时的告诉你网络插拔的函数状态。其中调用的函数ethernetif_notify_conn_changed()需要你自己进行定义。

void ethernetif_notify_conn_changed(struct netif *netif)
{
    printf("link status changed");
    if(netif_is_link_up(netif))
    {
        ptintf("net link is up\r\n");
        netif_set_up(netif);
    }
    else{
        printf("net link is down\r\n");
        netif_set_down(netif);
    }
}

netif_set_up和netif_set_link_up区别

我在函数中对网卡进行了使能和失能。 我对这一部分了解的有些浅,可能有些错误。欢迎你们指正。目前我这样写是在项目中可以稳定运行的。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值