STM32_DMA

STM32——DMA

一.基本介绍

DMA:全称Direct Memory Access,即直接存储器访问。将数据从一个地址空间复制到另一个地址空间。

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

二.DMA框架

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

  1. DMA通道:不同外设向DMA的不同通道发送请求DMA1有7个通道,DMA2有5个通道DMA2仅存在大容量产品和互联型产品

  1. DMA优先级:多个DMA通道同时发来请求时,就有先后响应处理的顺序问题,这个由仲裁器管理(优先级管理也分软件阶段和硬件阶段)

2.1DMA处理过程

DMA通道:

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

2.2DMA优先级

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

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

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

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

三.DMA的HAL库

步骤

操作

函数

1

使能DMA时钟

__HAL_RCC_DMA1_CLK_ENABLE

2

初始化DMA

HAL_DMA_Init函数初始化DMA相关参数__HAL_LINKDMA函数连接DMA和外设

3

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

HAL_UART_Transmit_DMA

4

查询DMA传输状态

HAL_DMA_GET_FLAG 查询通道传输状态HAL_DMA_GET_COUNTER 获取当前传输剩余数据量

5

DMA中断使用

HAL_NVIC_Enable IRQHAL_NVIC_SetPriority编写中断服务函数 xxx_IRQHandler

驱动函数

关联寄存器

功能描述

__HAL_RCC_DMAx_CLK_ENABLE(…)

RCC_AHBENR

使能DMAx时钟

HAL_DMA_Init**(…)**

DMA_CCR

初始化DMA

HAL_DMA_Start_IT**(…)**

DMA_CCR/CPAR/CMAR/CNDTR

开始DMA传输

__HAL_LINKDMA(…)

用来连接DMA和外设句柄

HAL_UART_Transmit_DMA**(…)**

CCR/CPAR/CMAR/CNDTR/USART_CR3

使能DMA发送,启动传输

__HAL_DMA_GET_FLAG(…)

DMA_ISR

查询DMA传输通道的状态

__HAL_DMA_ENABLE(…)

DMA_CCR(EN)

使能DMA外设

__HAL_DMA_DISABLE(…)

DMA_CCR(EN)

失能DMA外设

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值