Was disabled den DMA nachdem der HAL_ADC_ConvCpltCallback Interrupt kam?
Mein Verständnis ist, dass so lange mein Timer den ADC anstößt, dass
dieser wenn der DMA auf "Circular" steht immer schön weiter über den DMA
in den Speicher reinschreibt.
Die Schleife unten funktioniert aber nur 1x, anschließend kommen keine
Interrupts mehr (weder halb noch voll).
Viele Grüße!
Marko
1 | HalfDone = 0;
|
2 | FullDone = 0;
|
3 | HAL_ADC_Start_DMA(&hadc1, (uint32_t*)Buffer.ADCbuffer, ADCbufferSize);
|
4 | HAL_TIM_Base_Start_IT(&htim15);
|
5 | for (unsigned int i = 0; i<2; i++)
|
6 | {
|
7 | while(!HalfDone);
|
8 | f_write(&File, Buffer.SDbuffer, ADCbufferSize, &bw);
|
9 | HalfDone = 0;
|
10 | while(!FullDone);
|
11 | f_write(&File, Buffer.SDbuffer + ADCbufferSize, ADCbufferSize, &bw);
|
12 | FullDone = 0;
|
13 | }
|
14 |
|
15 | void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc1)
|
16 | {
|
17 | HalfDone = 1;
|
18 | }
|
19 |
|
20 | void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc1)
|
21 | {
|
22 | FullDone = 1;
|
23 | }
|