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

【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);}
}
http://www.lryc.cn/news/345780.html

相关文章:

  • 局域网手机端远程控制手机
  • 如何在OpenWrt软路由中增加一个新功能
  • 【linux】vmtouch文件缓存管理工具
  • 论文阅读:The Unreasonable Ineffectiveness of the Deeper Layers 层剪枝与模型嫁接的“双生花”
  • Python批量备份华为设备配置到FTP服务器
  • Java虚拟机(JVM)中确保资源及时释放的策略
  • 04-Fortran基础--Fortran数组和矩阵运算
  • el-select选项框内容过长
  • K8S面试题学习5
  • 字符以及字符串函数
  • 记录解决问题--redis ssl连接
  • 买卖股票的最佳时机
  • Linux部署安装
  • docker搭建mysql集群实现主从复制
  • Neo4j 之安装和 CQL 基本命令学习
  • 【全开源】JAVA台球助教台球教练多端系统源码支持微信小程序+微信公众号+H5+APP
  • 机器学习-如何为模型选择评估指标?
  • 【AutoGPT】踩坑帖(follow李鱼皮)
  • 机器学习-L1正则/L2正则
  • Linux——socket编程之tcp通信
  • HTTP协议介绍
  • elasticsearch安装配置注意事项
  • Istio 流量管理(请求路由、流量转移、请求重试、流量镜像、故障注入、熔断等)介绍及使用
  • Transformers中加载预训练模型的过程剖析
  • 使用MCU的 GPIO口 模拟SDIO时序读写TF/SD卡的可能性。
  • SSM【Spring SpringMVC Mybatis】——Mybatis(二)
  • 在线教育系统在线网校报价,培训机构是怎样招聘老师的?流程是什么?
  • 您的文件和驱动器上的“密码保护”有多安全?
  • 4000字超详解Linux权限
  • SearXNG - 一个注重隐私的互联网元搜索引擎