|
STM32F4 ADC DMA ? |
|
|
|
Jul 22 2012, 14:14
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Jul 23 2012, 11:15
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 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 */ и т.д. Взгляните, во что выливается код инициализации при использовании библиотечных функций. Потом посмеемся и поплачем...
|
|
|
|
|
Jul 23 2012, 11:51
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(ViKo @ Jul 23 2012, 13:15)  Так-таки "абсолютно"? Я инициализирую, например, порты следующим образом (с помощью своих макроопределений): Может еще предложите (не дай бог, конечно) на ассемблере писать?  Цитата Взгляните, во что выливается код инициализации при использовании библиотечных функций. Потом посмеемся и поплачем... А кого это .. волнует? Сколько занимает обьем инициализации, по отношению к остальной програме? 0.01% ?  Я лично не хочу вообще думать от всяких иициализациях процессора и тому пдобной ерунде, важнее сама задача.
|
|
|
|
Сообщений в этой теме
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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|