Всем привет!
Не получается запустить АЦП в непрерывном режиме при минимальном предделителе. Работаю с STM32F4Discovery.
Настройка АЦП:
Код:
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; Тактируется от ФАПЧ. Частота шины APB2 = 16 МГц
ADC1->CR1 = ADC1->CR2 = 0;
ADC->CCR &= ~ADC_CCR_ADCPRE; Задаю минимальное значение делителя. Частота делится на 2
ADC1->SQR3 |= 11; Использую 11 канал (нога PC1)
ADC1->CR1 &= ~ADC_CR1_RES;
ADC1->SMPR1 &= ~ADC_SMPR1_SMP11;
ADC1->CR1 |= ADC_CR1_EOCIE;
ADC1->CR2 |= ADC_CR2_CONT; Выбран непрерывный режим преобразования
ADC1->CR2 |= ADC_CR2_ADON;
NVIC_EnableIRQ(ADC_IRQn);
Данные пишу в массив uint16_t A[100]. Они забираются в прерывании:
Код:
void ADC_IRQHandler(void)
{
A[intn] = ADC1->DR;
intn++;
}
Где uint16_t intn отсчитывает количество прерываний.
В общем, после __enable_irq() и пуска АЦП (ADC1->CR2 |= ADC_CR2_SWSTART), если установлен предделитель частоты АЦП на 2, всё виснет в прерывании (при первом же уходе). Если любое другое значение предделителя - всё работает нормально. В чём может быть причина?