一篇文章看懂STM32-DMA直接存储器存取(附上练习小项目详细注释)

Note

DMA工作的3个条件:①Size传输计数器>0;②触发源有触发信号;③DMA使能

//需要用到的库函数参数介绍

//外设数据宽度
DMA_PeripheralDataSize
//DMA_PeripheralDataSize_Byte            字节-8位,一次传输uint8_t的数据
//DMA_PeripheralDataSize_HalfWord        半字-16位,一次传输uint16_t的数据
//DMA_PeripheralDataSize_Word            字-32位,一次传输uint32_t的数据

//选择硬/软件触发
DMA_M2M
//DMA_M2M_Enable          软件触发-一般适用于存储器到存储器的转运
//DMA_M2M_Disable         硬件触发-触发源可以选择ADC、串口、定时器等,一般都是与外设之间的转运

//DMA使能
DMA_Cmd                
//当传输计数器=0,且没有自动重装时,这是无论是否触发,DMA都不会继续再进行转运
//此时需要DMA_Cmd使能给DISABLE关闭DMA,再为传输计数器写入一个>0的数
//再DMA_Cmd使能给ENABLE开启DMA,开始工作

//DMA设置当前数据寄存器(给传输计数器写数据)DMA_Cmd使能给DISABLE关闭DMA时才能使用
void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber); 
//DMA获取当前数据寄存器(返回传输计数器的值)
uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx);

  1. 1.DMA介绍

1)DMA简介

  • DMA(Direct Memory Access)直接存储器存取

  • DMA可以提供外设和存储器(硬件触发)或者存储器和存储器(软件触发)之间的高速数据传输,无须CPU干预,节省了CPU的资源

  • 12个独立可配置的通道:DMA1(7个通道),DMA2(5个通道)

  • 每个通道都支持软件触发和特定的硬件触发

  • STM32F103C8T6DMA资源:DMA1(7个通道)

2)存储器映像

3)DMA框图

4)DMA基本框图

5)DMA请求

6)数据宽度与对齐

7)数据转运+DMA

  • 将DataA转到DataB,外设地址给DataA数组地址,存储器地址给DataB的首地址

  • 宽度按数组长度8位字节传输,两地址都自增,传输计数器给7,无需自动重装,使用软件触发

  • 最后调用DMA_Cmd( )函数启动DMA

8)ADC扫描模式+DMA

  • 外设地址给ADC_DR地址,存储器地址在SRAM中定一个数组ADValue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值