Народ, тут решаю задачку. Требуется, чтобы 3-4 таймера (ну для специфики пусть это будут TIM2, TIM3, TIM4, TIM15) в STM32F100RB генерили ШИМ на выходах только когда, например, установлен определенный бит. Для примера - модуляция сигнала другим сигналом в дешевеньком ПИК-е (
http://dccharacter.blogspot.com/2012...-sir-slow.html, смотрите осциллограммы ближе к концу поста).
Что попробовал - связку двух таймеров, один работает гейтом, т.е. генерит высокий уровень в течение заданного промежутка времени, второй слейв - генерит PWM, когда мастер-таймер активен. Проблема в том, что в этом режиме у таймеров нет дефолтного состояния выхода, т.е. они когда попадают вне гейта, просто перестают тикать, сохраняя свое состояние. Это приводит к тому, что уровень на выходе слейва непредсказуем после выхода из гейта, может быть как высоким так и низким.
Идеи, которые есть - использовать break function (т.е. тормоз). Но тормоза есть только для таймеров, предназначенных для работы с моторами, т.е. TIM1, TIM15. Для TIM2-5 брейков нет.
Ну и самая поганая идея - делать форс-лоу режим. Т.е. ноги притянуты к земле. Когда надо генерить ПВМ, запускаем мастер-таймер как тайм-бейс с прерыванием по переполнению, и снимаем форс-режим с ног - там начинается свистопляска. После отсчета периода срабатывает прерывание и мы снова форсим ноги лоу. Но это мне не очень нравится, так как теряется возможность точное количество ШИМ-периодов отсчитать - там будет +- один период, а нужно точно контролировать количество ШИМ-всплесков.
Какие еще идеи будут? Неужели самый дешевый на рынке ПИК в этой задаче обставит STM32?