Блог    Теги    RSS    Файлопомойка Мой Github Мой Telegram

Блог №200 по адресу 0708:07C7 / Если вы калибруете АЦП...

3 сентября 2015, 20:38
... то не забывайте перед калибровкой отключать DMA (ADC1->CFGR1 &= ~ADC_CFGR1_DMAEN) и сбрасывать значение счётчика DMA1_ChannelN->CNDTR.

static void adc_recalibrate( void )
{
ADC1->CR |= ADC_CR_ADSTP; // Stop current conversion
while( ADC1->CR & ADC_CR_ADSTP ); // .. and wait
ADC1->CFGR1 &= ~ADC_CFGR1_DMAEN; // Disable DMA req
ADC1->CR |= ADC_CR_ADDIS; // Disable ADC
while( ADC1->CR & ADC_CR_ADEN ); // .. and wait
DMA1_Channel1->CCR &= ~DMA_CCR_EN; // Stop DMA transfer
while( DMA1_Channel1->CCR & DMA_CCR_EN ); // .. and wait
ADC1->CR |= ADC_CR_ADCAL; // Start ADC calibration
while( ADC1->CR & ADC_CR_ADCAL ); // .. and wait
ADC1->CR |= ADC_CR_ADEN; // Enable ADC
while( !(ADC1->ISR & ADC_ISR_ADRDY) ); // .. and wait
ADC1->CFGR1 |= ADC_CFGR1_DMAEN; // Enable DMA req
ADC1->CR |= ADC_CR_ADSTART; // Start ADC conversion
DMA1_Channel1->CNDTR = ADC_CHAN_COUNT * ADC_FILTER_SIZE; // Set cycle size
DMA1_Channel1->CCR |= DMA_CCR_EN; // Start DMA transfer
}

Пример кода для STM32F030C8

Полдня убил на это - после повторного запуска АЦП (в режиме непрерывной оцифровки нескольких каналов) каналы путались местами. Из документации совершенно не очевидно что нужно не просто выключить канал DMA, но и выключить формирование DMA-запроса в самом АЦП.

Такие дела.
Теги: #stm32  

Комментарии RSS

Ваше имя:

E-mail (будет скрыт):

Текст: