当前位置: 首页 > news >正文

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);}
}

相关文章:

STM32F407+FreeRTOS+LWIP UDP组播

开发环境介绍: MCU:STM32F407ZET6 网卡:LAN8720A LWIP版本:V1.1.0 FreeRTOS 版本:V10.2.1 LAN8720A硬件原理图: 硬件连接说明: MII_RX_CLK/RMII_REF_CLK ------>PA1 …...

(源码+部署+讲解)基于Spring Boot + Vue的车位租赁系统设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 🌟…...

Lecture 2~4 About Filter

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

【LINUX】Linux 命令大全:系统管理与网络操作指南

开始之前 Linux命令行,也称为终端,是Linux最强大的特性之一。通过命令行,用户可以执行几乎所有的任务,比如文件操作、程序安装、系统监控和网络配置等。了解这些基本命令,将帮助你更好地掌握Linux系统。 文件和目录操…...

Day50 动态规划 part11

Day50 动态规划 part11 123.买卖股票的最佳时机III 我的思路: 这道题考虑了交易次数 j(最大次数为2),以及某天 i 应该买or卖股票(两种状态) 用三维数组表示 dp[i][j][0] – 第i天结束时,交易j…...

Docker 搭建私有镜像仓库

一、镜像仓库简介 Docker的镜像仓库是一个用于存储和管理Docker镜像的中央位置。镜像仓库的主要作用是提供一个集中的地方,让用户可以上传、下载、删除和共享Docker镜像。镜像仓库又可以分为公共镜像仓库和私有仓库镜像仓库: 公共镜像仓库 Docker Hub 是…...

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

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

element UI 日期选择器 当前年份之前不可选

<el-date-pickertype"year"format"YYYY"value-format"YYYY"v-model"declareYear"placeholder"请选择年份":disabled-date"disabledDateFun"/>function disabledDateFun(time) {if (time.getFullYear() <…...

windows wireshark抓包rtmp推流出现TCP Retransmission

解决办法&#xff1a;tcp.port1935 && !(tcp.analysis.retransmission)...

C++之std::initializer_list详解

相关文章系列&#xff1a; C/C中{}的用法总结(全)_c {}-CSDN博客 目录 1.引言 2.容器的初始化 3.函数中使用std::initializer_list 4.自定义类型中使用std::initializer_list 5.迭代std::initializer_list 6. 在模板中使用std::initializer_list 7.std::initializer_lis…...

4月9日学习记录

[GXYCTF 2019]禁止套娃 涉及知识点&#xff1a;git泄露&#xff0c;无参数RCE 打开环境&#xff0c;源码什么的都没有&#xff0c;扫描后台看看 扫描发现存在git泄露 用githack下载查看得到一串源码 <?php include "flag.php"; echo "flag在哪里呢&#…...

解析快手滑块验证码的逆向工程

快手滑块验证码是一种常见的反机器人验证方式&#xff0c;通过模拟用户拖动滑块来验证用户身份。本文将介绍如何逆向工程快手滑块验证码的加密算法和轨迹生成方式&#xff0c;并提供详细的代码实现。 1. 加密算法解析 首先&#xff0c;我们需要了解滑块验证码生成时所用的加密…...

mysql运维知识总结

1. 日志 1.1 错误日志 错误日志是 MySQL 中最重要的日志之一&#xff0c;它记录了当 mysqld 启动和停止时&#xff0c;以及服务器在运行过 程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的&…...

【目标检测】-入门知识

1、回归与分类问题 回归问题是指给定输入变量(特征)和一个连续的输出变量(标签),建立一个函数来预测输出变量的值。换句话说,回归问题的目标是预测一个连续的输出值,例如预测房价、股票价格、销售额等。回归问题通常使用回归分析技术,例如线性回归、多项式回归、决策树…...

翻译笔实现文字识别功能的原理

翻译笔作为一种便携式设备&#xff0c;近年来在语言学习、旅游、商务交流等领域中逐渐受到人们的青睐。其核心功能之一便是文字识别&#xff0c;即将纸质或电子文档中的文字快速、准确地转化为机器可读的文本格式。那么&#xff0c;翻译笔是如何实现这一神奇功能的呢&#xff1…...

文件批量重命名,繁体中文秒变简体中文,轻松实现高效翻译

在数字化时代&#xff0c;我们的工作、学习和生活都离不开电脑文件。随着时间的推移&#xff0c;文件数量不断增加&#xff0c;管理起来变得越来越困难。你是否曾经为如何高效、有序地管理文件而烦恼&#xff1f;现在&#xff0c;有一款强大的文件批量重命名工具&#xff0c;它…...

UML学习

UML(Unified Modeling Language)&#xff1a;统一建模语言&#xff0c;提供了一套符号和规则来帮助分析师和设计师表达系统的架构、行为和交互 类图&#xff1a;描绘类、接口之间的关系(继承、实现、关联、依赖等)以及类的内部结构(属性和方法)&#xff0c;直观展现系统的静态…...

【话题:工作生活】2022年工作总结--疫情下的上海,疫情中的我。

现在是阳历2023年11月27日星期一&#xff0c;我再次开始撰写自己的年终工作总结。希望再过1、2个月&#xff0c;这份年终总结能够出炉&#xff0c;与大家相遇。 给自己定个小目标&#xff0c;年终的工作生活总结坚持写10年。我2017年毕业&#xff0c;之后就开始写每年的年终总结…...

13.磁盘逻辑卷管理

目录 概述实践查看盘 概述 实践 查看盘 命令 lsblk [rootks2p-hadoop04 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 447.1G 0 disk ├─sdb1 8:17 0 200M 0 part /boot/efi ├─sdb2 8:18 …...

SFTP服务详解:安全高效的文件传输新选择

在数字化日益盛行的今天,文件传输已成为我们日常生活和工作中不可或缺的一部分。然而,传统的文件传输方式往往存在着安全隐患和效率低下的问题。幸运的是,SFTP(SSH File Transfer Protocol)服务的出现为我们提供了一个安全、高效的文件传输解决方案。今天,就让我们一起深…...

微软DebugMCP:可视化调试MCP协议,解决AI与工具通信黑盒问题

1. 项目概述&#xff1a;当你的AI助手开始“自言自语”&#xff0c;你需要一个调试器 最近在折腾AI应用开发的朋友&#xff0c;估计没少跟各种“智能体”打交道。无论是基于OpenAI的GPTs&#xff0c;还是那些能联网、能调用工具的自定义助手&#xff0c;它们背后的核心通信协议…...

LLM应用快速演示框架:从架构解析到智能体开发的实战指南

1. 项目概述&#xff1a;一个面向开发者的LLM应用快速演示框架最近在GitHub上闲逛&#xff0c;发现了一个名为wronai/llm-demo的项目&#xff0c;点进去一看&#xff0c;瞬间觉得眼前一亮。这可不是又一个简单的“Hello World”式的大语言模型调用示例&#xff0c;而是一个结构…...

基于BLE HID与旋转编码器打造双模式无线遥控器

1. 项目概述你有没有过这样的时刻&#xff1a;窝在沙发里看剧&#xff0c;想调个音量或者暂停一下&#xff0c;却不得不伸手去够茶几上的键盘或鼠标&#xff0c;打断那份沉浸的惬意&#xff1f;或者&#xff0c;在电脑上回味一些经典老游戏时&#xff0c;觉得用键盘移动、鼠标射…...

μSR技术中的双量子Rabi振荡优化与应用

1. 实验背景与核心原理 在量子物理和凝聚态物理研究中&#xff0c;μ子自旋共振&#xff08;μSR&#xff09;技术是一种独特的探测手段。这项技术利用正μ子&#xff08;μ&#xff09;作为微观探针&#xff0c;通过观测其自旋极化行为来研究材料的局部磁环境。当μ子注入样品…...

如何用1条prompt触发真实针孔物理特性?揭秘焦距=0.8mm、景深无限、色散偏移的3层嵌套语法结构(附可运行JSON配置)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;如何用1条prompt触发真实针孔物理特性&#xff1f;揭秘焦距0.8mm、景深无限、色散偏移的3层嵌套语法结构&#xff08;附可运行JSON配置&#xff09; 针孔成像并非抽象概念&#xff0c;而是可通过精确 p…...

5.11-5.17周报

牛客周赛 Round 143&#xff1a;A B C D E...

企业级应用如何通过 Taotoken 统一管理多个团队的模型调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业级应用如何通过 Taotoken 统一管理多个团队的模型调用 在中大型企业的技术实践中&#xff0c;多个项目组或产品线同时接入和使…...

3步玩转APK下载:开源APKMirror客户端的终极实战指南

3步玩转APK下载&#xff1a;开源APKMirror客户端的终极实战指南 【免费下载链接】APKMirror 项目地址: https://gitcode.com/gh_mirrors/ap/APKMirror 你是否曾因官方应用商店找不到某个历史版本而苦恼&#xff1f;是否担心第三方下载站点的安全性&#xff1f;今天&…...

Windows Cleaner终极方案:5分钟告别C盘爆红,系统性能飙升200%

Windows Cleaner终极方案&#xff1a;5分钟告别C盘爆红&#xff0c;系统性能飙升200% 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为W…...

基于CircuitPython与ESP32-S3的智能LED矩阵闹钟项目全解析

1. 项目概述与核心思路几年前&#xff0c;当我第一次接触ESP32和MicroPython时&#xff0c;就被其“用Python玩硬件”的理念深深吸引。但说实话&#xff0c;早期的MicroPython在库支持和开发体验上&#xff0c;对新手并不算太友好。直到Adafruit推出了CircuitPython&#xff0c…...