2010-06-01 01:29 AM
STM32F10x_StdPeriph_Examples ADC RegSimul_DualMode
2011-05-17 04:53 AM
You need to make three changes:
First make the DMA buffer size equal to the number of ADC sample channels. Set up a loop to sample the analog channels. I used a Timer2 interrupt handler, you use whatever is appropriate, which could be as simple as a loop with no loop timing control. Enable the DMA and the ADC conversion at the start of your loop. After you have read the DMA buffer, disable the DMA, reset the DMA counter to the sample buffer size, and repoint the DMA address register to the start of the sample buffer. Here is the code I used. I wanted to get as little library overhead as possible, so I used inline code instead of the library in some places. (Usual DMA and ADC setup code here) //Loop Start DMA_Channel1->CCR |= 0x00000001; //Enable DMA Channel 1 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //Start conversion (Test for conversion complete and sample the results here) //Loop Finish: DMA_Channel->CCR &= 0xFFFFFFFE; //Disable DMA Channel1 DMA_Channel1->CNDTR = 9; //Reset DMA buffer count (I sample 9 channels) DMA_Channel1->CMAR = (u32)&MyADCBuffer; Cheers, Hal