kasjo Napisano Październik 13, 2015 Udostępnij Napisano Październik 13, 2015 Próbuję odczytać jak najszybciej napięcie z ADC czymś takim: GPIO_InitTypeDef gpio; SPI_InitTypeDef spi; ADC_InitTypeDef adc; ADC_CommonInitTypeDef adc_common; DMA_InitTypeDef dma; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 | RCC_APB2Periph_ADC3, ENABLE); gpio.GPIO_Mode = GPIO_Mode_AN; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_Pin = GPIO_PIN_0; GPIO_Init(GPIOA, &gpio); dma.DMA_BufferSize = 3; dma.DMA_Channel = DMA_Channel_0; dma.DMA_DIR = DMA_DIR_PeripheralToMemory; dma.DMA_FIFOMode = DMA_FIFOMode_Disable; dma.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; dma.DMA_Memory0BaseAddr = 0xD0000000; dma.DMA_MemoryBurst = DMA_MemoryBurst_Single; dma.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; dma.DMA_MemoryInc = DMA_MemoryInc_Enable; dma.DMA_Mode = DMA_Mode_Circular; dma.DMA_PeripheralBaseAddr = &ADC->CDR; dma.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; dma.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; dma.DMA_PeripheralInc = DMA_PeripheralInc_Disable; dma.DMA_Priority = DMA_Priority_High; DMA_Init(DMA2_Stream0, &dma); DMA_Cmd(DMA2_Stream0, ENABLE); adc_common.ADC_DMAAccessMode = ADC_DMAAccessMode_2; adc_common.ADC_Mode = ADC_TripleMode_Interl; adc_common.ADC_Prescaler = ADC_Prescaler_Div2; adc_common.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInit(&adc_common); adc.ADC_ContinuousConvMode = ENABLE; adc.ADC_DataAlign = ADC_DataAlign_Right; adc.ADC_ExternalTrigConv = DISABLE; adc.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; adc.ADC_NbrOfConversion = 1; adc.ADC_Resolution = ADC_Resolution_12b; adc.ADC_ScanConvMode = DISABLE; ADC_Init(ADC1, &adc); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); ADC_DMACmd(DMA1, ENABLE); ADC_Init(ADC2, &adc); ADC_RegularChannelConfig(ADC2, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); ADC_Init(ADC3, &adc); ADC_RegularChannelConfig(ADC3, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE); ADC_Cmd(ADC1, ENABLE); ADC_Cmd(ADC2, ENABLE); ADC_Cmd(ADC3, ENABLE); ADC_SoftwareStartConv(ADC1); Teraz chciałbym odczytane wartości przez krótki okres czasu pchać do pamięci żeby je potem obrobić. Czy mogę w ten sposób wrzucić jedynie 65536 wartości? Bo chyba taki maksymalnie może mieć rozmiar bufora dla DMA? Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!