Добрый день, прошу помощи, данные, которые получаю с ацп по двум регулярным каналам, одинаковые.
Такое ощущение что прерывание происходит так:
канал 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);
}
}
спасибо за помощь