Страница 1 из 1

stm32 захват значения таймера

Добавлено: Чт дек 12, 2013 19:17:00
castiel92
Скажите,есть ли возможность как-нибудь сохранить последнее значение таймера перед его сбросом? таймер находится в режиме reset mode, сбрасывается внешним сигналом.конечно можно другим таймером замерять период сигнала update generation,но мне не подходит это.

Re: stm32 захват значения таймера

Добавлено: Чт дек 12, 2013 19:17:52
blackx
Не, надо всяко вручную сбрасывать.

Re: stm32 захват значения таймера

Добавлено: Чт дек 12, 2013 19:22:09
castiel92
необходим именно внешний сброс,но также нужно знать последнее значение таймера. вручную никак

Re: stm32 захват значения таймера

Добавлено: Ср дек 18, 2013 09:01:46
menzoda
Не знаю, про что ты говоришь, но во всех МК, что я видел, у таймера есть функция "захвата" (capture). Она заключается в том, что таймер сбрасывается внешним сигналом, при этом сохраняя значение счетчика в capture-регистр. Посмотри внимательной свой даташит, может у твоего таймера тоже есть этот функционал.

Re: stm32 захват значения таймера

Добавлено: Ср дек 18, 2013 10:41:47
urry
не понимаю, о чем вы говорите . Вся прелесть режима захвата заключается в том, что получаются максимально точные значения времени именно тогда, когда таймер не "дергают" - как он себе тикал, так и тикает. Любые манипуляции с счетным регистром - обнулить его, установить значение - сразу ставит крест на точности.

Код: Выделить всё

	TIM_ICInitTypeDef timer_ic;
	/* TIM2 clock enable */
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
	/* Time base configuration */
	TIM_TimeBaseStructure.TIM_Period = 65535;
	TIM_TimeBaseStructure.TIM_Prescaler = 0;
	TIM_TimeBaseStructure.TIM_ClockDivision = 0;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
	/* Prescaler configuration */
 	/* Настраиваем захват сигнала:
	- канал: 1
	- направление: по нарастанию
	- источник: напрямую со входа
	- делитель: отключен
	- фильтр: отключен */

	timer_ic.TIM_Channel = TIM_Channel_1;
	timer_ic.TIM_ICPolarity = TIM_ICPolarity_Rising;
	timer_ic.TIM_ICSelection = TIM_ICSelection_DirectTI;
	timer_ic.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	timer_ic.TIM_ICFilter = 0;
	 TIM_ICInit(TIM2, &timer_ic);
	/* Разрешаем таймеру генерировать прерывание по захвату */
	TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);

Re: stm32 захват значения таймера

Добавлено: Ср дек 18, 2013 11:15:23
dosikus
Как это нынче - вау , что я вижу !
Юра на STM перешел .
Приветствую!!!! :beer:

Re: stm32 захват значения таймера

Добавлено: Ср дек 18, 2013 11:22:28
urry
(c) Кругом одно и то же, а в Антартиде вдобавок холодно...
Разница не такая и большая, если месяц помучиться. :) Понадобилось в задаче 6 каналов захвата... И мелкий корпус.