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

 
 
> 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, 10:42
Сообщение #2


Знающий
****

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



Allregia,
абсолютно правильный подход. Еще добавлю, что все библиотеки построены по одному сценарию с добавлением специфических функций соответствующих данной периферии. Весь функционал функций закодирован в имени этих функций (простите).
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 23 2012, 11:15
Сообщение #3


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

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



Цитата(kan35 @ Jul 23 2012, 13:42) *
Allregia,
абсолютно правильный подход

Так-таки "абсолютно"?
Я инициализирую, например, порты следующим образом (с помощью своих макроопределений):
Код
;;;192    void GPIO_init(void)
000076  4849              LDR      r0,|L1.412|
;;;193    {
;;;194    /* Разрешить тактирование портов A, B, C */
;;;195      RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN;
000078  301c              ADDS     r0,r0,#0x1c
00007a  6801              LDR      r1,[r0,#0]
00007c  f0410107          ORR      r1,r1,#7
000080  6001              STR      r1,[r0,#0]
;;;196    
;;;197    /* Инициализировать GPIOA */
;;;198      GPIO_INIT(A,
000082  494b              LDR      r1,|L1.432|
000084  4849              LDR      r0,|L1.428|
000086  6008              STR      r0,[r1,#0]
000088  2000              MOVS     r0,#0
00008a  8088              STRH     r0,[r1,#4]
00008c  4a49              LDR      r2,|L1.436|
00008e  608a              STR      r2,[r1,#8]
000090  2214              MOVS     r2,#0x14
000092  60ca              STR      r2,[r1,#0xc]
000094  f44f72b8          MOV      r2,#0x170
000098  620a              STR      r2,[r1,#0x20]
00009a  4a47              LDR      r2,|L1.440|
00009c  624a              STR      r2,[r1,#0x24]
;;;199        MD_GPO, OT_PP, SP_400K, PL_NP, AF_SYSTEM,    // PA0
;;;200        MD_AF,  OT_PP, SP_400K, PL_PU, AF_USART2,    // PA1
;;;201        MD_AF,  OT_PP, SP_400K, PL_PU, AF_TIM2,        // PA2
;;;202    //    MD_GPO, OT_PP, SP_10M,  PL_PD, AF_SYSTEM,    // PA3 - Test
;;;203        MD_AN,  OT_PP, SP_400K, PL_NP, AF_SYSTEM,    // PA3 - ADC3 LQFP48
;;;204        MD_AN,  OT_PP, SP_400K, PL_NP, AF_SYSTEM,    // PA4 - ADC4
;;;205        MD_AN,  OT_PP, SP_400K, PL_NP, AF_SYSTEM,    // PA5 - ADC5
;;;206        MD_AN,  OT_PP, SP_400K, PL_NP, AF_SYSTEM,    // PA6 - ADC6 = VAC1
;;;207        MD_AN,  OT_PP, SP_400K, PL_NP, AF_SYSTEM,    // PA7 - ADC7 = VAC2
;;;208        MD_AF,  OT_PP, SP_10M,  PL_NP, AF_SYSTEM,    // PA8 - MSO (USART1)
;;;209        MD_AF,  OT_PP, SP_10M,  PL_NP, AF_USART1,    // PA9 - USART1_TX
;;;210        MD_AF,  OT_PP, SP_10M,  PL_NP, AF_USART1,    // PA10 - USART1_RX
;;;211        MD_AF,  OT_PP, SP_10M,  PL_NP, AF_USART1,    // PA11
;;;212        MD_AF,  OT_PP, SP_10M,  PL_NP, AF_USART1,    // PA12
;;;213        MD_AF,  OT_PP, SP_10M,  PL_NP, AF_SYSTEM,    // PA13 - JTMS-SWDAT
;;;214        MD_AF,  OT_PP, SP_10M,  PL_NP, AF_SYSTEM,    // PA14 - JTCK-SWCLK
;;;215        MD_AF,  OT_PP, SP_10M,  PL_NP, AF_SYSTEM);    // PA15 - JTDI
;;;216    
;;;217    /* Инициализировать GPIOB */

и т.д.
Взгляните, во что выливается код инициализации при использовании библиотечных функций. Потом посмеемся и поплачем...
Go to the top of the page
 
+Quote Post
Allregia
сообщение Jul 23 2012, 11:51
Сообщение #4


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

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



Цитата(ViKo @ Jul 23 2012, 13:15) *
Так-таки "абсолютно"?
Я инициализирую, например, порты следующим образом (с помощью своих макроопределений):


Может еще предложите (не дай бог, конечно) на ассемблере писать? sm.gif

Цитата
Взгляните, во что выливается код инициализации при использовании библиотечных функций. Потом посмеемся и поплачем...

А кого это .. волнует? Сколько занимает обьем инициализации, по отношению к остальной програме? 0.01% ? sm.gif
Я лично не хочу вообще думать от всяких иициализациях процессора и тому пдобной ерунде, важнее сама задача.
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
|- - 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
- - Haamu   Необходимо измерить сигнал с нескольких каналов по...   Jan 9 2014, 08:17


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

 


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


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