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

Подсчитать импульсы

Добрый день. Процессор stm32f042, хотя думаю что это не принципиально.
Мне надо подсчитать импульсы таймером.
Так как разведена плата, попадает на 3 канал (PB0 [TIM3_CH3])
Пытаюсь настроить согласно даташиту:
1. Включаю тактирование таймера
2. TIM3->CCMR2 = TIM_CCMR2_CC3S_0; // Включаю 3 канал
3. TIM3->CCER = TIM_CCER_CC3P; // По заднему фронту
4. TIM3->SMCR = TIM_SMCR_SMS | TIM_SMCR_TS_1 | TIM_SMCR_TS_0; // Перевести в режим Ext Mode 1
5. TIM3->DIER = TIM_DIER_UIE; // // Включить прерывание по переполнению
Ну и когда идёт счёт
TIM3->CR1 = TIM_CR1_CEN; // Включить таймер

Ноги настроены правильно...
Счёт не идёт.

По схеме таймера в даташите особо непонятно, хотя описано, что в этом Ext Mode 1, вроде как можно. С другой стороны есть разночтение там пишется TI а не CH. И не совсем понятно, допускается ли подключение 3 канала.

Кто делал? Что не так?

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


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

1 hour ago, SapegoAL said:

5. TIM3->DIER = TIM_DIER_UIE; // // Включить прерывание по переполнению

Что не так сейчас и не вспомню, считал я внешнюю частоту, все работало. Вечером посмотрю, может найду код настройки, если раньше не решится.

Но вод по пункту 5 есть вопрос. В кубеиде (или атоллик) включить прерывания вот так мало, надо еще написать: NVIC_EnableIRQ(TIM16_IRQn); Без этого не работает, во всяком случае у меня и при работе с регистрами. Хотя, может просто не указали этот момент.

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

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


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

Вот здесь у меня STM32F072 считает импульсы от вентилятора первым каналом таймера 3. Так настраиваю:

RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;	
TIM3->SMCR = TIM_SMCR_TS_2 | TIM_SMCR_TS_0 | TIM_SMCR_SMS; // TS=101, SMS=111 - external trigger on input1					TIM3->CCMR1 = TIM_CCMR1_CC1S_0; // CC1 is input mapped on channel TI1
TIM3->CR1 = TIM_CR1_CE

Так считаю:

void sys_tick_handler(void){
  static uint32_t actr = 0;
  ++Tms;
  if(++actr == 1000){ // RPM counter
    Coolerspeed[0] = TIM3->CNT/2;
    TIM3->CNT = 0;
    actr = 0;
  }	
}
Изменено пользователем Eddy_Em
борьба с ветряными мельницами

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


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

2 часа назад, SapegoAL сказал:

Так как разведена плата, попадает на 3 канал

Описание там, конечно, для сильных духом. Но если внимательно посмотреть на картинку 128 (TI2 external clock connection example) или на описание битов SMS - видно, что на входной мультиплексор поступают сигналы TI1F (выход модуля совпадения канала 1), TI2F (выход модуля совпадения канала 2), TRGI (выход внутреннего триггера), ETRF (выход внешнего триггера, есть только у таймера 2 - TIM2_CH1_ETR), CK_INT (такты системной шины). На вход мультиплексора внутреннего триггера поступают сигналы ITRx (выходы других таймеров), TI1_ED (хз, но канал 1), TI1FP (вход канала 1) TI2FP (вход канала 2), ETRF. как видно, вход канала 3 сюла не заведен. Вывод - считать импульсы с канала 3 не получится. Единственный шанс - если эта же нога также заведена на один из счетных входов таймеров 1, 2, 15 или 14 - тогда один из этих таймеров можно использовать как предделитель и таймером3 считать импульсы с соответствующего входа ITRx, но это не ваш случай - на PB0 выведен только выход TIM1_CH2N. Так что увы - или менять разводку, или настраивать канал 3 на захват и считать прерывания захвата на каждый импульс (но тогда проще считать прерывания EXTI и не мучать таймер).

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


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

Вот картинка. Жаль, конечно, что ST так сделали, что считать внешние импульсы или обрабатывать энкодер можно лишь на каналах 1 и 2… А еще всякие TIM14 и т.д. не умеют считать! В вышеприведенной железяке сам на это напоролся, разведя плату так, чтобы частоту вращения второго кулера считать первым каналом TIM14, пришлось делать это на EXTI.

2020.11.12_13:49:36.png

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

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


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

Всем спасибо за участие. Если честно я так и думал. На картинке видно, что не заведено, но всё таки надеялся... ))
Рядом свободная нога, думал соплю кину, так там TIM14_CH1... ))
Придётся проводничёк кидать на PA8. Там TIM1.ch1.
Может и EXTI можно попробовать, но проц слабенький, скорее всего не буду экспериментировать.

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


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

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

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

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

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

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

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

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

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

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