Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 Timer Gate mode
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
-AZ-
Добрый день, перед написанием темы перепробовал, как мне кажется, все варианты, подскажите может кто то наступал на это ...
Код ниже, TIM4 master выдает на TRGO - 1 при CNT ENABLE, TIM1 в это время должен считать, но не считает и все тут, в прерывании TIM4 смотрю TIM1 CNT а там 2, не пойму где затык ...(

CODE
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;
}
HardEgor
Какой конкретно SMT32?
-AZ-
Цитата(HardEgor @ Apr 19 2018, 07:11) *
Какой конкретно SMT32?

STM32F103VCT6
ViKo
TIM1->ARR?
-AZ-
Цитата(ViKo @ Apr 19 2018, 08:09) *
TIM1->ARR?

По default = 0xFFFF
mcheb
На APB1 максимальная частота 36 МГц
-AZ-
Цитата(mcheb @ Apr 19 2018, 08:36) *
На APB1 максимальная частота 36 МГц

APB1 peripheral clocks = 36MHz
APB1 timer clocks = 72MHz
scifi
Может, я что-то не понимаю, но TIM4 начинает считать с нуля, считает вниз, то есть 0->0xFFFF, потом сразу Update Event, и он выключается. Ну тогда естественно, что TIM1 успеет дёрнуться пару раз и заглохнет. Логично?
-AZ-
Цитата(scifi @ Apr 19 2018, 09:05) *
Может, я что-то не понимаю, но TIM4 начинает считать с нуля, считает вниз, то есть 0->0xFFFF, потом сразу Update Event, и он выключается. Ну тогда естественно, что TIM1 успеет дёрнуться пару раз и заглохнет. Логично?

Не, при счете вниз, он считает от значения регистра ARR т.е. (10000-1) до 0
TIM4 четко через 1 сек. падает в прерывание
scifi
Может быть, в порядке удара в бубен сделать им при инициализации Update? TIMn->EGR |= TIM_EGR_UG
-AZ-
Цитата(scifi @ Apr 19 2018, 09:57) *
Может быть, в порядке удара в бубен сделать им при инициализации Update? TIMn->EGR |= TIM_EGR_UG

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

TIMn->EGR = TIM_EGR_UG;
TIMn->SR = 0;

Значение в TIM1->CNT изменилось с 2 на 1, больше ничего ...(
HardEgor
Что-то не вижу выбора бита в 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.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.