реклама на сайте
подробности

 
 
> STM32F4 ADC DMA ?
Allregia
сообщение Jul 22 2012, 14:14
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Помогите пожалуйста.

Хочу запустить АЦД непрерывно на оцифровку последовательно 12 каналов, чтобы складывало с массив.
Вот код.
Не могу понять - после инициализации DMA, в его регисторах все нули.
Пробовал заускать программу - в массиве тоже все нули.
Код
//volatile u16 ADCConvertedValue[12];  <- the results are here

void adc_init(void){
ADC_InitTypeDef ADC_InitStruct;
ADC_CommonInitTypeDef ADC_CommonInitStruct;
DMA_InitTypeDef DMA_InitStructure;

         // ports are already configured    
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);          // enable clocking of ADC1
         RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_DMA2,ENABLE);          // enable clocking of DMA2    
    //==Configure DMA2 - Channel0 Stream 4==
         DMA_InitStructure.DMA_Channel                  = DMA_Channel_0;  
             DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;
         DMA_InitStructure.DMA_Memory0BaseAddr     = (uint32_t) &ADCConvertedValue;
         DMA_InitStructure.DMA_DIR             = DMA_DIR_PeripheralToMemory;
         DMA_InitStructure.DMA_BufferSize         = 12;
         DMA_InitStructure.DMA_PeripheralInc             = DMA_PeripheralInc_Disable;
         DMA_InitStructure.DMA_MemoryInc         = DMA_MemoryInc_Enable;
         DMA_InitStructure.DMA_PeripheralDataSize  = DMA_PeripheralDataSize_HalfWord;
         DMA_InitStructure.DMA_MemoryDataSize     = DMA_MemoryDataSize_HalfWord;
         DMA_InitStructure.DMA_Mode             = DMA_Mode_Circular;
         DMA_InitStructure.DMA_Priority             = DMA_Priority_High;
         DMA_InitStructure.DMA_FIFOMode         = DMA_FIFOMode_Disable;        
         DMA_InitStructure.DMA_FIFOThreshold     = DMA_FIFOThreshold_HalfFull;
         DMA_InitStructure.DMA_MemoryBurst         = DMA_MemoryBurst_Single;
         DMA_InitStructure.DMA_PeripheralBurst     = DMA_PeripheralBurst_Single;
         DMA_Init(DMA2_Stream4, &DMA_InitStructure);
         DMA_Cmd( DMA2_Stream4, ENABLE);
  
// ADC:
         ADC_DeInit();     // turn ADC off

         ADC_CommonInitStruct.ADC_Mode                =ADC_Mode_Independent;
         ADC_CommonInitStruct.ADC_Prescaler            =ADC_Prescaler_Div4;
         ADC_CommonInitStruct.ADC_DMAAccessMode        =ADC_DMAAccessMode_Disabled;
         ADC_CommonInitStruct.ADC_TwoSamplingDelay            =ADC_TwoSamplingDelay_5Cycles;
         ADC_CommonInit(&ADC_CommonInitStruct);

         ADC_StructInit(&ADC_InitStruct);
         ADC_InitStruct.ADC_Resolution                =ADC_Resolution_12b;
         ADC_InitStruct.ADC_ScanConvMode            =ENABLE;
         ADC_InitStruct.ADC_ContinuousConvMode        =ENABLE;
         ADC_InitStruct.ADC_DataAlign                =ADC_DataAlign_Right;//Left;
         ADC_InitStruct.ADC_NbrOfConversion            =12;
         ADC_Init(ADC1,&ADC_InitStruct);

//----channels order
         ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1,ADC_SampleTime_480Cycles);// PC0
         ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2,ADC_SampleTime_480Cycles);// PC1
         ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 3,ADC_SampleTime_480Cycles);// PC2
         ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 4,ADC_SampleTime_480Cycles);// PC3
         ADC_RegularChannelConfig(ADC1, ADC_Channel_0,   5,ADC_SampleTime_480Cycles);// PA0
         ADC_RegularChannelConfig(ADC1, ADC_Channel_1,   6,ADC_SampleTime_480Cycles);// PA1
         ADC_RegularChannelConfig(ADC1, ADC_Channel_2,   7,ADC_SampleTime_480Cycles);// PA2
         ADC_RegularChannelConfig(ADC1, ADC_Channel_3,   8,ADC_SampleTime_480Cycles);// PA3
         ADC_RegularChannelConfig(ADC1, ADC_Channel_6,   9,ADC_SampleTime_480Cycles);// PA6
         ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 10,ADC_SampleTime_480Cycles);// PA7
         ADC_RegularChannelConfig(ADC1, ADC_Channel_14,11,ADC_SampleTime_480Cycles);// PC4
         ADC_RegularChannelConfig(ADC1, ADC_Channel_15,12,ADC_SampleTime_480Cycles);// PC5
// enable ADC and DMA:
         ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);

         ADC_DMACmd(ADC1, ENABLE);        //Enable ADC1 DMA
         ADC_Cmd(ADC1, ENABLE);        //Enable ADC1

         ADC_SoftwareStartConv(ADC1);            // start ADC conversions
}
//-----------------------------

Проц stm32f407, J-Link, Keil 4.23
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Haamu
сообщение Jan 9 2014, 08:17
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Необходимо измерить сигнал с нескольких каналов последовательно, сохраняя данные в память через DMA. Измерять надо крайне быстро. Действую таким образом: выбираю канал, запускаю АЦП. Вот кусок кода:
Код
if(ModeStruct.Discreteness_hall) {
    if ((step_counter % ModeStruct.Discreteness_hall) == 0) {
        ADC1->SQR3 = ADC_Channel_0;
        ADC1->CR2 |= ADC_CR2_SWSTART;    //Start ADC
    }
}
if (ModeStruct.Discreteness_l) {
    if ((step_counter % ModeStruct.Discreteness_l) == 0) {
        ADC1->SQR3 = ADC_Channel_1;
        ADC1->CR2 |= ADC_CR2_SWSTART;    //Start ADC
    }
}
if (ModeStruct.Discreteness_diff) {
    if ((step_counter % ModeStruct.Discreteness_diff) == 0) {
        ADC1->SQR3 = ADC_Channel_2;
        ADC1->CR2 |= ADC_CR2_SWSTART;    //Start ADC
    }
}

Вот инициализация (тоже кусок):
Код
ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStruct.ADC_ScanConvMode = DISABLE;
ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStruct.ADC_NbrOfConversion = 1;
ADC_Init(ADC1, &ADC_InitStruct);

Внимание, вопрос. Если я использую только один АЦП, нужна ли инициализация ADC_CommonInit(&ADC_CommonInitStruct)?
Какая частота тактирования у АЦП? В заблуждение ввел предделитель в вышеупомянутой ADC_CommonInitStruct. Если я работаю только с одним АЦП, его тактовая частота будет равна частоте шины APB2 без всяких предделителей?
Если чатстота APB2 = 84 МГц, а частота ядра 168Мгц, то в моем случае на оцифровку одного канала будет 15*(186/84) = 15*2 = 30 системных тиков. Верно? Если да, то поидее должен успеть оцифровать до запуска следующего канала. Но для подстраховки, перед запуском очередного преобразования, как лучше проверить (поять же, максимально быстро) завершилось ли предыдущее преобразование? Пробовал перед началом преобразования проверять флаг конца преобразования (EOC), но он похоже сбрасывается, когда DMA забирает данные в память.

Сообщение отредактировал Haamu - Jan 9 2014, 08:28
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Allregia   STM32F4 ADC DMA ?   Jul 22 2012, 14:14
- - Allregia   Ошибка была чисто механическая: RCC_AHB1PeriphRe...   Jul 23 2012, 07:27
|- - ViKo   Цитата(Allregia @ Jul 23 2012, 10:27) Оши...   Jul 23 2012, 07:44
|- - kan35   Цитата(ViKo @ Jul 23 2012, 11:44) А не на...   Jul 23 2012, 08:02
||- - ViKo   Цитата(kan35 @ Jul 23 2012, 11:02) Вы про...   Jul 23 2012, 08:11
|- - Allregia   Цитата(ViKo @ Jul 23 2012, 09:44) А не на...   Jul 23 2012, 10:32
- - kan35   Allregia, абсолютно правильный подход. Еще добавлю...   Jul 23 2012, 10:42
|- - ViKo   Цитата(kan35 @ Jul 23 2012, 13:42) Allreg...   Jul 23 2012, 11:15
|- - Allregia   Цитата(ViKo @ Jul 23 2012, 13:15) Так-так...   Jul 23 2012, 11:51
|- - ViKo   Цитата(Allregia @ Jul 23 2012, 14:51) Мож...   Jul 23 2012, 12:10
|- - Allregia   Цитата(ViKo @ Jul 23 2012, 14:10) А на эт...   Jul 23 2012, 12:46
|- - ViKo   Цитата(Allregia @ Jul 23 2012, 15:46) Кон...   Jul 23 2012, 12:58
- - kan35   Не преувеличивайте. Инициализация периферии занима...   Jul 23 2012, 11:47
|- - ViKo   Цитата(kan35 @ Jul 23 2012, 14:47) за иде...   Jul 23 2012, 11:49
|- - Allregia   Цитата(ViKo @ Jul 23 2012, 13:49) За нее....   Jul 23 2012, 12:34
|- - ViKo   Цитата(Allregia @ Jul 23 2012, 15:34) Сра...   Jul 23 2012, 12:37
- - kan35   ViKo, Оптимизация ради оптимизации приносит только...   Jul 23 2012, 12:48
- - kan35   Это плюс несомненно. А вообще, вы задавались вопро...   Jul 23 2012, 13:30
|- - ViKo   Цитата(kan35 @ Jul 23 2012, 16:30) Это ко...   Jul 23 2012, 19:38
|- - AlexandrY   Цитата(kan35 @ Jul 23 2012, 16:30) Это пл...   Jul 23 2012, 20:04
|- - VslavX   Цитата(AlexandrY @ Jul 23 2012, 23:04) А ...   Jul 24 2012, 03:50
|- - kan35   Цитата(AlexandrY @ Jul 24 2012, 00:04) Дл...   Jul 24 2012, 04:10
|- - demiurg_spb   Я использую библиотеки и могу сказать, что они сле...   Jul 24 2012, 06:51
- - Сергей Борщ   А почему все зациклились на инициализации? Разве б...   Jul 24 2012, 09:48
|- - demiurg_spb   Цитата(Сергей Борщ @ Jul 24 2012, 13:48) ...   Jul 24 2012, 16:16
|- - Allregia   Цитата(Сергей Борщ @ Jul 24 2012, 11:48) ...   Jul 24 2012, 17:42
|- - demiurg_spb   Цитата(Allregia @ Jul 24 2012, 21:42) Код...   Jul 24 2012, 17:47
|- - _Артём_   Цитата(demiurg_spb @ Jul 24 2012, 20:47) ...   Jul 24 2012, 18:51
||- - demiurg_spb   Тот кто привык щи лаптем хлебать того уже более пр...   Jul 24 2012, 19:05
||- - _Артём_   Цитата(demiurg_spb @ Jul 24 2012, 22:05) ...   Jul 24 2012, 19:57
||- - Allregia   Цитата(_Артём_ @ Jul 24 2012, 21:57) Да к...   Jul 25 2012, 05:24
||- - demiurg_spb   Цитата(_Артём_ @ Jul 24 2012, 23:57) Чем ...   Jul 25 2012, 05:47
||- - Allregia   Цитата(demiurg_spb @ Jul 25 2012, 07:47) ...   Jul 25 2012, 07:18
||- - ViKo   Цитата(Allregia @ Jul 25 2012, 10:18) Пом...   Jul 25 2012, 07:30
||- - Allregia   Цитата(ViKo @ Jul 25 2012, 09:30) Но, вид...   Jul 25 2012, 11:48
||- - ViKo   Цитата(Allregia @ Jul 25 2012, 14:48) 99....   Jul 25 2012, 11:57
||- - Allregia   Цитата(ViKo @ Jul 25 2012, 13:57) Верю. Д...   Jul 25 2012, 14:46
|- - Allregia   Цитата(demiurg_spb @ Jul 24 2012, 19:47) ...   Jul 24 2012, 19:42
- - kan35   ViKo, никто не отрицает, что работа через библиоте...   Jul 25 2012, 12:26
|- - ViKo   Цитата(kan35 @ Jul 25 2012, 15:26) никто ...   Jul 25 2012, 12:50
|- - kan35   Цитата(ViKo @ Jul 25 2012, 16:50) Еще нед...   Jul 26 2012, 05:52
|- - ViKo   Цитата(kan35 @ Jul 26 2012, 08:52) Viko, ...   Jul 26 2012, 07:58
- - kan35   То, что по DMA работа (пусть даже внешняя память--...   Jul 26 2012, 08:36
|- - ViKo   Цитата(kan35 @ Jul 26 2012, 11:36) То, чт...   Jul 26 2012, 08:45
- - kan35   Действитеьлно, флаг ловить лучше в прерывании. DMA...   Jul 26 2012, 08:58
|- - ViKo   Цитата(kan35 @ Jul 26 2012, 11:58) Действ...   Jul 26 2012, 10:41
- - kan35   В основной программе ждать семафора, в прерывании ...   Jul 26 2012, 12:00
- - Allregia   Вопрос немного в сторону, про М4 и настройки Кейла...   Jul 26 2012, 20:29
- - ViKo   На все ваши вопросы здесь уже были ответы. Поищите...   Jul 31 2012, 09:35
|- - Allregia   Цитата(ViKo @ Jul 31 2012, 11:35) На все ...   Aug 2 2012, 14:03
- - сарматъ   помогите пожалуйста, пытаюсь запустить ацп вот так...   Nov 19 2012, 05:34
- - сарматъ   конкретно не работает непрерывное преобразование п...   Nov 19 2012, 09:03
- - сарматъ   все равно надо каждый раз делать ADC1->CR2...   Nov 19 2012, 12:40
- - Flexz   Перепишите на обычные (regular) каналы, injected н...   Nov 19 2012, 15:28
- - сарматъ   упс... а в f100 работали... спасибо   Nov 19 2012, 15:37


Reply to this topicStart new topic
13 чел. читают эту тему (гостей: 13, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th August 2025 - 04:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01488 секунд с 7
ELECTRONIX ©2004-2016