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 SEND
	  osSemaphoreWait (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));
            

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥杯选拔赛真题94】Scratch巡逻的直升机 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 scratch巡逻的直升机 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 sc…

非前后端分离项目,通过拦截器,对前端发送网络访问地址

一、背景 在非前后端分离的web应用开发过程中,在html中不可避免的需要请求项目地址去访问接口或者静态资源,但是开发环境、测试环境以及生产环境不同,地址也不同,避免频繁修改代码,可以通过自动获取访问地址通过拦截器…

人工智能大语言模型起源篇(一),从哪里开始

序言:许多人最初接触人工智能都是在ChatGPT火热之际,并且大多停留在应用层面。对于希望了解其技术根源的人来说,往往难以找到方向。因此,我们编写了《人工智能大语言模型起源篇》,旨在帮助读者找到正确的学习路径&…

FFmpeg功能使用

步骤:1,安装FFmpeg Download FFmpeg 在这里点击->Windows builds from gyan.dev;如下图 会跳到另外的下载界面: 在里面下拉选择点击ffmpeg-7.1-essentials_build.zip: 即可下载到FFmpeg; 使用&#…

【Unity基础】Unity中如何实现图形倒计时

为了在Unity中实现一个图形倒计时,除了代码部分,还需要一些UI元素的创建和设置。本文以环形倒计时为例,以下是完整的步骤,涵盖了如何创建UI元素、设置它们,以及如何编写控制环形倒计时进度的脚本。 1. 创建UI元素 创建…

2024 中央企业数据资产化及数据资产入表场景建设白皮书

本文介绍了中央企业数据资产化的重要性及其入表场景建设。白皮书详细阐述了数据资产化的概念、实施步骤和关键挑战,提出了一系列解决方案。文章还强调了数据资产入表的重要性,以提高数据的透明度和质量,推动企业数字化转型。 重点内容&#…

电力场景输电线本体分割数据集labelme格式1629张1类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):1629 标注数量(json文件个数):1629 标注类别数:1 标注类别名称:["csv_ct"] 每个类别标注的框数&…

【机器学习】机器学习的基本分类-无监督学习-t-SNE(t-分布随机邻域嵌入)

t-SNE(t-分布随机邻域嵌入) t-SNE(t-distributed Stochastic Neighbor Embedding)是一种用于降维的非线性技术,常用于高维数据的可视化。它特别适合展示高维数据在二维或三维空间中的分布结构,同时能够很好…

哈尔滨工业大学《2024年801自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《哈尔滨工业大学801自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题

数据可视化:提升年度报表分析效率的新路径

在当今复杂多变的商业环境中,企业年度报表不仅是反映企业过去一年经营成果的重要文件,更是指导未来战略规划的基石。它如同一面镜子,既映照出企业的辉煌成就,也不避讳地揭示了存在的问题与挑战。本文将从企业年度报表的编制原则、…

探秘Redis哨兵模式:原理、运行与风险全解析

一、引言 Redis 概述 在当今的数据存储领域,Redis 占据着十分重要的地位。它是一个内存中的数据存储,凭借其出色的性能和丰富的功能,被数百万开发人员广泛应用于诸多场景之中,已然成为构建高性能、可扩展应用程序的得力工具。 从…

芯品荟|SWM221系列芯片之TFTLCD彩屏显示及控制

“革新未来,智驭控制新纪元”,由广东华芯微特集成电路有限公司市场总监张琢,对SWM221系列的强大功能表现进行了整体介绍。 确实,华芯微特在TFTLCD显示及控制有十多年应用基础和积累的团队,仍勇于挑战,自我…

Liinux下VMware Workstation Pro的安装,建议安装最新版本17.61

建议安装最新版本17.61,否则可能有兼容性问题 下载VMware Workstation安装软件 从官网网站下载 https://support.broadcom.com/group/ecx/productdownloads?subfamilyVMwareWorkstationPro 选择所需版本 现在最新版本是17.61,否则可能有兼容性问题…

pyfink1.20版本下实现消费kafka中数据并实时计算

1、环境 JDK版本:1.8.0_412python版本:3.10.6apache-flink版本:1.20.0flink版本:1.20kafka版本:kafka_2.12-3.1.1flink-sql-connector-kafka版本:3.3.0-1.202、执行python-flink脚本 从kafka的demo获取消…

Python 写的《桌面时钟》屏保

原代码: # 日历式时钟 # 导入所需的库 # 作者:Hoye # 日期:2024年12月16日 # 功能:显示当前日期、星期、时间,并显示模拟时钟 import tkinter as tk from tkinter import ttk import time import math import sysdef …

51c自动驾驶~合集41

我自己的原文哦~ https://blog.51cto.com/whaosoft/12830614 #SFPNet 迈向通用Lidar分割!取代Transformer的新架构SFPNet 迈向通用激光雷达语义分割(),取代Transformer的新架构SFPNet,新数据集S.MID 论文标题&am…

前端之CSS光速入门

一、CSS介绍 什么是CSS? CSS(Cascading Style Sheet),层叠样式表,用于控制页面的样式. CSS能够对网页中元素位置的排版进行像素级的精确控制,实现美化页面的效果.能够做到页面的样式和结构分离.(CSS可以理解为"东方四大邪术"的化妆术.对页面展示进行化…

P8615 拼接平方数 P8699 排列数

文章目录 [蓝桥杯 2014 国 C] 拼接平方数[蓝桥杯 2019 国 B] 排列数 [蓝桥杯 2014 国 C] 拼接平方数 题目描述 小明发现 49 49 49 很有趣,首先,它是个平方数。它可以拆分为 4 4 4 和 9 9 9,拆分出来的部分也是平方数。 169 169 169 也有…

【AIGC】结构化的力量:ChatGPT 如何实现高效信息管理

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯结构化的定义 (Structuration: Definition)1. 结构化的定义2. 结构化的示例3. 技术领域中的结构化数据 💯有序的规则的重要…

如何实现日期选择窗口

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了TimePicker Widget相关的内容,本章回中将介绍DatePickerDialog Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的DatePickerDialog是一种弹出窗口,只不过窗口的内容固定显示为日期,它…