Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

STM32F407VG ADC

Вт ноя 21, 2017 19:07:36

Всем привет!

Не получается запустить АЦП в непрерывном режиме при минимальном предделителе. Работаю с 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, всё виснет в прерывании (при первом же уходе). Если любое другое значение предделителя - всё работает нормально. В чём может быть причина?

Re: STM32F407VG ADC

Ср ноя 22, 2017 16:30:03

Заработало при SYSCLK = 64 МГц (до этого было 32). Частоту шины АРВ2 не менял (16 МГц)
Ответить