ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
472813 Топик полностью
pav256 (12.12.2013 11:48, просмотров: 186) ответил pav256 на Не работает ADC->DMA в STM32F4
Проблема оказалась именно в ADC, а не в DMA. Так и не получилось перезапустить ADC без использования ADC_CR2_ADON. К сожалению в мануале очень мало информации при сочетании различных режимов, что в этом случае должно происходить загадка. Например, непонятно когда/как происходит сброс указателя каналов при установленных ADC_CR1_SCAN и ADC_CR2_CONT битах (непрерывное сканирование каналов)? В общем получил рабочий код (настройка не изменилась): // таймер (1ms) void TIM7_IRQHandler(void) { TIM7->SR &= ~TIM_SR_UIF; // сбрасываем прерывание if(DMA2_Stream4->NDTR) return; // если преобразование всех каналов не закончено //останваливаем ADC и DMA // ADC1->SR &= ~(uint32_t)(ADC_SR_STRT | ADC_SR_OVR | ADC_SR_EOC); // сбрасываем флаг переполнения ADC1->CR2 &= ~(uint32_t)(ADC_CR2_ADON | ADC_CR2_DMA); // выключаем АЦП и DMA DMA2_Stream4->CR &= ~DMA_SxCR_EN; // деактивация 4-го потока DMA2 //обработка выборок... //перезапускаем ADC и DMA DMA2->HIFCR |= DMA_HIFCR_CTCIF4 | DMA_HIFCR_CHTIF4 | DMA_HIFCR_CTEIF4 | DMA_HIFCR_CDMEIF4 | DMA_HIFCR_CFEIF4; DMA2_Stream4->NDTR = SAMPL_CHANNEL_ADC * MIDI_CHANNEL; // объем передаваемого блока DMA2_Stream4->CR |= DMA_SxCR_EN; // активация 4-го потока DMA2 (как и было 0-ой канал) ADC1->CR2 |= (uint32_t)(ADC_CR2_ADON | ADC_CR2_DMA); // включаем АЦП и DMA ADC1->CR2 |= (uint32_t)ADC_CR2_SWSTART; // запускаем преобразование }