初学stm32 --- DMA直接存储器

news2025/1/10 5:47:37

目录

DMA介绍

STM32F1 DMA框图

DMA处理过程

DMA通道

DMA优先级

DMA相关寄存器介绍 F1

DMA通道x配置寄存器(DMA_CCRx)

DMA中断状态寄存器(DMA_ISR)

DMA中断标志清除寄存器(DMA_IFCR)

DMA通道x传输数量寄存器(DMA_CNDTR)

DMA通道x外设地址寄存器(DMA_CPARx)

DMA通道x存储器地址寄存器(DMA_CMARx) 

 DMA相关HAL库驱动介绍

以DMA方式传输串口数据配置步骤

DMA介绍

DMA,全称Direct Memory Access,即直接存储器访问。

DMA传输 将数据从一个地址空间复制到另一个地址空间。    (数据搬运工)

DMA传输无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAMIO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高

作用:为CPU减负

传输方向:内存--->外设、外设--->内存、内存--->内存

STM32F1 DMA框图

①,DMA请求:

DMA传输数据,先向DMA控制器发送请求

②,DMA通道  :

不同外设向DMA的不同通道发送请求

DMA17个通道,DMA25个通道

DMA优先级:

多个DMA通道同时发来请求时,就有先后响应处理的顺序问题,这个由仲裁器管理

(优先级管理也分软件阶段和硬件阶段)

注意:DMA2仅存在大容量产品和互联型产品

DMA处理过程

DMA通道

DMA1

         每个通道用来管理来自于一个或多个外设对存储器访问的请求。且都有一个仲裁器,用于处理DMA请求间的优先级。

DMA优先级

仲裁器管理DMA通道请求分为两个阶段:软件阶段(1)、硬件阶段(2)

第一阶段(软件阶段):每个通道的优先级可在DMA_CCRx寄存器中设置,有四个等级:最高优先级。

第二阶段(硬件阶段):如果两个请求有相同软件优先级,较低编号的通道比较高编号的通道有较高的优先级

(大容量芯片中,DMA1控制器拥有高于DMA2控制器的优先级)

注意:多个请求通过逻辑或输入到DMA控制器,只能有一个请求有效。

DMA相关寄存器介绍 F1

DMA通道x配置寄存器(DMA_CCRx

 主要设置:

是否为存储器到存储器模式:MEM2MEM

数据传输方向:DIR

通道优先级:PL[1:0]

循环模式:CIRC

外设/存储器增量模式:PINC/MINC

外设/存储器数据宽度:PSIZE[1:0]/MSZE[1:0]

使能中断:TEIE传输错误中断、HTIE半传输中断、TCIE传输完成中断

开启通道:EN

DMA中断状态寄存器(DMA_ISR

注意:当设置了允许中断时,将会产生中断

DMA中断标志清除寄存器(DMA_IFCR

DMA通道x传输数量寄存器(DMA_CNDTR

 最大数据传输数目:65535

        非循环模式下传输结束后,要开始新的DMA传输,需要在关闭DMA通道情况下,在该寄存器中重新写入传输数目。

DMA通道x外设地址寄存器(DMA_CPARx

DMA通道x存储器地址寄存器(DMA_CMARx 

 DMA相关HAL库驱动介绍

DMA外设相关结构体:DMA_HandleTypeDef DMA_InitTypeDef

DMA方式传输串口数据配置步骤

(USART1_TX   DMA1_CH4)

1、使能DMA时钟                

__HAL_RCC_DMA1_CLK_ENABLE

2、初始化DMA

HAL_DMA_Init函数初始化DMA相关参数

__HAL_LINKDMA函数连接DMA和外设

3、使能串口的DMA发送,启动传输

HAL_UART_Transmit_DMA

查询DMA传输状态

__HAL_DMA_GET_FLAG 查询通道传输状态

__HAL_DMA_GET_COUNTER 获取当前传输剩余数据量

DMA中断使用

HAL_NVIC_EnableIRQ

HAL_NVIC_SetPriority

编写中断服务函数 xxx_IRQHandler

在使用DMA来搬运数据到串口UART中,需要注意的事项

将 DMA 与 USART1 连接:

__HAL_LINKDMA(&g_uart1_handle, hdmatx, g_dma_handle);

__HAL_LINKDMA 宏用于将 DMA 句柄 (g_dma_handle) 与 USART1 的发送 DMA (hdmatx) 进行关联。这确保了 DMA 在发送数据时能够正确地与 UART1 进行交互。

启动 UART 的 DMA 传输:

HAL_UART_Transmit_DMA(&g_uart1_handle, g_sendbuf, SEND_BUF_SIZE);

使用 HAL_UART_Transmit_DMA 启动 UART 数据的 DMA 传输,其中 g_sendbuf 是待发送的数据缓冲区,SEND_BUF_SIZE 是数据的大小。

等待 DMA 传输完成:

while (1)
{
    if ( __HAL_DMA_GET_FLAG(&g_dma_handle, DMA_FLAG_TC4))   /* 等待 DMA1_Channel4 传输完成 */
    {
        __HAL_DMA_CLEAR_FLAG(&g_dma_handle, DMA_FLAG_TC4);
        HAL_UART_DMAStop(&g_uart1_handle);  /* 传输完成以后关闭串口DMA */
        break;
    }
  • 使用 __HAL_DMA_GET_FLAG 检查 DMA 是否完成传输,如果完成,则通过 __HAL_DMA_CLEAR_FLAG 清除 DMA 传输完成标志。
  • 然后调用 HAL_UART_DMAStop 停止 DMA 传输。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MT6835天玑6100平台规格参数_MTK联发科安卓核心板方案定制开发

联发科MT6835平台集成了蓝牙、FM、WLAN 和 GPS 模块,是一个高度集成的基带平台。该芯片集成了两个 Arm Cortex-A76 内核(运行频率高达 2.2GHz)、六个 Arm Cortex-A55 内核(运行频率高达 2.0 GHz)和强大的多标准视频编解…

认识+安装ElasticSearch

1. 为什么要学习ElasticSearch? 一般的来说,项目中的搜索功能尤其是电商项目,商品的搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的,存在很多问题。 1.1 数据库搜索所存在的问题 1.1.1 查询效率较低 由于数据库模糊查询不走索引&…

QPS和TPS 的区别是什么?QPS 大了会有什么问题,怎么解决?

QPS 和 TPS 的区别是什么?QPS 大了会有什么问题,怎么解决? QPS(Queries Per Second)和 TPS(Transactions Per Second)都是衡量系统性能的重要指标,尤其是在 Web 服务、数据库和分布…

Mac中配置vscode(第一期:python开发)

1、终端中安装 xcode-select --install #mac的终端中安装该开发工具 xcode-select -p #显示当前 Xcode 命令行工具的安装路径注意:xcode-select --install是在 macOS 上安装命令行开发工具(Command Line Tools)的关键命令。安装的主要组件包括:C/C 编…

【网络协议】静态路由详解

网络中的路由器通过以下两种方式之一发现远程网络: 静态配置路由动态路由协议 在本文,我们将学习关于静态路由的各种概念,例如如何配置静态路由、路由表如何进行决策、路由接口等相关知识。 文章目录 引言直连网络静态路由路由表原则原则1原…

【杂记】qt

1、终端下载PySide6以转换文件格式:pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple 命令提示符下载完毕后:powerShell :cd 跳转到文件对应地址 (1、pyside6-uic.exe test.ui -o test.py #将Ui界面文件转换成…

【C#】C# 使用onnxruntime报错记录

1、 C#使用onnxruntime时报CUDA版本错误 Bug信息:The given version [14] is not supported, only version 1 to 10 is supported in this build. 导致这个bug的原因是,在win11系统下的windows/system32文件夹下有一个默认的onnxruntime.dll,…

LabVIEW计算机软件著作权

计算机软件著作权是指软件开发者对其创作的软件作品享有的法律保护权利,目的是防止他人未经授权复制、修改或传播该软件。软件著作权不仅包括软件的源代码,还包括文档、界面设计、功能模块、程序逻辑等内容。通过登记软件著作权,开发者可以获…

(2023|NIPS,LLaVA-Med,生物医学 VLM,GPT-4 生成自指导指令跟随数据集,数据对齐,指令调优)

LLaVA-Med: Training a Large Language-and-Vision Assistant for Biomedicine in One Day 目录 LLaVA-Med: Training a Large Language-and-Vision Assistant for Biomedicine in One Day 0. 摘要 1. 简介 2. 相关工作 3. 生物医学视觉指令数据 4. 将多模态对话模型适配…

【网络】计算机网络的分类 局域网 (LAN) 广域网 (WAN) 城域网 (MAN)个域网(PAN)

局域网是通过路由器接入广域网的 分布范围 局域网Local Area Network:小范围覆盖,速度高,延迟低(办公室,家庭,校园,网络) 广域网Wide Area Network 大范围覆盖,速度相对低,延迟高…

LabVIEW软件Bug的定义与修改

在LabVIEW软件开发过程中,bug(程序错误或缺陷)指的是程序中导致不符合预期行为的任何问题。Bug可能是由于编码错误、逻辑漏洞、硬件兼容性问题、系统资源限制等因素引起的。它可能会导致程序崩溃、功能无法正常执行或输出结果不符合预期。理解…

【Logstash03】企业级日志分析系统ELK之Logstash 过滤 Filter 插件

Logstash 过滤 Filter 插件 数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构, 并将它们转换成通用格式,以便进行更强大的分析和实现商业价值。 Logstash 能够动态地转换和解析数据&a…

Docker运维高级容器技术知识点总结

1、虚拟机部署和容器化部署的区别是什么&#xff1f; 1、技术基础&#xff1a; <1>.虚拟化技术在物理硬件上创建虚拟机&#xff0c;每台虚拟机运行自己完整的操作系统、从而实现资源隔离。 <2>.容器化技术&#xff1a;将应用程序打包在容器内&#xff0c;在进程空间…

1.2.1-2部分数据结构的说明02_链表

&#xff08;1&#xff09;链表数据结构&#xff1a; 概念&#xff1a; 将列表中相互连接的节点不连续的存储在内存中。与数据不同&#xff0c;我们无法再恒定时间内访问任何元组&#xff0c;如果遍历所有则花费时间与元素总数n成正比。插入和删除1个元素的时间复杂度都是O(n…

C# 之某度协议登录,JS逆向,手机号绑定,获取CK

.NET兼职社区 .NET兼职社区 .NET兼职社区 .NET兼职社区 有需要指导&#xff0c;请私信我留言V或者去社区找客服。

SpringcloudAlibaba黑马笔记(部分)

第一章 微服务介绍 1.1 系统架构演变 随着互联网的发展&#xff0c;网站应用的规模也在不断的扩大&#xff0c;进而导致系统架构也在不断的进行变化。 从互联网早起到现在&#xff0c;系统架构大体经历了下面几个过程 : 单体应用架构 ---> 垂直应用架构 ---> 分布 …

Redis 基础篇

一、redis 概念及特性 1.1 Redis 概念 Redis&#xff08;Remote Dictionary Server&#xff09;&#xff0c;即远程字典服务&#xff0c;是一个开源的高性能键值存储数据库&#xff0c;可以用作数据库、缓存和消息中间件。 redis 官网&#xff1a;Redis - The Real-time Data P…

DAY15 神经网络的参数和变量

DAY15 神经网络的参数和变量 一、参数和变量 在神经网络中&#xff0c;参数和变量是两个关键概念&#xff0c;它们分别指代不同类型的数据和设置。 参数&#xff08;Parameters&#xff09; 定义&#xff1a;参数是指在训练过程中学习到的模型内部变量&#xff0c;这些变量…

[离线数仓] 总结二、Hive数仓分层开发

接 [离线数仓] 总结一、数据采集 5.8 数仓开发之ODS层 ODS层的设计要点如下: (1)ODS层的表结构设计依托于从业务系统同步过来的数据结构。 (2)ODS层要保存全部历史数据,故其压缩格式应选择压缩比率,较高的,此处选择gzip。 CompressedStorage - Apache Hive - Apac…

Chromium源码windows下载和编译

官方地址&#xff1a;chromium/docs/windows_build_instructions.md at main chromium/chromium GitHub Chromium介绍 Chromium 是一个开源浏览器项目&#xff0c;旨在为所有用户构建更安全、更快、更稳定的网络体验方式。掌握Chromium的编译和开发是浏览器项目相关的开发者…