今天就跟大家聊聊有关如何进行stm32 DMA使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
stm32 DMA外设简介:
DMA (Direct Memory Access),直接存储器存取,是一种可以大大减轻CPU 工作量的数据存取方式,因而被广泛地使用。在硬件系统中,主要由 CPU(内核)、外设、内存(SRAM)、总线等结构组成,数据经常要在内存与外设之间转移,或从外设 A转移到外设B。DMA可以不同过CPU直接将数据由外设传输到内存或由内存到外设。其实具体表现就是在外设的寄存器和内存变量之间建立一个通道,使他们的数据更新同步,就像是同一个变量一样。
stm32 DMA外设也有对应的传输完成中断。
下面以在USART1的数据寄存器到内存变量建立一个单向DMA通道为例,说明一下DMA的用法啊。USART1->到变量。
USART1配置就是一般配置,只有一点要注意:就是一定要使能USART1外设的DMA功能。
USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);//一定要记得使能对应外设的DMA功能,因为这个纠结了半天。。。。
DMA配置:
define USART1_DR_Base 0x40013804
uint8_t TxBuff;
void DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //开启DMA时钟
/*设置DMA源:内存地址&串口数据寄存器地址*/
DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base;
/*内存地址(要传输的变量的指针)*/
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)(&TxBuff);
/*方向:从外设到内存*/
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
/*传输大小DMA_BufferSize=SENDBUFF_SIZE*/
DMA_InitStructure.DMA_BufferSize = 1;
/*外设地址不增*/
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
/*内存地址不增*/
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
/*外设数据单位*/
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
/*内存数据单位 8bit*/
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
/*DMA模式,循环*/
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular ;
/*优先级:中*/
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
/*禁止内存到内存的传输 */
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
/*配置DMA1的5通道*/
DMA_Init(DMA1_Channel5, &DMA_InitStructure);
DMA_Cmd (DMA1_Channel5,ENABLE); //使能DMA
USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);//记得一定要使能对应外设的DMA功能,因为这个搞了半天。。。。
}
DMA的配置还是比较简单的,就外设寄存器地址如何找到呢,也就是代码中的那个宏。在数据手册中找呗。
在这里可以找寄存器的偏移地址。然后找基地址,在PDF中搜索memory map,或找到对应章节。
这个就是寄存器的基地址了,然后寄存器地址就是0x40013800+0x04=0x40013804
stm32 有两个dma共12个通达dma1有7个,dma2有5个。
下面是dma1的部分通道图
从这个图可见即使是同一个外设对应的DMA通道也可能不同,所以选择dma通道是要注意,各个通道都是专用的,只有对应的外设才能使用对应的通道。
看完上述内容,你们对如何进行stm32 DMA使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/2255341/blog/502657