DMA通道一览
DMA1通道
DMA2通道
DMA内容详解
DMA的定义
直接存储器存取(Direct Memory
Access,DMA)是计算机科学中的一种内存访问技术。它允许某些电脑内部的硬体子系统(电脑外设),可以独立地直接读写系统存储器,而不需绕道
CPU。在同等程度的CPU负担下,DMA是一种快速的数据传送方式。它允许不同速度的硬件装置来沟通,而不需要依于 CPU的大量中断请求。
DMA有什么用?
直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。
有多少个DMA资源?
有两个DMA控制器,DMA1有7个通道,DMA2有5个通道。
数据从什么地方送到什么地方?
1.外设到SRAM(I2C/UART等获取数据并送入SRAM);
2.SRAM的两个区域之间;
3.外设到外设(ADC读取数据后送到TIM1控制其产生不同的PWM占空比);
4.SRAM到外设(SRAM中预先保存的数据送入DAC产生各种波形);
DMA可以传递多少数据?
传统的DMA的概念是用于大批量数据的传输,但是我理解,在STM32中,它的概念被扩展了,也许更多的时候快速是其应用的重点。数据可以从1~65535个。
DMA在stm32中的配置
使用DMA需配置的重要参数:
*1、源地址和目的地址;
2、传输数据个数;
3、传输完成中断(可选);
4、传输方向
DMA的各通道配置 //这里的传输形式是固定的,这点要根据不同的情况来修改
从存储器->外设模式/8位数据宽度/存储器增量模式
选择通道DMA1_Channel5为接收通道, DMA1_Channel4 为发送通道
外设地址 (uint32_t)&USART1->DR 串口1的地址
发送内存的地址 (uint32_t)SendBuff
发送模式DMA_DIR_PeripheralDST,接收模式 DMA_DIR_PeripheralSRC //数据大小
缓存的容量SEND_BUF_SIZE
void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,
u32 PeripheralAddr,
u32 MemoryAddr,
u32 TranDir,
u16 BufferSize)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1|RCC_AHBPeriph_DMA2, ENABLE); //使能DMA传输
DMA_DeInit(DMA_CHx); //将DMA的通道1寄存器重设为缺省值
DMA1_MEM_LEN=BufferSize;
DMA_InitStructure.DMA_PeripheralBaseAddr = PeripheralAddr; //DMA外设基地址
DMA_InitStructure.DMA_MemoryBaseAddr = MemoryAddr; //DMA内存基地址
DMA_InitStructure.DMA_DIR = TranDir; //数据传输方向,从内存读取发送到外设
DMA_InitStructure.DMA_BufferSize = BufferSize; //DMA通道的DMA缓存的大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址寄存器不变
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址寄存器递增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //数据宽度为8位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //数据宽度为8位
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //工作在正常缓存模式
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA通道 x拥有中优先级
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA通道x没有设置为内存到内存传输
DMA_Init(DMA_CHx, &DMA_InitStructure); //根据DMA_InitStruct中指定的参数初始化DMA的通道USART1_Tx_DMA_Channel所标识的寄存器
}
以上程序仅仅是打开DMA通道,如果要使用DMA,还要针对所用外设进行相对应的配置。