STM32的DMA操作

STM32之DMA转运学习,附代码 图解:左上角这里是Cortex-M3内核,里面包含了CPU和内核外设NVIC和SysTick等等,剩下的所有东西都可以看做存储器,所以总共就是存储器和CPU两个东西,Flash是主闪存,SRAM是运行内存,各个外设都可以看成是寄存器,也是一种SRAM存储器。寄存器是一种特殊的存储器。 阅读详情

目录

DMA概述

STM32中的DMA

DMA的通道

DMA处理

数据传输方向

DMA_CCRx寄存器

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7)

仲裁器

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7)

​可编程的数据量

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7) 

指针增量

存储器到存储器

通道传输数据量

 中断

通道的配置过程

DMA相关函数配置

DMA_Init

DMA_Cmd

 DMA_ITConfig 

DMA_SetCurrDataCounter

DMA_GetCurrDataCounter

DMA_GetFlagStatus

 DMA_ClearFlag

DMA_GetITStatus

DMA_ClearITPendingBit

常用的外设DMA使能库函数

ADC

DAC

​USART

​I2C

​TIM 

 DMA的初始化配置

1. 使能DMA时钟

2. 初始化DMA通道参数

3. 使能DMA发送,使能外设DMA使能函数

4. 使能DMA通道,启动传输

5. 查询DMA传输状态

6. 获取或设置通道当前剩余数据量


DMA概述

Direct Memory Access

直接存储器访问

DMA传输将数据从一个地址空间复制到另一个地址空间

由CPU初始化这个DMA传输动作,动作本身由DMA控制器完成

DMA传输通过硬件为RAM和IO设备之间开辟一条直接传输数据的通道,提高了CPU的运行效率

STM32中的DMA

STM32最多有2个DMA控制器,其中大容量产品有2个DMA控制器,小容量产品只有1个

DMA1有7个通道,DMA2有5个通道

每个通道专门用来管理来自于一个或多个外设对存储器访问的请求

还有一个仲裁协调各个DMA请求的优先权

STM32的DMA具有以下特征:

  • 每个通道都直接连接专用的硬件DMA请求,支持软件触发,可以通过软件进行配置
  • 优先级可以通过软件编程设置,共4级
  • 独立的源和目标数据区的传输宽度,模拟打包和拆包过程,源和目标地址必须按数据传输宽度对齐
  • 支持循环的缓冲器管理
  • 每个通道都有3个事件标志(DMA半传输,DMA传输完成,DMA传输出错),这3个事件都可以成为单独的中断 
  • 外设和存储器,存储器和外设,存储器和存储器之间
  • 存储包括:FLASH,SRAM,外设的SRAM
  • 外设包括:APB1,APB2和AHB
  • 可编程的数据传输数目:最大为65536

DMA的通道

DMA1有7个通道

DMA处理

在发生一个事件后,外设向DMA控制器发送一个请求信号。DMA控制器根据通道的优先权处理请求

当DMA控制器开始访问发出请求的外设时,DMA控制器立即发送给他一个应答信号

当从DMA控制器得到应答信号时,外设立即释放它的请求,一旦释放了这个请求,DMA控制器同时撤销应答信号

每次DMA传送由3个操作完成:

  • DMA_CPARx存储的是外设的基地址,DMA_CMARx存储额是存储器的基地址,这两个要先赋值好
  • DMA_CNDTRx包含未完成操作的数目,在DMA_CNDTRx寄存器中,每完成一次发送,这个DMA_CNDTRx寄存器的值会减1

数据传输方向

DMA_CCRx寄存器

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7)

仲裁器

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7)

同样是在这个寄存器,可以配置通道的优先级

可编程的数据量

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7) 

源和目标的数据宽度一致时是最方便的

指针增量

存储器到存储器

还需要设置DMA_CCRx的MEM2MEM位

通道传输数据量

在DMA_CNDTRx寄存器中配置,虽然这是一个32的寄存器,但是只用到了低16位,所以最大数据量为2的16次方-1

 中断

通道的配置过程

1. 设置DMA_CPARx(外设地址)和DMA_CMARx(存储器地址)的值

2. 设置传输方向,通过DMA_CCRx寄存器

3. 设置传输数据量,在DMA_CNDTRx寄存器

4. 设置传输优先级,在DMA_CCRx寄存器中

5. 设置是否循环模式,外设和存储器的增量模式

6. 数据宽度,中断配置,5和6都是在DMA_CCRx寄存器中进行配置

7. 在DMA_CCRx寄存器中进行ENABLE位的配置

当传输一半的数据后,半传输标志HTIF为1,当设置了允许半传输中断位HTIE时,将产生中断请求。在传输数据结束后,传输完成标志TCIF为1,当设置了允许传输完成中断位TCIE后,将产生一个中断请求


DMA相关函数配置

DMA_Init

DMA_Cmd

 DMA_ITConfig 

DMA_SetCurrDataCounter

DMA_GetCurrDataCounter

DMA_GetFlagStatus

 DMA_ClearFlag

DMA_GetITStatus

DMA_ClearITPendingBit


常用的外设DMA使能库函数

ADC

DAC

USART

I2C

TIM 


 DMA的初始化配置

1. 使能DMA时钟

2. 初始化DMA通道参数

3. 使能DMA发送,使能外设DMA使能函数

4. 使能DMA通道,启动传输

5. 查询DMA传输状态

6. 获取或设置通道当前剩余数据量

axi dma 寄存器配置_STM32F10x系列DMA总结 STM32F10x系列DMA总结一、各个寄存器作用1)DMA_CPARx或DMA_CMARx寄存器指定外设基地址或存储器单元;2)执行一次DMA_CNDTRx寄存器的递减操作,该寄存器包含未完成的操作数目;3)每个通道的优先权可以在DMA_CCRx寄存器中设置,有4个等级;4)外设和存储器的传输数据量可以通过DMA_CCRx寄存器中的PSIZE和MSIZE位编程;5)通过设置DMA_CC... 阅读详情

相关推荐

STM32自学之SPI的DMA操作(寄存器级)

STM32自学之SPI的DMA操作(寄存器级) 一、实验目标 学会配置STM32的SPI寄存器和DMA寄存器,实现STM32的SPI1与SPI2通信功能,每次发送一字节数据,并可多次发送,如果接收的数据正确,则点亮LED灯。之后看可以利用DMA来实现什么功能~~~ 二、实验目的 加入DMA的SPI通信相对于普通SPI通信有什么好处?ST给SPI加了DMA功能出于什么目的?我觉得这是很重要的一个问题...

chao961015的博客 1万+

比较 stm32的 DMA_GetITStatus 和 DMA_GetFlagStatus

最近 小楼再研究 stm32 ,在stm32的DMA这章中被

lb5761311的专栏 1万+

DMA传输的流水线操作在STM32中的应用

本文将详细介绍DMA传输的流水线操作在STM32中的应用,并提供相应的代码示例。通过循环传输,可以使DMA在一个数据块传输完成之前开始下一个数据块的传输。根据具体的应用场景,优化DMA传输的方向,使得数据可以直接从外设到内存或从内存到外设进行传输。在DMA传输完成的中断处理函数DMA1_Channel1_IRQHandler中,我们对每个数据块进行处理,并配置下一个数据块的传输。将大块数据分割为多个较小的数据块,并在DMA传输期间逐个传输,以减小每个传输任务的负载。代码获取、问题探讨及文章转载可私信。

weixin_66608063的博客 1269

通过DMA控制USART发送数据丢包

问题:定时通过DMA发送USART数据包(一个)没有问题,当连续发送多个数据包容易丢包 解决:原程序为数据包发送完成后进入发送完成中断,在中断中将中断完成标志位清零,隔段时间发送一个数据包没有问题,但是频繁的发送多个数据包就会发生上一个还没有发送完成又发送了一个,造成丢包或者部分数据丢失,所以当频繁的发送数据包时关闭发送完成中断将while等待发送完成标志位置一并清零,避免丢包,具体写的内容详看正点原子例程 while(1) { if(DMA_G...

qq_41654474的博客 2952

在STM32中使用DMA进行SD卡读写操作的实现方法

在实际应用中,需要根据具体的需求选择合适的SPI工作模式、数据大小和时钟频率,并根据SD卡规格和性能要求进行适当的优化配置。首先,需要初始化SD卡和SPI外设,包括配置SPI的工作模式、数据大小、时钟极性和相位等参数,并初始化SD卡的相关参数。接下来,需要配置DMA传输通道,并设置DMA的传输方向、数据大小、通道、外设地址、内存地址等参数。一旦SPI、SD卡和DMA都已经配置完成,可以开始启动DMA传输来进行SD卡的读写操作。在使用DMA进行SD卡读写操作时,需要将SD卡的数据流控制与DMA通道关联。

weixin_66608063的博客 1698

STM32自学之SPI的DMA操作

在STM32微控制器中,SPI接口具备使用DMA(Direct Memory Access,直接内存访问)进行数据传输的能力,这种方式可以提高数据传输的效率和性能。然后,在SPI_DMA_Transfer函数中,使用HAL_SPI_Transmit_DMA函数启动DMA传输。在项目配置中,打开"Pinout & Configuration"选项卡,并选择SPI外设的引脚配置。在代码中,找到"main.c"文件,并在"main"函数中初始化SPI外设。接下来,我们将按照以下步骤进行SPI的DMA操作。

2301_79326616的博客 2418

STM32F407使用系统库函数DMA_GetITStatus获取中断状态的问题

程序使用DMA传输,需要使用DMA传输完成中断,程序如下: void DMA2_Stream7_IRQHandler(void) { static u16 cnt = 0 ; if(DMA_GetITStatus(DMA2_Stream7,DMA_FLAG_TCIF7)==SET) //检查DMA传输完成中断 { DMA_ClearITPendingBit(DMA2_Stream7,DMA...

weixin_42094842的博客 6642

使用DMA进行STM32的SPI口读写操作

在嵌入式系统中,SPI(Serial Peripheral Interface)是一种常见的串行通信接口,用于连接主控制器与外部设备,如传感器、存储器和其他外设。为了提高SPI的传输效率,可以使用DMA(Direct Memory Access)来实现SPI口的读写操作。通过配置STM32的SPI口和DMA控制器,我们可以使用DMA实现高效的SPI口读写操作。需要注意的是,在使用DMA进行SPI读写操作时,务必确保数据缓冲区的有效性和数据长度的正确性,以避免数据错误或溢出。函数等待DMA传输完成,并使用。

ElBackend的博客 1379

STM32中在操作DMA时触发中断

DMA中断

Ssqzw的博客 2616

STM32双ADC模式与DMA操作深入应用

在微控制器领域,双模数转换器(ADC)模式指的是使用两个独立的ADC来同时进行数据采集。这对于需要高吞吐量数据采集的应用场景特别有用。通过在STM32微控制器上实现双ADC模式,开发者可以更好地控制数据采集的时间和精度,提高系统的整体性能。“RegSimul_DualMode”是一个基于STM32微控制器的示例程序,旨在展示如何配置和使用双ADC模式进行数据采集。

weixin_31641077的博客 2005

CentOS7 编译升级GCC至9.3.0

1)下载GCC9.2.0源码并解压 从GCC官方FTP下载地址可以看到GCC最新版本为9.3.0。由于官网下载速度慢,实际上用清华大学的镜像站进行下载,代码如下: wget -c /opt/tmp/ https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz #考虑到安装失败的可能性,创建一个临时文件夹来安装GCC...

haha123486的博客 1万+

STM32的DMA的寄存器操作

DMA配置过程中一般会分位外设和内存或者说是地址和源两个方面进行配置,一般来说地址和源的配置一个相同,才能让数据更好的相匹配,对于地址和源的配置一般有数据宽度,地址增量模式,外设地址,内存地址,除了这些对地址和源的配置外,还有通道优先级,循环模式,数据传输方向,还有一些中断位的开启。4、MSIZE,PSIZE:内存数据宽度位和外设数据宽度位,一般分为字节,半字和字三种模式,一般配置时尽量把外设数据宽度和内存数据的宽度相一致,这样对数据的处理会比较简单,当然如无法使得外设和内存数据对齐也会有方法解决。

2402_87803572的博客 1051

【STM32F042】使用NTC热敏电阻实现温度测量

1.NTC介绍 NTC是负温度系数的简写,全称是Negative temperature coefficient.意思是随着温度的升高,电阻值呈现下降趋势。常用作温度传感器。这里有一个式子表示负温度系数的电阻值: RT=R0*exp(B (1/T-1/T0)) RT为周围温度为T (K) 时的电阻值,R0是周围温度为T0(K) 时的电阻值,注意这里的温度是开...

BadBoyHolly的博客 3万+

STM32串口DMA传输效率优化操作指南

实战中发现,合理配置串口DMA双缓冲模式、关闭冗余中断并调整DMA优先级,可显著提升数据吞吐量与实时性。尤其在高波特率连续收发场景下,串口DMA的零等待搬运能力大幅降低CPU占用,让嵌入式系统更稳更快。

weixin_42230607的博客 674

JSP期末考试复习习题及答案

以下习题是对于平时课堂小测的整理,如有错误敬请指正! 欢迎一起交流~ 预祝各位小伙伴们考试顺利! Test1 一. 单选题 – 1.(单选题)当用户请求jsp页面时,JSP引擎就会执行该页面的字节码文件响应客户的请求,执行字节码文件的结果是() A. 发送一个JSP源文件到客户端 B. 发送一个Java文件到客户端 C. 发送一个HTML页面到客户端 D. 什么都不做 – 2.(单选题)下列动态网页和静态网页的根本区别描述错误的是( D) A. 静态网页服务器端返回的HTML文件是事先存储好的 B. 动.

技术小白 2万+

VsCode安装和配置c/c++环境(超完整,小白专用)

1. vsCode配置C/C++环境 1. vsCode下载和安装 1. 下载Microsoft vsCode [vsCode在这里插入图片描述官网下载: https://code.visualstudio.com/ 2. 安装vsCode 3. 下载中文插件 我这边已经下载过,刚卸载但是没有重启编译器,所以界面显示了中文 2. MinGW编译器下载和配置 1. 下载MinGW 在线安装——下载MinGW-W64-install.exe(速度慢) 下载压缩包——×86_64-posix-

黄化的多多 60万+

STM32CubeHAL库操作系统串口DMA收发配置:助力STM32开发效率提升

STM32CubeHAL库操作系统串口DMA收发配置:助力STM32开发效率提升 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代嵌入式系统开发中,STM32Cube HAL库与操作系统freertos的集成使用,已经成为提高项目开发效率、降低出错率的重要手段。本项目——STM32Cube HAL库操作系统串口DMA收发配置,旨在提供一套完善的STM32Cube工...

gitblog_06765的博客 751

轻量级替代方案:用AIFlowy + Ollama在本地快速搭建一个可用的AI智能体平台

本文介绍了如何使用AIFlowy和Ollama在本地快速搭建轻量级AI智能体平台,涵盖从环境准备到智能体集成的全流程。通过简化部署步骤和优化性能,15分钟内即可完成搭建,适用于原型验证和小团队协作,显著提升开发效率。

weixin_29207533的博客 214

STM32f7 DMA2D驱动(包含自己定义的GRAM相关操作)

DMA2D可以加快图像填充,并且支持像素格式转换。 /************************************************************************************************************* * 文件名 : dma2d.c * 功能 : STM32F7 DMA2D驱动 * 作者 : cp1300@...

与其用泪水悔恨昨天,不如用汗水拼搏今天 1510

【乐鑫】唤醒词修改方法

乐鑫科技的语音识别模块(如ESP-SR)支持自定义唤醒词,但需通过官方工具链完成。

以实战经验介绍行业知识 815

CSDN 2

2

qq_62260432的博客 5229

【STM32学习3】DMA基础操作

介绍了DMA基础概念以及存储器到存储器、存储器到外设两种DMA使用方式(HAL库、轮询使用)

junfoot的博客 2302

科研绘图系列:R语言绘制宏基因组分析的可视化图形(network & barplot & heatmap)

科研绘图系列:R语言多图形组合(network & barplot & heatmap)

专注生信领域 635

stm32 DMA数据搬运 [操作寄存器+库函数](转)

源:stm32 DMA数据搬运 [操作寄存器+库函数] DMA(Direct Memory Access)常译为“存储器直接存取”。早在Intel的8086平台上就有了DMA应用了。 一个完整的微控制器通常由CPU、存储器和外设等组件构成。这些组件一般在结构和功能上都是独立的,而各个组件的协调和交互就由CPU完成。如此一来,CPU作为整个芯片的核心,其处理的...

weixin_30530939的博客 321

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

STM32 DMA配置过程库函数操作

DMA全称Direct Memory Access(直接存储器访问)。主要功能就是将一个地址空间复制到另一个地址空间,作用就是为CPU减负 DMA配置过程 1.使能DMA时钟 2.初始化DMA通道参数 3.使能串口DMA发送,串口DMA使能函数 4.使能DMA1通道,启动传输 5.查询DMA传输状态 6.获取/设置通道当前剩余数据量 //DMA_CHx:DMA通道CHx //cpar:外设地址 //cmar:存储器地址 //cndtr:数据传输量 void MYDMA_Config(DMA_Channel_

qq_45948070的博客 1395

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

STM32学习笔记之SPI_DMA寄存器级操作

一、实验目标学会配置STM32的SPI寄存器和DMA寄存器,实现STM32的SPI1与SPI2通信功能,每次发送一字节数据,并可多次发送,如果接收的数据正确,则点亮LED灯。二、实验目的加入DMA的SPI通信相对于普通SPI通信有什么好处?ST给SPI加了DMA功能出于什么目的?我觉得这是很重要的一个问题,一直边学习边想。以下是我的看法:减少CPU负荷?我想这应该是DMA最主...

weixin_34336526的博客 1021
上一篇: STM32实现SPI通信2
下一篇: 常见的Altium操作
CodeForCoffee
博客等级 码龄12年 2万+粉丝 285原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值