首页 > 其他分享 >STM32中的DMA:解锁高效数据传输的秘密武器(内附实例)

STM32中的DMA:解锁高效数据传输的秘密武器(内附实例)

时间:2024-07-08 15:27:21浏览次数:16  
标签:DMA 内附 存储器 STM32 ADC 数据传输 CPU 外设

目录

引言

理解DMA:数据的高效搬运工

DMA的主要特性

多优先级请求

事件标志

数据对齐

多样化的数据传输路径

广泛的数据源与目标

最大数据长度

DMA寄存器详解

增量与循环模式

DMA中断机制

​编辑

小实验:DMA-ADC串口发送


引言

在现代嵌入式系统设计中,数据传输速度和效率是关键的性能指标。传统的数据传输方法往往需要CPU的频繁干预,这不仅消耗了CPU的宝贵资源,而且限制了系统的整体性能。为了解决这一问题,STM32微控制器集成了DMA控制器,它能够在无需CPU介入的情况下,实现数据在不同存储器区域或存储器与外设之间的高速传输。

理解DMA:数据的高效搬运工

DMA,全称为Direct Memory Access(直接存储器访问),是一种硬件机制,通过为RAM与I/O设备开辟一条直接传送数据的通道,避免了CPU的直接控制和中断处理的开销,显著提高了CPU的效率和系统性能。

DMA的主要特性
多优先级请求
  • 同一个DMA模块可以处理多个优先级请求:很高、高、中等、低。
事件标志
  • 每个通道配备三个事件标志:DMA半传输完成、DMA传输完成、DMA传输出错。
数据对齐
  • 数据源、目标源和数据传输宽度可以按字节(8位)、半字(16位)、全字(32位)对齐。
多样化的数据传输路径
  • 支持存储器<->存储器、外设<->存储器、外设<->外设的数据传输。
广泛的数据源与目标
  • 闪存(flash)、SRAM、APB、AHB、外设均可作为源或目标。
最大数据长度
  • 搬移数据的最大长度为65535字节。
DMA寄存器详解
  • DMA_CPARx:设置外设地址的寄存器。
  • DMA_CMARx:设置存储器地址的寄存器。
  • DMA_CCRx:配置数据传输方向和其他控制选项。
  • DMA_CNDTRx:设置传输的数据量。

 

增量与循环模式
  • 增量模式:在外设搬移到存储器时,自动增加存储器地址,防止数据覆盖。
  • 循环模式:在一组数据传输完成后,自动恢复初始配置,实现循环数据传输。
DMA中断机制
  • 每个DMA通道在DMA传输过半、传输完成和传输出错时,可产生中断,通过配置寄存器位来启用这些中断,增强了应用的灵活性。

小实验:DMA-ADC串口发送

实验要求:使用DMA发送通过串口打印ADC采集的光照值

从外设———》内存

以下以CubeMax为例:

什么时候搬移?ADC转换完成之后,再用DMA搬移

怎么用?

启动:HAL库手册(86页)

HAL_StatusTypeDef HAL_ADC_Start_DMA (ADC_HandleTypeDef * hadc, uint32_t * pData, uint32_t Length)

功能:启动ADC开始转换,并通过DMA搬移转换结果。

参数:ADC_HandleTypeDef * hadc 句柄

uint32_t * pData 数据存放地址

uint32_t Length 数据长度

标签:DMA,内附,存储器,STM32,ADC,数据传输,CPU,外设
From: https://blog.csdn.net/LKHzzzzz/article/details/140269859

相关文章

  • 基于STM32设计的智能台灯(HC05蓝牙控制)179
    基于STM32设计的智能台灯(HC05蓝牙控制)(179)文章目录一、前言1.1项目介绍【1】开发背景【2】项目实现的功能【3】项目硬件模块组成1.2设计思路【1】整体设计思路【2】整体构架1.3项目开发背景【1】选题的意义【2】可行性分析【3】参考......
  • stm32串口接受定长和不定长数据的两种中断方式
    stm32串口有两种中断方式1.字节中断(定长数据接受)接收指定字节数的数据后产生中断:HAL_UART_Receive_IT(&huart3,rxBuffer,21);注意这里仍然是接受一个字节进入一次IRQ中断函数,这里指定的字节数指的是接受指定字节数量后进入一次回调函数,由于IRQ函数会关闭中断,如需重复接受定......
  • STM32标准库函数功能简介————GPIO篇
    1.void GPIO_DeInit (GPIO_TypeDef*GPIOx);函数解释:将指定的GPIO端口恢复到默认设置。2.voidGPIO_AFIODeInit(void);函数解释:将外设映射设置恢复为默认状态,以重新初始化外设映射配置。3.voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);函数......
  • STM32简介
    STM32简介一、单片机单片机(MicrocontrollerUnit,MCU)是一种集成电路芯片,它将微处理器(CPU)、存储器(如RAM和ROM)、输入/输出接口(I/O)、定时器、中断系统、通讯接口等电脑常用硬件功能集成在单一的硅片上,形成一个微型的计算机系统。单片机的任务是采集信息(依靠传感器)、处理信息(依......
  • Linux驱动之利用STM32、设备树、pwm子系统实现风扇的分级调控
    Linux驱动之利用STM32、设备树、pwm子系统实现风扇的分级调控系统:Linux5.10.61开发板:STM32mp157a硬件:风扇一、首先我们需要对PWM和定时器(TIM)的联系简单的做一下了解,具体详细的PWM原理可见PWM原理PWM频率与占空比详解。​PWM(脉宽调制)和TIM(定时器)在嵌入式系统中有着......
  • STM32第十七课:连接云平台进行数据传输
    目录需求一、云平台项目创建二、代码编写1.导入MQTT包2.连接阿里云3.发布数据三、关键代码总结需求1.通过生活物联网平台设计一个空气质量检测仪app。2.连接阿里云平台将硬件数据传输到云端,使手机端能够实时收到。一、云平台项目创建先进入阿里云生活服务平台......
  • stm32串口 环形缓冲区 代码
    voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart){ //printf("ITIN\r\n");// printf("%d\r\n",HAL_GetTick()); //置零设定电流值PID时间if(huart->Instance==USART3){ //将数据放入缓冲区 circular_buffer.buffe......
  • STM32学习——输出比较和输入捕获
    目录一、输出比较1.什么是输出比较2.PWM波的基本参数3.输出比较通道框图4.输出比较模式5.基本结构/步骤6.Keil5代码二、输入捕获1.什么是输入捕获2.输入捕获通道测量频率的方法3.输入捕获结构框图4.主从触发模式5.输入捕获和PWMI模式框图6.Keil5代码一、输出......
  • 带支付等功能的二级域名分发系统美化版源码+内附搭建教程
    介绍:今天给大家搭建一个二级域名分发系统二开版(代码改了下,勿喷)这个程序是快乐域名的,拿去用就可以了!星光云主机:www.aa1.asia环境:php7.1以上现在我们来打开面板1.创建网站,上传源码至网站根目录,解压、解压完成后直接打开域名进行安装2.安装地址:域名/install/安装步骤下一......
  • 【STM32】RTT-Studio中HAL库开发教程二:RS485-DMA串行通信
    文章目录一、前期准备二、实验步骤1.使用STM32CubeMX配置初始化代码2.常用函数解析3.相关程序4.实验效果三、参考文章一、前期准备开发环境:基于RT-ThreadStudio软件的开发辅助软件:STM32CubeMX初始化代码生成调试软件:串口助手使用芯片:STM32F407VET6硬件环......