找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3045|回复: 0
收起左侧

STM32学习历程之DMA介绍

[复制链接]
ID:82083 发表于 2015-6-9 02:03 | 显示全部楼层 |阅读模式

DMA控制器介绍

DMA控制器提供7个数据通道的访问。由于外设实现了向存储器的映射,因此数据对来自或发向外设的数据传输,也可以像内存之间的数据传输一样管理。

  • 1.DMA寄存器结构

DMA寄存器结构,DMA_Channel_TypeDef和DMA_TypeDef在文件“stm32f10x_map.h”定义如下:

typedef struct

{

  vu32CCR;

  vu32CNDTR;

  vu32CPAR;

  vu32CMAR;

}DMA_Channel_TypeDef;

typedef struct

{

  vu32ISR;

  vu32IFCR;

} DMA_TypeDef;

DMA寄存器介绍:

ISR: DMA中断状态寄存器

IFCR: DMA中断标志位清除寄存器

CCRx: DMA通道x设置寄存器

CNDTRx:DMA通道x待传输数据数目寄存器

CPARx: DMA通道x外设地址寄存器

CMARx: DMA通道x内存地址寄存器

  • 2.DMA库函数

2.1 函数DMA_DeInit

函数原形 :voidDMA_DeInit(DMA_Channel_TypeDef* DMA_Channelx)

函数功能:将DMA的通道x寄存器重设为缺省值

函数参数:DMA_Channelx中x取值为1-7来选择通道

2.2 函数DMA_Init

函数原形 :voidDMA_Init(DMA_Channel_TypeDef* DMA_Channelx, DMA_InitTypeDef*DMA_InitStruct)

函数功能:根据DMA_InitStruct中指定的参数初始化DMA的通道x寄存器

函数参数:DMA_Channelx中x取值为1-7来选择通道

          DMA_InitStruct:指向结构DMA_InitTypeDef的指针,包含了DMA通道x的配置信息

参数介绍:DMA_PeripheralBaseAddr  该参数用以定义DMA外设基地址

         DMA_MemoryBaseAddr   该参数用以定义DMA内存基地址

         DMA_DIR  DMA_DIR规定了外设是作为数据传输的目的地还是来源

          DMA_BufferSize  用以定义指定DMA通道的DMA缓存的大小,单位为数据单位

         DMA_PeripheralInc  用来设定外设地址寄存器递增与否

         DMA_MemoryInc  用来设定内存地址寄存器递增与否

         DMA_PeripheralDataSize  设定了外设数据宽度

         DMA_MemoryDataSize  设定了外设数据宽度

         DMA_Mode   设置了工作模式

         DMA_Priority   设定DMA通道x的软件优先级

         DMA_M2M   使能DMA通道的内存到内存传输

2.3 函数DMA_Cmd

函数原形 :voidDMA_Cmd(DMA_Channel_TypeDef* DMA_Channelx, FunctionalStateNewState)

函数功能 :使能或者失能指定的通道x

参数描述 :DMAChannelx:x可以是1,2…,或者7来选择DMA通道x

          NewState:DMA通道x的新状态。这个参数可以取:ENABLE或者DISABLE

2.4 函数DMA_ITConfig

函数原形 :voidDMA_ITConfig(DMA_Channel_TypeDef* DMA_Channelx, u32 DMA_IT,

                            FunctionalState NewState)

函数功能 :使能或者失能指定的通道x中断

函数参数 :DMAChannelx:x可以是1,2…,或者7来选择DMA通道x

           DMA_IT:待使能或者失能的DMA中断源,使用操作符“|”可以同时选中多个DMA中断源

2.5 函数DMA_GetCurrDataCounte

函数原形 :u16DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMA_Channelx)

函数功能:返回当前DMA通道x剩余的待传输数据数目

函数参数 :DMAChannelx:x可以是1,2…,或者7来选择DMA通道x

函数返回:当前DMA通道x剩余的待传输数据数目

2.6 函数DMA_GetFlagStatus

函数原形 :FlagStatusDMA_GetFlagStatus(u32 DMA_FLAG)

函数功能:检查指定的DMA通道x标志位设置与否

函数参数:DMA_FLAG:待检查的DMA标志位

函数返回:DMA_FLAG的新状态(SET或者RESET)

2.7 函数DMA_ClearFlag

函数原形 :voidDMA_ClearFlag(u32 DMA_FLAG)

函数功能 :清除DMA通道x待处理标志位

函数参数:DMA_FLAG:待清除的DMA标志位,使用操作符“|”可以同时选中多个DMA标志位

2.8 函数DMA_GetITStatus

函数原形 :ITStatusDMA_GetITStatus(u32 DMA_IT)

函数功能:检查指定的DMA通道x中断发生与否

函数参数:DMA_IT:待检查的DMA中断源

函数返回:DMA_IT的新状态(SET或者RESET)

2.9 函数DMA_ClearITPendingBit

函数原形 :voidDMA_ClearITPendingBit(u32 DMA_IT)

函数功能 :清除DMA通道x中断待处理标志位

函数参数:DMA_IT:待清除的DMA中断待处理标志位


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表