【HMGD】GD32/STM32 DMA接收不定长串口数据

单片机型号:GD32F303系列

CubeMX配置

配置串口参数

在这里插入图片描述

开启DMA

在这里插入图片描述

开启中断

在这里插入图片描述

示例代码

使用到的变量

uint8_t RX_Buff_FLAG = 0;
uint8_t RX_Buff[300] = {0};
uint8_t TX_Buff[300] = {0};

串口接收空闲函数

// 串口接收空闲函数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
	if(huart == &huart2){
		
		RX_Buff_FLAG = 1;
		
		RX_Length = 300 - __HAL_DMA_GET_COUNTER(huart->hdmarx);
		HAL_GPIO_WritePin(USART2_CTS_GPIO_Port, USART2_CTS_Pin, GPIO_PIN_RESET);
		HAL_UARTEx_ReceiveToIdle_DMA(&huart2, RX_Buff, 300);
	}
}

主函数

HAL_GPIO_WritePin(USART2_CTS_GPIO_Port, USART2_CTS_Pin, GPIO_PIN_RESET);
// 启动串口DMA接收
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, RX_Buff, 300);

while(1)
{
    // 等待接收
	if(RX_Buff_FLAG == 1)
	{
        RX_Buff_FLAG = 0;
        
        HAL_GPIO_WritePin(USART2_CTS_GPIO_Port, USART2_CTS_Pin, GPIO_PIN_SET);
        // 发送数据
        TX_Buff[0] = 0x01;
        TX_Buff[1] = 0x02;
        TX_Buff[2] = 0x03;
        HAL_UART_Transmit_DMA(&huart2, TX_Buff, 10);
    }
}

出现BUG

当使用115200进行通信没问题,然后切换到其他波特率发送数据后,在切换到115200进行通信就会无法接收数据

解决办法

void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
	if(huart == &huart2){
		HAL_GPIO_WritePin(USART2_CTS_GPIO_Port, USART2_CTS_Pin, GPIO_PIN_RESET);
		HAL_UARTEx_ReceiveToIdle_DMA(&huart2, TX_Buff, 300);
	}
}

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

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

相关文章

Redisson中分布式锁的实现原理

redisson版本:3.27.2 简介 锁归根结底就是对同一资源的竞争抢夺,不管是在单体的应用亦或者集群的服务中,上锁都是对同一资源进行修改的操作。至于分布式锁,那就是多个服务器或资源,同时抢占某一单体应用的同个资源了。…

基于Springboot+Vue的Java项目-农产品直卖平台系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

AD软件针对分散的元器件归一排列

先框选 然后快捷键TOL 绿色的十字箭头选框选位置 完成

将excel表中的数据导入到navicat中

1.将excel中的表头改成英文 2.在navicat中右键表,选择【导入向导】 3.在弹出的导入向导中选择Excel文件,然后点击【下一步】 4.选择需要导入的excel,选中后,在下方会罗列出excel中的sheet,勾选需要导入的sheet&#xf…

Chromium 调试指南2024 Windows11篇-使用日志来辅助调试(八)

1. 日志:你的第一个调试工具 日志是开发者最简单也是最常用的调试工具之一,它能够提供程序运行时的详细记录。通过合理的日志记录策略,开发者可以快速定位问题发生的上下文,理解程序的运行流程和状态。 2. 如何在Chromium中使用…

QMT如何写代码获取基金数据?方法总结!

此函数被设计为只支持单一基金查询,用于获取详细的股票信息。该函数可以让您接收关于特定基金的深度信息,包括但不限于其涨跌停价格、上市日期、退市日期以及期权到期日等重要数据。这将为您提供详尽的信息,以便更好地理解并分析股票的历史和…

【vue2项目经验总结:a标签干扰路由】

当我们点击页面中的a标签实现跳转时,会发现网页上方的路由也切换成了a标签的id值: 刷新后页面也会变成空白: 解决方法: 添加Click方法,传入的参数与id值保持一致 scrollIntoView() 方法,将该元素滚动到…

pycharm连接远程服务器,解决终端出现乱码问题

在终端输入命令时会有乱码问题,是字体编码设置错误。 根据上述步骤,设置完成后重启就可以了。

C#语言进阶

一、简单数据结构类 1. ArrayList ArrayList是一个 C# 为我们封装好的类,它的本质是一个 object 类型的数组。ArrayList类帮助我们实现了很多方法,比如数组的增删查改 1.1 声明 using System.Collections;ArrayList array new ArrayList(); 1.2 增…

MyBatis的创建和测试

创建项目点击Spring Initializr然后点击next 点击SQL 选择里面的Mybatis Framework和Mysql Driver 按如下图片创建项目 user表中的数据 #下面这些内容是为了让MyBatis映射 #指定Mybatis的Mapper文件 mybatis.mapper-locationsclasspath:mappers/*xml #指定Mybatis的实体目录 my…

亿级流量系统架构设计与实战

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

强烈推荐的AI生成PPT软件,快捷高效

提起PPT,大家的第一反应就是痛苦。经常接触PPT的学生党和打工人,光看到这3个字母,就已经开始头痛了: 1、PPT内容框架与文案挑战重重,任务艰巨,耗费大量精力。 2、PPT的排版技能要求高,并非易事…

EmotiVoice 实时语音合成TTS;api接口远程调用

参考:https://github.com/netease-youdao/EmotiVoice 测试整体速度可以 docker安装: 运行容器:默认运行了两个服务,8501 一个streamlit页面,另外8000是一个api接口服务 docker run -dp 8501:8501 -p 8250:8000 syq163/emoti-voice:latest##gpu运行 (gpu运行遇到CUDA er…

高效且安全的传输工具:FileLink跨网文件传输

在数字化时代,文件传输已成为我们日常工作和生活不可或缺的一部分。无论是企业内部的资料共享,还是企业对外的文件交换,都需要一个高效、稳定且安全的传输工具。而FileLink跨网文件传输正是满足这些需求的理想选择。 FileLink跨网文件传输 首…

【环境安装】nodejs 国内源下载与安装以及 npm 国内源配置

前言 Node.js 是一个基于 Chrome V8 引擎构建的 JavaScript 运行时环境,它能够使 JavaScript 在服务器端运行。它拥有强大的包管理器 npm,使开发者能够轻松管理和共享 JavaScript 代码包。 在中国,由于众所周知的原因,我们可能会…

Spring,SpringMVC,SpringBoot知识总结

1.简述Spring,SpringMVC,SpringBoot各自特点及联系 Spring、Spring MVC 和 Spring Boot 是 Java 开发中常用的三个框架,它们之间有以下关系: Spring:是一个全功能的 JavaEE 应用程序框架。它提供了一系列的解决方案&#xff0c…

VUE2+ffmpeg处理非h264编码格式视频

1、安装npm install ffmpeg/ffmpeg0.10.0 ffmpeg/core0.9.8 video.js8.12.0 2、在vue.config.js中devServer配置 headers: {// 如果需要用到ffmpeg确保ShareArrayBuffer能够正常使用,可能会有安全隐患Cross-Origin-Embedder-Policy: require-corp,Cross-Origin-Opener-Policy:…

XM1553B 航电总线协议模块(内置总线收发器)

是一款4M速率的高性能1553B模块,兼容1Mbps通信速率,支持单功能(BC,orRT,or BM)和多功能(BC&1RT&BM),该模块内部集成32K16bit的双端口RAM和4M 1553B收发器。 主机端接口支持串口和SPI。串…

问题—前端调用接口url多加一个/,本地可以调通,测试环境报错302,分开调两个接口

问题背景 接口url前面多加一个/ ,npm run serve 起项目,本地调用正常 npm run build 打包到测试环境,接口出现问题,分开调用接口,且报302错误 问题原因: 本地开发环境和测试环境的URL处理方式不同 本地使…

Pythonz中 SortedList的用法

文章目录 安装 sortedcontainers 库SortedList 基本用法特性与操作更多操作性能考虑实例:范围查询与交集高级特性与最佳实践自定义比较函数并行处理与多线程性能调优与其他数据结构结合使用 应用案例1. 金融交易记录分析2. 日志文件管理3. 学生成绩管理系统4. 实时数…