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

 
 
> 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
Ответов
kan35
сообщение Jul 23 2012, 11:47
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Не преувеличивайте. Инициализация периферии занимает исчезающе малую долю реального кода.
Велика ли будет экономия? Позволит ли она вам взять более дешевый камень? врядли... код будет быстрее? - ну может быть при очень определенных условиях...
так за что же борьба? за идею наверное bb-offtopic.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 23 2012, 11:49
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(kan35 @ Jul 23 2012, 14:47) *
за идею наверное

За нее. За "абсолютно правильный подход".

Еще пример. Сравните с кодом из сообщения топикстартера. Не убеждает?
Код
void ADC_init(void)
{
/* Разрешить тактирование ADC1 */
  RCC->CR |= RCC_CR_HSION;        // Такты на преобразователь
  RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;    // Такты на интерфейс

// ADON == 0 //
/* 12-bit , Power Down during Idle phase, Scan Mode */
  ADC1->CR1 = ADC_CR1_PDI | ADC_CR1_SCAN;
/* Sample Time 16 cycles (1 us) for all channels */
  ADC1->SMPR1 = ADC1->SMPR2 = ADC1->SMPR3 = 0x2<<27 | 0x2<<24 |
  0x2<<21 | 0x2<<18 | 0x2<<15 | 0x2<<12 | 0x2<<9 | 0x2<<6 | 0x2<<3 | 0x2<<0;
/* Right alignment, DMA mode disabled, No delay, ADC On */
  ADC1->CR2 = ADC_CR2_ADON;
/* Wait while !ADONS */
  while (!(ADC1->SR & ADC_SR_ADONS));
// ADONS == 1 //
/* External Trigger on the rising edge for injected channels,  TIM7_TRGO event */
  // ADC1->CR2 = ADC_CR2_JEXTEN_0 | ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_1;
  ADC1->CR2 |= ADC_CR2_JEXTEN_0 | ADC_CR2_JEXTSEL_0;        // TIM9_TRGO
/* Injected channels data offset = 0 */
/* LQFP64 - 4 injected conversions, 15, 14, 7, 6 channels */
  // ADC1->JSQR = 0x3<<20 | 15<<15 | 14<<10 | 7<<5 | 6<<0;
/* LQFP48 - 4 injected conversions, 8, 3, 7, 6 channels */  
  ADC1->JSQR = 0x3<<20 | 3<<15 | 8<<10 | 7<<5 | 6<<0;  
/* Читать регистры ADC_JDRx, когда установится бит JEOC */
}
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
|- - 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
- - Haamu   Необходимо измерить сигнал с нескольких каналов по...   Jan 9 2014, 08:17


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

 


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


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