DMA全称为Direct Memory Access,即直接存储器访问。简单的说,DMA可以让外设直接访问内存,而不需要CPU介入。这样可以大大减少CPU的负担,提高系统的效率。
DMA通过一段内部缓存区,将目的地址的数据直接存储到内存中。该功能特别适合于需要高速数据传输的外设,例如ADC、DAC等模数/数模转换器。
在STM32单片机中有两种ADC转换方式:
一种是ADC的轮询模式,简单易懂,但每次转换都需要CPU介入,给CPU带来了不小的负担。这种模式下的ADC转换速度较慢,实时性差;
另一种是使用DMA,也称为ADC的DMA模式。DMA模式下,ADC通过DMA直接将采集的数据按照指定地址存储到内存中。这样可以减少CPU的干预,提高ADC的转换速度,增加数据采集的实时性。
在使用DMA模式进行ADC转换之前,必须先配置好ADC和DMA。具体步骤如下:
1)配置ADC模块:
包括设置ADC通道、采样时间、采样周期等参数。
2)配置DMA模块:
包括设置DMA通道、数据传输方向、数据缓冲区大小等参数。
3)配置NVIC中断:
开启DMA和ADC转换完成中断,以便在数据传输完成后处理数据。
4)启动ADC和DMA:
最后,开启ADC转换和DMA数据传输。
使用DMA进行ADC转换,可以带来以下优点:
1)减少CPU的干预,提高了系统的性能指标;
2)提高了ADC的转换速度,增加了数据采集的实时性;
3)DMA可以实现多通道数据采集,可以同时进行多个通道的采集,提升采集效率。