Uzix | микроблог

Если вы калибруете АЦП...

… то не забывайте перед калибровкой отключать 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-запроса в самом АЦП.

Такие дела.

Комментарии