ADC 多通道DMA连续采集 数据错位问题

ADC循环转换,DMA单次传输(传输指定的数据量,触发中断会就不再启动DMA传输了)。

在使用的时候,先使用HAL_ADC_Start_DMA();函数去开启ADC转和DMA的单次传输。

当DMA传输完成后,因为是单次转换,如需继续转换,那么还需要使用HAL_ADC_Start_DMA();再次开启传输才行。这里就会有一个问题,DMA传输的确是停止了,但是ADC是循环转换,ADC仍然在转换,当我处理完数据以后使用HAL_ADC_Start_DMA();再次开启传输时候,这个时候对应ADC转换完成的数据,具体是哪一个通道的其实是随机的,但是DMA还是会把这个数据传输到adc_buf[0]中,所以我们的数据就是这样错位了。

回调加入了HAL_ADC_Stop_DMA();实际上是停止了ADC的转换了,在下一次开启转换的时候,就不会出现错位的问题了。

你可能感兴趣的:(STM32)