Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm32f107 ацп регулярные каналы
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Mikron
Добрый день, прошу помощи, данные, которые получаю с ацп по двум регулярным каналам, одинаковые.


Такое ощущение что прерывание происходит так:
канал 5 - канал 14 - прерывание ?

А как сделать так:
канал 5 - прерывание - канал 14 - прерывание?

Я еще не разобрался как узнать с какого канала в регистре DR содержатся данные, может из-за этого проблема?

код инициализации:
Код
void inic_adc1(void)
{
  ADC1->CR2 |= ADC_CR2_ADON;    //включение
  ADC1->CR2 &= ~ADC_CR2_EXTSEL; //очистка бита
  ADC1->CR2 |= ADC_CR2_EXTTRIG; //запуск от внешнего события
                                //внешнее событие - timer1
  ADC1->SQR1 = 1<<20;           //два канала
  ADC1->SQR3 = (5<<0)|(14<<5);  //номера
  ADC1->CR1 |= ADC_CR1_SCAN;    //режим сканирования
  ADC1->CR1 |= ADC_CR1_EOCIE;   //разрешение прерывания по окончанию
}


Код
void ADC1_2_IRQHandler(void)
{
  volatile static uint8_t i3=0 , i4=0;
  volatile static uint8_t flag1=1 , flag2=0;
  volatile static uint32_t summ1=0, summ2=0;

  if (ADC1->SR & (1<<1))
  {
    TIM1->CR1 &= ~TIM_CR1_CEN;

    if(flag1)
    {
      summ1+=(ADC1->DR&0xfff)>>3;    //чтение данных с первого канала
      i3++;
      if(i3>100)
      {
        i3=0;
        //if(summ/100>=174) {}  если больше что-то делаем
    //else {} если меньше что-то делаем

        summ1=0;
      }
      flag1=0;
      flag2=1;
    }
    else if(flag2)            //чтение данных со второго канала
    {
      summ2+=(ADC1->DR&0xfff)>>3;
      i4++;
      if(i4>100)
      {
        i4=0;
        //if(summ/100>=174) {}  если больше что-то делаем
    //else {} если меньше что-то делаем

        summ2=0;
      }
      flag1=1;
      flag2=0;
    }

    GPIOB->BSRR=GPIO_BSRR_BS14|GPIO_BSRR_BS15;

    ADC1->SR &= ~(1<<1);
  }
}



спасибо за помощь
maksimp
Цитата(Mikron @ May 31 2012, 12:10) *
Добрый день, прошу помощи, данные, которые получаю с ацп по двум регулярным каналам, одинаковые.
Такое ощущение что прерывание происходит так:
канал 5 - канал 14 - прерывание ?
А как сделать так:
канал 5 - прерывание - канал 14 - прерывание?

Никак. Единственный способ работы с несколькими регулярными каналами - сохранять данные в память с помощью DMA.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.