千家信息网

如何进行stm32 DMA使用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,今天就跟大家聊聊有关如何进行stm32 DMA使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。stm32 DMA外设简介:DMA (Dire
千家信息网最后更新 2026年11月03日如何进行stm32 DMA使用

今天就跟大家聊聊有关如何进行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 0x40013804uint8_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使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

外设 内存 数据 地址 通道 寄存器 变量 就是 传输 配置 内容 功能 不同 之间 单位 只有 基地 基地址 存取 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 中国互联网科技工作委员会毛军 互联网科技巨头监管 中国互联网科技股 北京互联网科技有限公司 互联网的科技创新 互联网科技股票 互联网科技ppt模板 哈尔滨秒房互联网科技有限公司 互联网科技产品 中盈科技互联网信息有限公司 厦门比较好的科技互联网公司 浙南科技城互联网大厦建设工程 工业互联网等科技实现智能化赋能 互联网金融科技元年 东营紫格互联网科技 珠海东科互联网科技有限公司 陕西九四连强互联网科技有限公司 中国科技和美国互联网 互联网科技创新创业项目 广州紫鲸互联网科技有限公司 平安科技 互联网 菲比寻常互联网科技 猫创互联网科技 科技大学互联网专业好不好 湖南诚度互联网科技有限公司 崇明区互联网教育科技诚信经营 语蝶互联网科技有限公司 互联网科技的全部知识 科技和互联网行业的特点
0