STM32F407+FreeRTOS+LWIP UDP组播

开发环境介绍:

MCU:STM32F407ZET6

网卡:LAN8720A

LWIP版本:V1.1.0

FreeRTOS 版本:V10.2.1

LAN8720A硬件原理图:

硬件连接说明:

MII_RX_CLK/RMII_REF_CLK ------>PA1                   MII_TXD0 ------>PB12
MII_MDIO  ------>PA2                                                 MII_TXD1 ------>PB13
MII_RESET ------>PA3                                               MII_MDC ------>PC1
MII_RX_DV/RMII_CRSDV ------>PA7                        MII_RXD0 ------>PC4
MII_RX_ER  ------>PB10                                            MII_RXD1 ------>PC5
MII_TX_EN  ------>PB11

Lwip组播配置:

上图中创建了一个10ms的循环定时器,定时器回调函数为: LwipTimCallBack

void LwipTimCallBack(TimerHandle_t xTimer)
{
    uint32_t LocaTime = xTaskGetTickCount();
    LwIP_Periodic_Handle(LocaTime);
}

 netconf.c--->void LwIP_Periodic_Handle(volatile uint32_t localtime)内添加igmp计时器调用算法

ethernetif.c--->static void low_level_init(struct netif *netif)添加

 netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_IGMP;

 在stm32f429_phy.c---->static void ETH_MACDMA_Config(void)方法中进行以下设置:

组播接收消息设置:

接收消息使用的是8081端口,发送消息使用的是8080端口。组播地址239.0.0.1。客户端设置可参考另一篇文章:QT学习笔记_UDP组播通信(加入组播)_qt 实现udp通信工程文件添加什么-CSDN博客

static void MulticastRxTask(void *pcParameter)
{uint32_t NotifyValue = 0;UBaseType_t uxHighWaterMark;struct netconn *udpconn;udpconn = netconn_new(NETCONN_UDP);ip_addr_t destipaddr;IP4_ADDR(&destipaddr,239,0,0,1);netconn_bind(udpconn,IP_ADDR_ANY,8081);netconn_join_leave_group(udpconn,&destipaddr,IP_ADDR_ANY,NETCONN_JOIN);uxHighWaterMark = uxTaskGetStackHighWaterMark(NULL);while(1){struct netbuf *recebuf;if(netconn_recv(udpconn,&recebuf) == ERR_OK)//会自己阻塞{uint16_t ReceByteCount = recebuf->p->len;uint8_t *pData = recebuf->p->payload;if((pData[0] == 0xAA &&pData[1] == 0xBB))memcpy((void *)MulticastBuf,(void *)pData,ReceByteCount);netbuf_delete(recebuf);}uxHighWaterMark = uxTaskGetStackHighWaterMark( NULL );}
}

组播发送消息:

void MulticastTxTask(void *pvParameter)
{struct netconn *udpconn;udpconn = netconn_new(NETCONN_UDP);netconn_bind(udpconn, IP_ADDR_ANY, 8080);ip_addr_t ipMultiCast;IP4_ADDR(&ipMultiCast, 239, 0, 0, 1);netconn_connect(udpconn,&ipMultiCast,8080);for(;;){uint32_t NotifyValue = 0;struct netbuf *sendbuf = netbuf_new();xTaskNotifyWait(ULONG_MAX,ULONG_MAX,&NotifyValue,portMAX_DELAY);switch(NotifyValue){//组桢MulticastRxStruct.ReceLen =MakeUpInfoBack(0x3031,MulticastRxStruct.Data);break;default:break;}netbuf_alloc(sendbuf,MulticastRxStruct.ReceLen);netbuf_ref(sendbuf,MulticastRxStruct.Data,MulticastRxStruct.ReceLen);//发送指定长度字符串netconn_send(udpconn,sendbuf);//发送报文netbuf_delete(sendbuf);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/804107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云安全在金融领域的作用是什么?

云安全在金融领域发挥着至关重要的作用,使金融机构能够保护敏感数据、遵守监管要求并推动创新。通过实施强有力的安全措施、利用先进技术并对新出现的威胁保持警惕,金融机构可以保护其数字资产并维持客户的信任。 金融机构面临的挑战 1.缺乏全网数据支撑…

不到6毛钱的I2C总线实时时钟日历芯片LK8563

前言 8563实时时钟芯片,国内外均有多家生产,今推荐一个性价比极高的RTC芯片,LK8563,一片不到6毛钱. 特点 基于32.768kHz晶体的秒,分,小时,星期,天,月和年的计时 带有世…

设计模式学习笔记 - 设计模式与范式 -行为型:7.责任链模式(下):框架中常用的过滤器、拦截器是如何实现的?

概述 上篇文章《6.责任链模式(上):原理与实现》,学习了职责链模式的原理与实现,并且通过一个敏感词过滤框架的例子,展示了职责链模式的设计意图。本质上来说,它跟大部分设计模式一样&#xff0…

Python从0到100(十一):Python字典介绍及运用

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

10 spring-data-redis 中创建的 pipe 和 anon_inode 的 fd 来自于哪里?

前言 本文的问题 主要是 衍生自 spring-boot-acurator 定时检测 redis 集群导致 “IOException: Too many open files“ 对于这里 pipe 的使用, 也是很神奇, 因为 貌似没有用过这类 api 然后 这里调研一下, 然后 追根究底到最终, 是到了 jdk 的 c 代码的调用, 创建的 pipe …

51单片机之LED点阵屏

目录 1.LED点阵屏简介 2.配置LED点阵屏代码 1.LED点阵屏简介 LED点阵屏真的是遍布我们我们生活的每个角落,从街边的流动显示字的招牌到你的液晶显示屏,都是基于点阵屏的原理研究出来的。还有那个世界上最大的球状建筑物:MSG Sphere&#xff…

三极管结构难?——秒了

前边我们已经学完了PN结,二极管,在分析了二极管后,我们对这些东西有了一定深度的了解,但是只给我们一个二极管去研究,这玩意好像真的没啥大用,其实我们追求的是用半导体材料去代替电子管的放大作用&#xf…

网络安全(防火墙,IDS,IPS概述)

问题一:什么是防火墙,IDS,IPS? 防火墙是对IP:port的访问进行限制,对访问端口进行制定的策略去允许开放的访问,将不放开的端口进行拒绝访问,从而达到充当防DDOS的设备。主要是拒绝网络流量,阻断所有不希望出现的流程,禁止数据流量流通,达到安全防护的作用。如将一些恶…

tensorflow.js 使用 opencv.js 将人脸特征点网格绘制与姿态估计线绘制结合起来,以获得更高的帧数

系列文章目录 如何在前端项目中使用opencv.js | opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js 如何从 public 路径加载人脸特征点检测模型tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图 文章目录 系列文章目录前言一、实现步…

Lecture 2~4 About Filter

文章目录 空间域上的滤波器- 线性滤波器盒状滤波器Box Filter锐化Sharpening相关运算 vs. 卷积运算 Correlation vs. Convolution - 非线性滤波器高斯滤波器Gaussian filter - 实际问题- 纹理texture 频域上的滤波器 滤波的应用- 模板匹配- 图像金字塔 空间域上的滤波器 图像…

Django的中间件

Django的中间件 【一】重点: django中间件是django的门户 请求来的时候需要经过中间件才能到达真正的django后端响应走的时候也需要经过中间件才能发送出去中间件按照顺序依次执行 ​ Django 中间件(Middleware)是 Django 框架提供的一种…

设计模式——代理模式12

代理模式给某对象提供一个代理对象,由代理对象来控制对原对象的引用。该模式经常出现在系统框架或相关组件中,如Spring框架如何解决循环依赖,在Mybatis 定义 Dao 层相关接口 不写实现 如何通过注解或者xml映射到对应到sql语句。下面介绍 静态…

再见 MybatisPlus,阿里推出新 ORM 框架更牛X

最近看到一个 ORM 框架 Fluent Mybatis 挺有意思的,整个设计理念非常符合工程师思维。 我对官方文档的部分内容进行了简单整理,通过这篇文章带你看看这个新晋 ORM 框架。 官方文档:https://gitee.com/fluent-mybatis/fluent-mybatis/wikis 提…

Nginx反向代理与Tomcat实现ssm项目前后端分离部署

Nginx nginx是一款http和支持反向代理的web服务器,以其优越的性能被广泛使用。以下是百度百科的介绍。 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.…

智慧园区水电能源监控管理系统

随着智慧城市的快速发展,智慧园区作为城市智能化的重要组成部分,其能源监控管理系统显得尤为关键。智慧园区水电能源监控管理系统,是利用先进的信息技术和自动控制技术,对园区内的水电能源使用进行实时监控、管理和优化的综合性智…

美国34401A安捷伦数字万用表

181/2461/8938产品概述: 附加功能: 6 1/2位数分辨率10种测量功能:DC/交流电压、DC/交流电流、2线和4线电阻、二极管、连续性、频率、周期基本精度:0.0035% DC,0.06%交流1000 V最大电压输入,3 A最大电流输入每秒1000次读数512读取记忆 安捷…

Linux C++ 027-STL之deque容器

Linux C 027-STL之deque容器 本节关键字:Linux、C、deque 相关库函数:pubsh_back、begin、front、sort deque基本概念 功能:双端数组,可以对头端进行插入删除操作。 deque 与 vector 的区别: (1&#x…

vue将html生成pdf并分页

jspdf html2canvas 此方案有很多的css兼容问题,比如虚线边框、svg、页数多了内容显示不全、部分浏览器兼容问题,光是解决这些问题就耗费了我不少岁月和精力 后面了解到新的技术方案: jspdf html-to-image npm install --save html-to-i…

关于pandas 无法读取 csv 文件数据的解决方式

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 …

LabVIEW和2D激光扫描的受电弓滑板磨耗精确测量

LabVIEW和2D激光扫描的受电弓滑板磨耗精确测量 在电气化铁路运输中,受电弓滑板的健康状况对于保障列车安全行驶至关重要。受电弓滑板作为连接电网与列车的直接介质,其磨损情况直接影响到电能的有效传输及列车的稳定运行。精确、快速测量受电弓滑板磨损情…