STM32F407+LAN8720A +LWIP +FreeRTOS UDP通讯

STM32F407+LAN8720A +LWIP +FreeRTOS ping通
上一篇实现了LWIP ping 通

本篇实现UDP通讯

实现如下功能:

  1. 串口1空闲中断+DMA接收,收到数据用UDP发送
  2. UDP接收,收到数据用串口1发送

STM32CUBEIDE配置和代码

1. 配置UARAT1的空闲中断+DMA接收

在这里插入图片描述
UART1接收到数据,释放信号量,在任务中进行数据处理(UDP发送)

/* USER CODE END Header_StartTask03 */
void StartTask03(void const * argument)
{/* USER CODE BEGIN StartTask03 */uint16_t len_data;HAL_UARTEx_ReceiveToIdle_DMA(&huart1, buletooth_rxBuf, 250);hdma_usart1_rx.Instance->CR  &= ~(DMA_IT_HT);//取消接收一半中断/* Infinite loop */for(;;){//UART RECEIVED, UDP SENDosSemaphoreWait (BinarySem_BLUE_RecHandle, osWaitForever);if(ble_rxBuf_len > 0){len_data = ble_rxBuf_len;udp_client_send_data(buletooth_rxBuf, len_data);}}/* USER CODE END StartTask03 */
}/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{if(huart->Instance ==  USART1){ble_rxBuf_len = Size;osSemaphoreRelease (BinarySem_BLUE_RecHandle);HAL_UARTEx_ReceiveToIdle_DMA(&huart1, buletooth_rxBuf, 250);}
}

2. 配置UDP


void udp_client_init(void)
{ip_addr_t serverIP;err_t err;IP4_ADDR(&serverIP, 192, 168, 111, 11);upcb = udp_new();if (upcb != NULL){/* 配置本地端口 */upcb->local_port = UDP_LOCAL_PORT;/* 配置服务器IP和端口号*/err = udp_connect(upcb, &serverIP, UDP_REMOTE_PORT);if (err == ERR_OK){/* 注册接收回调函数 */udp_recv(upcb, udp_receive_callback, NULL);printf("UDP INIT SUCCESS\r\n");}else{udp_remove(upcb);}}
}
static void udp_receive_callback(void *arg, struct udp_pcb *upcb,struct pbuf *p, const ip_addr_t *addr, u16_t port)
{if (p != NULL){struct pbuf *ptmp = p;while (ptmp != NULL){memset(cache_udprece, 0, sizeof(cache_udprece));

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

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

相关文章

Git-基础操作命令

目录 Git基础操作命令 case *查看提交日志 log 版本回退 get add . Git基础操作命令 我们创建并且初始化这个仓库以后,我们就要在里面进行操作。 Git 对于文件的增删改查存在几个状态,这些修改状态会随着我们执行Git的命令而发生变化。 untracked、…

简单的Java_Swing小项目

Swing小项目 无需任何额外配置,直接可以在eclipse用 非常简单的文件结构 简单的登录界面 进去后就大概是这么个样子 很久以前写的了,我就不一一打开展示了。内容和无UI版本差不多,只是用简单的Swing实现了界面化操作 数据是可以保存在…

回归任务与分类任务应用及评价指标

能源系统中的回归任务与分类任务应用及评价指标 一、回归任务应用1.1 能源系统中的回归任务应用1.1.1 能源消耗预测1.1.2 负荷预测1.1.3 电池健康状态估计(SOH预测)1.1.4 太阳能发电量预测1.1.5 风能发电量预测 1.2 回归任务中的评价指标1.2.1 RMSE&…

嵌入式学习(18)-stm32F407串口接收空闲中断+DMA

一、概述 在一些一次性接收大批量数据的引用场合,如果使用接收中断会频繁的进入接收中断影响代码的运行效率。为了解决这个问题可以使用串口的空闲中断DMA实现。 二、应用 在网上招了一些例程在STM32F407的平台上都没有跑通会出现各种异常,主要原因还…

Docker的镜像

目录 1. 镜像是什么??2. 镜像命令详解2.1 镜像命令清单2.2 docker rmi命令2.3 docker save命令2.4 docker load命令2.5 docker history命令2.6 docker import命令2.7 docker image prune命令2.8 docker build命令 3. 镜像的操作4. 离线迁移镜像5. 镜像存…

Git版本控制工具--介绍及安装

1.Git的简介 Git是目前世界上最先进的的分布式控制系统(没有之一)。 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。 Linus虽然创建了Linux&…

【OJ题解】面试题三步问题

个人主页: 起名字真南的CSDN博客 个人专栏: 【数据结构初阶】 📘 基础数据结构【C语言】 💻 C语言编程技巧【C】 🚀 进阶C【OJ题解】 📝 题解精讲 目录 **题目链接****解题思路****1. 问题分析****2. 递归思路****3. 优化方案&a…

CTFHub解题笔记之Web信息泄露篇:11.HG泄露

1.题目描述 题目位置 网页显示 2.解题思路 ‌HG泄露是指Mercurial版本控制系统中的敏感信息被未经授权的个人或系统访问的情况。Mercurial(翻译过来是水银,所以通常简称为HG)是一种分布式版本控制系统,用于管理软件源代码或其…

linux网络编程 | c | 多线程并发服务器实现

多线程并发服务器 基于该视频完成 12-多线程并发服务器分析_哔哩哔哩_bilibili 通过的是非阻塞忙轮询的方式实现的 和阻塞等待的区别就是,阻塞是真的阻塞了,而这个方式是一直在问有没有请求有没有请求 linux | c | 多进程并发服务器实现-CSDN博客 …

R语言——缺失值处理

目录 缺失数据 1 R中的缺失值 2查看缺失值is.na() 3 去除缺失值 1 R中的缺失值 在R中,NA代表缺失值,NA是不可用(可能是0,可能是其他值,NA是未知的),notavailable的简称,用来存储…

快速上手:利用 FFmpeg 合并音频文件的实用教程

FFmpeg 是一个强大的多媒体处理工具,能够轻松地对音频、视频进行编辑和转换。本文将介绍如何使用 FFmpeg 来合并(拼接)多个音频文件为一个单一文件。无论您是想要创建播客、音乐混音还是其他任何形式的音频项目,这都是一个非常实用…

常见软件设计模式介绍:三层架构、MVC、SSM、EDD、DDD

三层架构(View Service Dao) 三层架构是指:视图层 view(表现层),服务层 service(业务逻辑层),持久层 Dao(数据访问层) 表现层:直接跟前…

重庆轨道交通2号线建桥地铁站自动化监测

1. 项目概述 本次项目位于重庆市轨道交通2号线中大渡口区的建桥站,轨道交通2号线是重庆市首条开通运营的城市轨道交通,也是中国首条开通运营的跨座式单轨线路。建桥站为轨道交通2号线延长线中的一站,本站为高架侧式,临近恒大麓山…

一、LRU缓存

LRU缓存 1.LRU缓存介绍2.LRU缓存实现3.LRU缓存总结3.1 LRU 缓存的应用3.2 LRU 缓存的优缺点 1.LRU缓存介绍 LRU是Least Recently Used 的缩写,意为“最近最少使用”。它是一种常见的缓存淘汰策略,用于在缓存容量有限时,决定哪些数据需要被删…

噪杂环境(房车改装市场)离线语音通断器模块

一直在坚持,却很难有机会上热门,在现在这个以流量为导向的时代,貌似很难靠所谓的坚守和热爱把产品成功的推向市场了。目前的客户仍然是以老客户为主,应用场景主要是房车改装,根据九客户的需求定制化一些模块。因为没有…

Rust之抽空学习系列(四)—— 编程通用概念(下)

Rust之抽空学习系列(四)—— 编程通用概念(下) 1、函数 函数用来对功能逻辑进行封装,能够增强复用、提高代码的可读 以下是函数的主要组成部分: 名称参数返回类型函数体 1.1、函数名称 在Rust中&…

深入了解IPv6——光猫相关设定:DNS来源、DHCPv6服务、前缀来源等

光猫IPv6设置后的效果对比图: 修改前: 修改后: 一、DNS来源 1. 网络连接 来源: 从上游网络(如运营商)获取 IPv6 DNS 信息,通过 PPPoE 或 DHCPv6 下发。 特点: DNS 服务器地址直…

【Vue3】前端使用 FFmpeg.wasm 完成用户视频录制,并对视频进行压缩处理

强烈推荐这篇博客!非常全面的一篇文章,本文是对该博客的简要概括和补充,在不同技术栈中提供一种可行思路,可先阅读该篇文章再阅读本篇: FFmpeg——在Vue项目中使用FFmpeg(安装、配置、使用、SharedArrayBu…

聊一下前端常见的图片格式

1. JPEG (JPG) 概述:是一种有损压缩的图像格式,它通过去除图像中一些人类视觉不易察觉的细节来减小文件大小。它支持数百万种颜色,能够很好地呈现照片等色彩丰富的图像内容。优点: 压缩率高:可以在保持相对较好的图像…

【数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】

目录😋 任务描述 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现快速排序算法。 测试说明 平台会对你编写的代码进行测试: 测试输入示例: 10 6 8 7 9 0 1 3 2 4 5 (说明:第一行是元素个数&a…