vsky писал(а):А если допустить возможность использования пары...тройки внешних логических вентилей?
про минимум таймеров речи не было...

Вот скажите... зачем что-то навешивать... привычка??? Или обязательно "должно быть много деталей"???
Это же STM32!!! "Это же бубле-гум!!!" (С)
Включите воображение...
"Всё гениальное - просто!"(С)
"Просто добавь воды!" (С)
Есть ещё вариант... основывается на том, что TIM2->ARR изначально задать по максимуму, запустить таймер, а по истечению 1сек. скорректировать TIM2->ARR "на лету" для завершения Gate... считать значение и т. д. ...
Слегка подумав... модифицируем его...
Воркароунд...Вариант 1PWM mode/One-pulse mode (Gate)Заносим в TIM2->ARR значение по максимуму...
Slave timer in Gated mode (у меня были TIM3 и TIM15 соединённые цепочкой и управляемые TIM2)
Здесь и производим подсчёт ref импульсов...
Возьмём ещё один таймер (TIM1), настроим как One-pulse mode на 0,5сек. и привяжем его к TIM2...
Запускаем TIM2, по прерыванию TIM1 (через 0,5сек.) считываем значение TIM2->CNT, умножаем на 2 (один сдвиг влево)
и заносим в TIM2->ARR (на лету)...
По окончанию Gate считаем по формуле и выводим... Всё!!!
Итого: один 32-бит таймер и
три 16-бит таймера... никаких дополнительных внешних элементов и соединений...
Вариант 2PWM mode/One-pulse mode (Gate)Заносим в TIM2->ARR значение по максимуму...
Slave timer in Gated mode (у меня были TIM3 и TIM15 соединённые цепочкой и управляемые TIM2)
Здесь и производим подсчёт ref импульсов...
Запускаем TIM2...
Внимание!!! Просто делаем задержку на 0,5сек.
(можно даже программную!!!)...
считываем значение TIM2->CNT, умножаем на 2 (один сдвиг влево) и заносим в TIM2->ARR (на лету)...
По окончанию Gate считаем по формуле и выводим... Всё!!!
Итого: один 32-бит таймер и
два 16-бит таймера... никаких дополнительных внешних элементов и соединений...
Оба варианта проверены и работают чудесно!!!
