реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> stm32f4xx ADC запуск конверсии от TIM1 CC4 event
sidy
сообщение Sep 14 2012, 11:31
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Здравствуйте, уважаемые форумчане. Столкнулся со следующей проблемой: необходимо запускать преобразование в ADC в инжектированном канале от внешнего события, а именно от TIM1 CC4 event. Сначала я запускал преобразование в ручную, устанавливая бит ADC1->CR2|=ADC_CR2_JSWSTART; и все прекрасно работало. Затем при инициализации TIM1 я разрешил TIM1->CCER|=TIM_CCER_CC4E; и жду когда произойдет преобразование, но оно не начинается. Не могу понять что и где я упустил. Ниже привожу кусочек кода инициализации TIM1 и ADC1:
Код
RCC->APB2ENR|=RCC_APB2ENR_TIM1EN;//Разрешаем тактирование TIM1
TIM1->PSC=83;                      //Предделитель равен 84 (83 + 1) (168 МГц/84=2 МГц)
TIM1->ARR=0xFFFF;                  //Значение до которого считаем
TIM1->CCER|=TIM_CCER_CC4E; //Capture enable 4
TIM1->CCR4=10000;                  //Значение CCR4
TIM1->CR1|=TIM_CR1_CEN;      //Разрешаем счет
//****************************************************************
//*Конфиурация АЦП
//****************************************************************
void ADC_Config(void){
//-----------------------------------------------------------------------------------------
//*Инициализация PORTA1 на аналоговую функцию
//-----------------------------------------------------------------------------------------    
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOAEN;//Разрешаем тактирование PORTA
GPIOA->MODER|=GPIO_MODER_MODER1;   //Настраиваем PA1 на аналоговую функцию
//-----------------------------------------------------------------------------------------
//*Инициализация ADC1
//-----------------------------------------------------------------------------------------    
RCC->APB2ENR|=RCC_APB2ENR_ADC1EN; //Разрешаем тактирование ADC1
ADC1->SMPR2|=ADC_SMPR2_SMP1_0
    |ADC_SMPR2_SMP1_1
    |ADC_SMPR2_SMP1_2;                    //Время конверсии 480 циклов
ADC1->JSQR|=ADC_JSQR_JSQ4_0;            //В каком канале осуществляем конверсию 4 (в первом)
//-----------------------------------------------------------------------------------------
ADC1->CR2&=~ADC_CR2_JEXTSEL;            //External event - TIM1_CH4
ADC1->CR2|=ADC_CR2_JEXTEN_0;            //Trigger detection on the rising edge
//-----------------------------------------------------------------------------------------    
ADC1->CR2|=ADC_CR2_ADON;                    //Включаем ADC1
//ADC1->CR2|=ADC_CR2_JSWSTART;    //Старт конверсии инжектированного канала
while ((ADC1->SR&ADC_SR_JEOC)==0);    //Ждем окончания конверсии
result=ADC1->JDR1;                                    //Записываем результат
}


Сообщение отредактировал sidy - Sep 14 2012, 11:32
Go to the top of the page
 
+Quote Post
sidy
сообщение Sep 24 2012, 05:57
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Может кому пригодится. Удалось запустить конверсию ADC1 от TIM1 CC4 event. Для этого я по-мимо выше приведенной инициализации запустил ШИМ в 4 канале. Правда не совсем понятно как это связано с генерацией события в СС4.

Сообщение отредактировал sidy - Sep 24 2012, 05:57
Go to the top of the page
 
+Quote Post
Flexz
сообщение Sep 25 2012, 10:07
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Столкнулся с аналогичным косяком. Только мне нужно запустить АЦП от внешнего импульса. Рассчитывал запустить канал таймера в режиме Input Capture (нужно попутно фиксировать частоту следования импульсов) и от того же события толкнуть АЦП.
Первые сомнения возникли при виде битов EXTEN - выбор фронта для запуска АЦП от события таймера. При чем тут выбор фронта, когда событие (факт захвата счетчика, либо совпадения счетчика и CCR) должно быть единичным импульсом?
Дальнейшие раскопки показали, что АЦП запускается в режиме Output Compare, при чем должен быть включен выход (установлен бит CCxE в CCER).
Из чего следует неутешительный вывод: документация нагло врет, а описание битов EXTSEL в регистре ADC_CR2 следует читать не как "Timer x CCy event", а как "Timer x OCy output".

PS Буду безмерно счастлив если кто-то укажет в чем я не прав rolleyes.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 11:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01269 секунд с 7
ELECTRONIX ©2004-2016