在Stm32f4-Discovery板上我配置了三重ADC交错模式,DMA在循环模式下写入ADC数据2.一切正常,但我无法正常暂停传输以传输数据通过USART在缓冲区中(转换在外部中断转换函数内执行)。我正在尝试实现这样的算法:
我尝试过的一件事是
DMA_Cmd(DMA2_Stream0, DISABLE);
ADC_Cmd(ADC1, DISABLE); ADC_Cmd(ADC2, DISABLE); ADC_Cmd(ADC3, DISABLE);
... Send the buffered data over USART ...
ADC_Cmd(ADC1, ENABLE); ADC_Cmd(ADC2, ENABLE); ADC_Cmd(ADC3, ENABLE);
DMA_Cmd(DMA2_Stream0, ENABLE);
那很好,但是在某些时候,DMA只是停留在第一位并且没有"移动"通过所有缓冲区数组。我还尝试过停止ADC的RCC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, DISABLE); //So on for ADC2 and ADC3
但它也是如此,唯一的区别是第一种方法在某个时刻停止DMA传输(因此,有时它会暂停DMA),而第二种方法则停止DMA永远不会正常工作。
我还在参考手册中读到了
如果转换序列中断(例如,当发生DMA传输结束时), 必须首先在独立模式下配置多ADC序列发生器(位 在重新编程交错模式之前,DUAL [4:0] = 00000)。
我已经尝试在暂停时将ADC设置为独立模式,然后在上述两种方法中将ADC设置为三重交错模式,但这并没有改变这种情况。
所以,问题是 - 暂停DMA传输的正确方式是什么,以便我尝试通过USART发送的缓冲数据不会改变?