Перейти к содержанию
    

STM32 Timer Gate mode

Добрый день, перед написанием темы перепробовал, как мне кажется, все варианты, подскажите может кто то наступал на это ...

Код ниже, TIM4 master выдает на TRGO - 1 при CNT ENABLE, TIM1 в это время должен считать, но не считает и все тут, в прерывании TIM4 смотрю TIM1 CNT а там 2, не пойму где затык ...(

 

void TIM4_IRQHandler(void)
{
   TIM4->SR &= ~TIM_SR_UIF;
}

void cnt(void)
{
   /* TIM1 init */
   RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;			        /* TIM1 enabled */
   TIM1->PSC = 7200 - 1;			                                        /* new clock 10kHz */
   TIM1->SMCR |= (TIM_SMCR_TS_0 | TIM_SMCR_TS_1);	        /* internal trigger_3 (ITR3) from TIM4 */
   TIM1->SMCR |= (TIM_SMCR_SMS_0 | TIM_SMCR_SMS_2);	/* while trigger input (TRGI) is high, counter is on */

   /* TIM4 init */
   RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
   TIM4->PSC = 7200 - 1;			                        /* new clock 10kHz */
   TIM4->ARR = 10000 - 1;				        /* period 1sec */
   TIM4->CR1 |= TIM_CR1_DIR;				/* counter used as downcounter */
   TIM4->CR1 |= TIM_CR1_OPM;				/* counter stops counting at the next update event (clearing the bit CEN) */
   TIM4->CR2 |= TIM_CR2_MMS_0;				/* COUNTER_ENABLE signal to TIM1, used as trigger output (TRGO) */
   TIM4->DIER |= TIM_DIER_UIE;				/* interrupt enable */

   /* start counter */
   NVIC_EnableIRQ(TIM4_IRQn);
   TIM1->CR1 |= TIM_CR1_CEN;
   TIM4->CR1 |= TIM_CR1_CEN;
}

Изменено пользователем IgorKossak
[codebox] для длинного кода. [code]-для короткого!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На APB1 максимальная частота 36 МГц

APB1 peripheral clocks = 36MHz

APB1 timer clocks = 72MHz

Изменено пользователем -AZ-

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может, я что-то не понимаю, но TIM4 начинает считать с нуля, считает вниз, то есть 0->0xFFFF, потом сразу Update Event, и он выключается. Ну тогда естественно, что TIM1 успеет дёрнуться пару раз и заглохнет. Логично?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может, я что-то не понимаю, но TIM4 начинает считать с нуля, считает вниз, то есть 0->0xFFFF, потом сразу Update Event, и он выключается. Ну тогда естественно, что TIM1 успеет дёрнуться пару раз и заглохнет. Логично?

Не, при счете вниз, он считает от значения регистра ARR т.е. (10000-1) до 0

TIM4 четко через 1 сек. падает в прерывание

Изменено пользователем -AZ-

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может быть, в порядке удара в бубен сделать им при инициализации Update? TIMn->EGR |= TIM_EGR_UG

Попробовал добавил строки, после инициализации PSC и ARR обоих таймеров:

 

TIMn->EGR = TIM_EGR_UG;

TIMn->SR = 0;

 

Значение в TIM1->CNT изменилось с 2 на 1, больше ничего ...(

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то не вижу выбора бита в SMCR для TIM1:

Bit 7 MSM: Master/slave mode

0: No action

1: The effect of an event on the trigger input (TRGI) is delayed to allow a perfect

synchronization between the current timer and its slaves (through TRGO). It is useful if we

want to synchronize several timers on a single external event.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...