最近想优化一下代码,以前程序 在STM32F030F4上面只有一个ADC1 带有10个通道。我本来用了ADC三个通道 用DMA一起缓存三个通道数据。
当开一个数组用于DMA缓存三个通道数据量大时候挺浪费空间。但是STM32没有当打开adc1多通道扫描时候。DMA单单缓存单个通道数据功能。
/*设置DMA的外设递增模式,一个外设*/
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
/*设置DMA的内存递增模式*/
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
主要这两句指针递增是一步一步递增,不可以单步递增 停止递增 跳步递增 。
假设,我 ADC1 通道0 数据需要一分钟采样300次,而通道1数据只需要一分钟采样5次,而通道2数据只需要一分钟采样1次。
如果三个通道一分钟同时采样300次都缓存DMA中就是(假设是8bit采样)300字节*3=900个字节。
而其实只需要300字节+5字节+1字节=306字节。浪费了900-306=594个字节空间(如果我DMA缓存周期为每分钟)。
|