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

嵌入式学习(40)-基于STM32F407Hal库的串口DMA空闲中断接收+DMA发送

一、概述

为了实现数据的高效传输,使用DMA的方式进行数据的发送,整体的思路是通过查询标志位的方式。

二、应用

/*****DMA 发送******/	/* Tx DMA配置 */__HAL_LINKDMA(&USART3_handler, hdmatx, g_dma_usart_tx_handle); g_dma_usart_tx_handle.Instance = DMA1_Stream3;                    /* 数据流选择 */g_dma_usart_tx_handle.Init.Channel = DMA_CHANNEL_4;                               /* DMA通道选择 */g_dma_usart_tx_handle.Init.Direction = DMA_MEMORY_TO_PERIPH;           /* 存储器到外设 */g_dma_usart_tx_handle.Init.PeriphInc = DMA_PINC_DISABLE;               /* 外设非增量模式 */g_dma_usart_tx_handle.Init.MemInc = DMA_MINC_ENABLE;                   /* 存储器增量模式 */g_dma_usart_tx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;  /* 外设数据长度:8位 */g_dma_usart_tx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;     /* 存储器数据长度:8位 */g_dma_usart_tx_handle.Init.Mode = DMA_NORMAL;                          /* 外设流控模式 */g_dma_usart_tx_handle.Init.Priority = DMA_PRIORITY_MEDIUM;             /* 中等优先级 */g_dma_usart_tx_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;            /* 关闭FIFO模式 */g_dma_usart_tx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;    /* FIFO阈值配置 */g_dma_usart_tx_handle.Init.MemBurst = DMA_MBURST_SINGLE;               /* 存储器突发单次传输 */g_dma_usart_tx_handle.Init.PeriphBurst = DMA_PBURST_SINGLE;            /* 外设突发单次传输 */HAL_DMA_DeInit(&g_dma_usart_tx_handle);HAL_DMA_Init(&g_dma_usart_tx_handle);	

空闲中断接收与发送:

	/*发送部分----开始*/if (__HAL_DMA_GET_FLAG(&g_dma_usart_tx_handle, DMA_FLAG_TCIF3_7))        /* 等待DMA2_Stream7传输完成 */{__HAL_DMA_CLEAR_FLAG(&g_dma_usart_tx_handle, DMA_FLAG_TCIF3_7);      /* 清除DMA2_Stream7传输完成标志 */HAL_UART_AbortTransmit(&USART3_handler);      /* 传输完成以后关闭串口DMA */HAL_UART_Transmit_DMA(&USART3_handler, g_rcvDataBuf, PACKET_DATA_LEN);			}	/*发送部分----结束*/

三、测试结果

四、参代码链接

STM32F407基于HAl库实现串口空闲中断的接收,与DMA接收发送数据资源-CSDN下载 

http://www.dtcms.com/a/302228.html

相关文章:

  • 前端实现银河粒子流动特效的技术原理与实践
  • 物联网与数字孪生:深度协同驱动智能未来 —— 专业规划分析
  • 解析分区、挂载与块设备:Linux 存储管理核心命令详解
  • 关于前端的性能优化
  • Vue 工程化
  • 初识 docker [下] 项目部署
  • 【案例总结】幽灵单据——消失的交货单号
  • 数据库简介
  • layui-vue 入驻 GitCode 平台:让前端开发更简单优雅
  • 【Oracle】ORACLE-ASM安装
  • vue-grid-layout元素交换位置及大小
  • Python Pandas.merge函数解析与实战教程
  • 【数学建模论文学习笔记】基于历史数据的蔬菜类商品定价与补货决策模型
  • Java从入门到精通!第十八天(JDK17安装以及网络编程) 完结篇!!!
  • 7.29 技巧|
  • 【数据库】使用Sql Server将分组后指定字段的行数据转为一个字段显示,并且以逗号隔开每个值,收藏不迷路
  • C# 接口(interface 定义接口的关键字)
  • JVM 垃圾回收机制全景解析:从对象回收到收集算法
  • Spring Boot日志开发实战手册:集成/输出/级别控制/持久化精要
  • MySQL 锁机制 15 连问 · 面试速答版
  • openeuler24.03部署k8s1.32.7集群(一主两从)
  • C primer plus (第六版)第九章 编程练习第6题
  • 基于YOLO11的电梯电瓶车检测系统:让电梯更安全
  • Redis反弹Shell
  • 《Java 程序设计》第 8 章 - Java 常用核心类详解
  • 安装研华板卡驱动
  • 重庆地区通信安全员考试题库及答案
  • tsc命令深入全面讲解
  • 零基础学习性能测试第六章:性能难点-Jmeter文件上传场景压测
  • 【智慧物联网平台】编译jar环境 Linux 系统编译IOT物联网——仙盟创梦IDE