千家信息网

如何进行stm32 DMA使用

发表于:2024-09-25 作者:千家信息网编辑
千家信息网最后更新 2024年09月25日,今天就跟大家聊聊有关如何进行stm32 DMA使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。stm32 DMA外设简介:DMA (Dire
千家信息网最后更新 2024年09月25日如何进行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安全错误 数据库的锁怎样保障安全 删除服务器命令大全 编程网络安全和运维级别 cdh数据库配置文件 手机简笔画网络安全手抄报 黄石管友软件开发有限公司 防范网络安全人人有责 华为服务器在电信 幼儿网络安全教育教案中班 云霄县网络技术工作室 济宁量化积分管理软件开发 中行西安软件开发中心校招 懂点网络技术做什么生意 软件开发服务器启动 数据库一会儿连上一会儿连不上 网络安全法第六章心得体会 联机游戏需要的服务器 奉贤区推广网络技术供应商家 学习计算机网络技术感受 服务器怎么设置全局管理 向服务器提交数据 高速交警网络安全管理 一个数据库联3个表查询 三级网络技术有app吗 餐饮服务管理系统数据库代码 手机访问硬盘服务器未找到插件 精英网络技术咨询指导 机房的网络安全选择题 服务器交换机如何组网 常用的服务器的备份方式有什么 ps服务器安装不了
0