有关DMA的一些个人理解


简单记录一下stm32f103zet6中DMA开发过程的一些理解

目录

1. 中断读取

2. DMA读取

3. 结尾总结


        实际上DMA并不是一个存储器,而是一个控制器,控制两个数据存储区域之间的数据传输,这个“数据存储区”可以是Flash或DRAM中的一大片存储区,也可以是SRAM中的某个存储变量,也可以是外设中的某个数据寄存器,具体是什么可以通过配置DMA的源地址和目标地址来确定。

        比如在ADC数据采集方案中,可以采用中断或DMA的方式读取采集到的数据。ADC在采集过程中,会在一个转换时间后(一般是数个时钟周期)将采集到的一次模拟数据转换成离散数据存到数据寄存器中,即ADCx->DR,随后有两种方法读取这个DR,分别是:

1. 中断读取

        在经过一次转换时间后(采样时间+n个时钟周期),采集到的数据将会存入ADC的数据寄存器DR中,并同时发生转换完成中断,此时会进入中断服务函数,将DR的值赋给main.c定义好的extern变量,完成ADC数据读取;


2. DMA读取

        在经过一次转换时间后(采样时间+n个时钟周期),采集到的数据将会存入ADC的数据寄存器DR中,我们将DMA的源地址配置为DR的地址,将目的地址配置为main.c中的extern变量的地址(这个是存在SRAM中的),将DMA配置为循环模式,DMA控制器会自动将源地址数据传给目标地址,完成ADC数据读取,应当注意,循环模式是存在读取速度的,若DMA循环读取速率低于ADC转换速率,可能会导致有些ADC的转换值未被读取。

3. 结尾总结

        注意在ADC采集中,DMA需要配置为循环模式,以下是普通模式和循环模式的区别:

3.1 Circle(循环)模式

        在Circle模式下,DMA传输可以循环执行,即在完成一次传输后会自动重新开始下一次传输,形成一个循环。这种模式适用于需要连续、循环传输数据的场景。在循环模式下,DMA传输会持续不断地从源地址读取数据,并将数据写入目标地址,直到达到设定的传输长度或触发停止条件。
循环模式下的DMA传输通常用于周期性的数据传输,如音频、视频流等连续数据流的传输。

3.2 Normal(普通)模式

        在Normal模式下,DMA传输只会执行一次,传输完毕后就会停止。这种模式适用于单次数据传输的场景。在普通模式下,DMA传输会从源地址读取数据,并将数据写入目标地址,直到达到设定的传输长度或触发停止条件,然后传输停止。
普通模式下的DMA传输适用于需要一次性传输数据的情况,如初始化数据、配置信息等。

        需要注意的是,循环模式和普通模式都可以设置传输长度、源地址和目标地址等参数,区别主要在于传输的执行方式和传输结束后是否重新开始。

        在使用DMA时,需要根据具体的应用需求选择适合的模式。如果需要连续、循环传输数据,可以选择循环模式;如果只需进行单次传输,可以选择普通模式。同时,还需要注意设置适当的传输长度和停止条件,以确保传输的准确性和可靠性。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NJUST_ZHChen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值