Доброй ночи уважаемые форумчане! Помогите пожалуйста разобраться.
Хочу опрашивать АЦП (все 7 каналов) за 1-10мс.
Набрел на примеры в интернете , но они только на один канал..
Из доки понял что в инжектированном режиме можно работать сразу с 4 каналами , то есть эти 4 канала будут складывать данные в разные регистры и не затирать другие измеренные каналы АЦП.
Вопрос: какой режим мне лучше использовать? И как настроить чтобы я мог читать данные?
к примеру так:
Код
ch1 = ADC1;
ch2 = ADC2;
ch3 = ADC3;
ch4 = ADC4;
ch5 = ADC5;
ch6 = ADC6;
ch7 = ADC7;
пример нашел такой:
Код
void init_adc()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// включаем порта А
RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN, ENABLE);// включаем модуль АЦП
ADC1->SMPR2 |= (ADC_SMPR2_SMP1_2 | ADC_SMPR2_SMP1_1 | ADC_SMPR2_SMP1_0); //Задаем время выборки
ADC1->CR2 |= ADC_CR2_JEXTSEL; //Преобразование инжектированной группы
ADC1->CR2 |= ADC_CR2_JEXTTRIG; //Разрешаем внешний запуск инжектированной группы
ADC1->CR2 |= ADC_CR2_CONT; //Преобразования запускаются одно за другим
ADC1->CR1 |= ADC_CR1_JAUTO;
ADC1->JSQR |= (1<<15); //Задаем номер канала - ADC1
ADC1->CR2 |= ADC_CR2_ADON;//Теперь включаем АЦП
ADC1->CR2 |= ADC_CR2_JSWSTART; //Запуск преобразований
while (!(ADC1->SR & ADC_SR_JEOC)); //ждем пока первое преобразование завершится
}
int main(void)
{
init_7leds();
init_adc();
while(1)
{
adc_res=ADC1->JDR1;
adc_res = (adc_res * 7300) / 100000;
set_7led(adc_res);
}
}
Может кто уже работал в многоканальном режиме, и может тому человеку не жалко будет показать пример кода?
Заранее спасибо за помощь!

С уважением Артем.
-----------------------------
Я правильно понимаю?
Что надо прочитать один канал в переменную , потом выключить АЦП , выбрать другой канал АЦП , включить снова преобразование , дождаться завершения преобразования , прочитать содержимое.
Или можно выбирать номер канала не выключая АЦП?
Работал до этого с AVR , поэтому , сейчас неудобно переходить на STM32 ....
Сообщение отредактировал Artos5 - Sep 4 2014, 20:22