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区别

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

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

  1. STM32CubeMx + LWIP(实现UDP组播/MQTT/热插拔)系列 四 ----- MQTT的连接与使用

    mqtt的全局变量 mqtt_client_t *lwip_mqtt; mqtt的连接,不要直接复制粘贴哦,记得把参数设置成你项目中用到的数据 char LWIP_Connect(mqtt_clien ...

  2. 基于stm32f107 stm32cube 和 LWIP 协议实现 udp 组播通信

    最近在做一个基于stm32f107 实现 UDP 组播通信的项目,项目基于 stm32cube 配置生成,如下图: UDP组播头文件: #ifndef __MULTICAST_H__ #define ...

  3. ios 接收 c# socket udp 组播

    最近用wcf 服务 给ios和安卓做接口,做了几个ios的项目  用udp 组播 让ios多终端接收和刷新方法 做一个简单的小例子会把工程给大家下载的 c#代码:netSocketUDP.rar io ...

  4. UDP 组播---你需要了解这些

    先来了解下UDP UDP 是UserDatagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一 ...

  5. UDP 组播---基本概念

     本文章已收录于: 先来了解下UDP UDP 是UserDatagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式 ...

  6. udp组播的应用场景

    参考: <TCP/IP详解 卷一> 单播 unicast 在单播的情况下,任意两个主机的通信不会干扰网内其他主机(可能引起争夺共享信道的情况除外) 广播 有时候一个主机要向网上的所有其他主 ...

  7. 【网络工具】使用 iperf测试 udp组播

    文章目录 下载iperf程序 测试组播协议 pc1 客户端发送组播包 pc2 服务端接收组播包 参数说明 -B, --bind host 服务端专用参数 -T, --ttl 客户端专用参数 下载ipe ...

  8. UDP组播开发测试实例

    一 前言 (1)负责项目中组播开发测试工作.期间由于缺乏设备的原因,中间搁置了好久.直到昨天下午临近下班,终于,完成udp组播整个的开发测试工作. 二 开发过程 (1)首先从实现udp协议说起.udp ...

  9. (转)C# 使用UDP组播实现局域网桌面共享

    转:http://www.cnblogs.com/mobwiz/p/3715743.html 最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. ...

最新文章

  1. java五子棋课程设计_JAVA课程设计(五子棋)021
  2. jzoj4235-序列【斐波那契数列】
  3. python小练习—名片管理系统(增、删、改、查、数据本地保存)
  4. 树莓派做一个dns缓存
  5. 判断应用程序是否是当前激活程序(获得焦点的程序)
  6. go语言和java比_闲话Python, Go, Java
  7. pytorch修改tensor的维度(修改为任意维度,或单纯的增减维度)
  8. 定了!特斯拉宣布股东大会和“电池日”活动9月22日举行
  9. python猜数字游戏快速求解解决方案
  10. java gzip delphi_delphi 利用indy解码Gzip的网页
  11. WPF中作用MEF报错The export Xyz is not assignable to type IXyz是设计器问题
  12. 测试人员必会用例设计方法--正交表
  13. cs231n作业——softmax
  14. 腾讯微博开放平台开发者服务协议 2.1、3.6 解读
  15. 华为路由器GRE隧道配置
  16. 动手学深度学习(四十三)——机器翻译及其数据构建
  17. 天线设计相关性能参数
  18. Cisco Live 2016:CEO罗卓克谈英国脱欧、内部孵化以及向服务转型
  19. MySql的基石——索引
  20. Js篇-面试题9-请说一下Js中的事件循环机制

热门文章

  1. 优化总结:有哪些APP启动提速方法?
  2. 【CCF会议期刊推荐】CCF推荐国际学术期刊/会议(人工智能)
  3. 工业视觉需要时可抄的代码---持续更新
  4. 学习表——受任于败军之际,奉命于危难之间(12.5-12.11)
  5. 2013年中华医院信息网络大会(郑州会议)资料汇总
  6. 网络空间安全导论实践报告
  7. 张良、岳飞、钢铁是怎样炼成的
  8. GK2A 火点提取运行需要要的包安装
  9. 《管理学》期末第一次复习
  10. 2021计算机保研经历(清软, 北深, 浙大, 南大, 中科大, 北航, 哈深, 南开, 华科, 武大, 中大)