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

 
 
> ADC+DMA STM32F407, Как определить время преобразования?
Haamu
сообщение Jan 13 2014, 08:40
Сообщение #1


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

Группа: Участник
Сообщений: 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);

Столкнулся с такой проблемой, что в какой-то момент очередное преобразование АЦП запускается до того, как завершилось предыдущее, после чего отключается DMA.
Подскажите, как максимально быстро можно проверить, завершилось ли предыдущее преобразование, можно ли запускать следующее?
Пробовал проверять таким вот образом:
Код
ADC1->SQR3 = ADC_Channel_0;
ADC1->CR2 |= ADC_CR2_SWSTART;    //Start ADC
while(!(ADC1->SR & (uint32_t)ADC_FLAG_EOC)) {}
ADC1->SR &= ~((uint32_t)ADC_FLAG_EOC);

Без DMA такой способ работает. Но когда включаю DMA, то флаг окончания преобразования не поднимается, видимо его DMA раньше перехватывает и сам сбрасывает.
Была мысль делать небольшую задержку после запуска преобразования, но что-то я запутался, как рассчитать время, необходимое для завершения перобразования. А конкретно, как определить часосту тактирования АЦП? Частота ядра в моем случае 168МГц, соответстсвенно шина APB2 работает на частоте 84МГц. Значит и частота АЦП 84МГц, или есть еще какие-то предделители? Вводит в заблуждение предделитель в ADC common control register. Учитывается ли этот регистр при работе с одним АЦП или используется только когда запускаю 2 или 3 АЦП одновременно?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Haamu   ADC+DMA STM32F407   Jan 13 2014, 08:40
- - MiklPolikov   Вы неправильно подходите к задаче. 1)Зачем запуска...   Jan 16 2014, 02:36
|- - Haamu   Цитата(MiklPolikov @ Jan 16 2014, 06:36) ...   Jan 16 2014, 11:54
|- - MiklPolikov   Цитата(Haamu @ Jan 16 2014, 15:54) Какой ...   Jan 16 2014, 12:35
|- - Сергей Борщ   Цитата(Haamu @ Jan 16 2014, 13:54) Я расс...   Jan 17 2014, 12:16
|- - HardEgor   Product Specifications Table 67. ADC characteristi...   Jan 17 2014, 18:24
|- - Haamu   Цитата(HardEgor @ Jan 17 2014, 22:24) Pro...   Jan 20 2014, 12:55
|- - HardEgor   Ну так можно снизить системную частоту и подобрать...   Jan 20 2014, 15:34
|- - Falkon_99   В тему про АЦП, у меня STM32F207 Настроил преобра...   Feb 22 2014, 20:59
|- - ViKo   Цитата(Falkon_99 @ Feb 22 2014, 23:59) На...   Feb 23 2014, 15:31
|- - Falkon_99   я прозрел! От частоты АЦП зависят результвты п...   Feb 23 2014, 17:08
|- - scifi   Цитата(Falkon_99 @ Feb 23 2014, 21:08) В ...   Feb 23 2014, 18:00
|- - Falkon_99   TS_temp ADC sampling time when reading the tempera...   Feb 24 2014, 07:52
- - HardEgor   Цитата(Haamu @ Jan 13 2014, 15:40) Была м...   Jan 16 2014, 16:29
|- - Haamu   HardEgor, подскажите пожалуйста, где именно в дата...   Jan 17 2014, 11:42
- - vlad_new   Проверте не попадаете ли Вы под еррату с Vbat (Bat...   Feb 24 2014, 13:14


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:36
Рейтинг@Mail.ru


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