浅学DMA

直接存储器访问(Direct Memory Access,DMA)是实现存储器与外设、存储器与存储器之间高效数据传输的方法。

一、DMA功能概述

1、1DMA简介

(1)DMA控制器

(2)DMA流,进行DMA数据传输的链路。一个DMA控制器有8个DMA流,每个DMA流有独立的4级32位FIFO缓冲区。

(3)DMA请求。外设或寄存器发起的DMA传输需求。每个DMA流最多有8个可选地DMA请求。

(4)仲裁器,提供基于优先级别的DMA请求管理。流编号小优先级大。

1、2DMA传输特性

(1)外设到存储器,ADC采集的数据存入内存的缓冲区

(2)存储器到外设,通过UART接口发出内存的数据

(3)存储器到存储器,将外部SRAM中的数据复制到内存中

1、3DMA工作模式

(1)正常模式,传输完一个缓冲区的数据后就停止了

(2)循环模式,接收满一个缓冲区的数据后,产生DMA传输完成事件中断。

当DMA传输的源和目标的数据宽度不同时,FIFO传输模式更好。

二、DMA的程序

初始化要设置:DMA流和通道、传输方向、工作模式(循环或正常)、源和目标数据宽度、DMA流优先级别等参数;

UART使用DMA方式传输数据时,UART的全局中断要打开,但是UART的接收完成和发送完成中断事件源可以关闭。

UART的DMA传输函数

HAL_UART_Transmit_DMA()

HAL_UART_Receive_DAM()

cubemx设置

在USART1增加DMA设置

DMA Request:外设或存储器的DMA请求

Stream:DMA流。

Direction:传输方向

Priority:优先级别

USART1和两个DMA的中断抢占优先级都设置为1,在他们的中断处理函数里会用到函数HAL_Delay();

当UART以DMA方式发送或接收数据时,DMA流的传输完成事件中断的回调函数就是UART的回调函数;

发送使用正常模式,接收使用循环模式,串口输入连续监测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值