DMA的原理
DMA(Direct Memory Access),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从适配卡到内存,从内存到适配卡或从一段内存到另一段内存。
DMA的好处:
在DMA传送开始的短暂时间内,基本上有两个处理器为它工作,一个执行程序代码,一个传送数据。利用DMA传送数据的另一个好处是,数据直接在源地址和目的地址之间传送,不需要中间媒介。如果通过CPU把一个字节从适配卡传送至内存,需要两步操作。首先,CPU把这个字节从适配卡读到内部寄存器中,然后再从寄存器传送到内存的适当地址。DMA控制器将这些操作简化为一步,它操作总线上的控制信号,使写字节一次完成。这样大大提高了计算机运行速度和工作效率。
经验和总结:昨天我在调试多路AD(模拟转换成数字)利用的就是DMA技术,但是我再调试的时候遇到了一些问题,在此特意记录一下;
下面是三个AD通道显示的百分数的数值,一直没成功是因为,这个三个值一直在飘动,困了一天晚上
最后我把下面这行代码改了:
结果就3个通道的AD值就稳定了
解决方法:不要采用连续转换模式 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
需要时才实施转换 ADC_SoftwareStartConvCmd(ADC1, ENABLE); 转换后取消转换 ADC_SoftwareStartConvCmd(ADC1, DISABLE);
经过测试能够解决stm32 adc dma多通道采样 数据错位
改过来之后就能解决了!