Конечно пошустрее. Мало того, для этих целей можно задействовать один из продвинутых таймеров. Таймер привязанный к нужной ноге в момент импульса будет записывать в регистр текущее значение таймера. Далее, в прерывании(или в цикле) можем сравнивать с предыдущим значением таймера, и вычислять период. С помощью делителя можем заставить тикать таймер практически с любой частотой. К примеру загружаем в пределитель значение 72, получаем получаем 1.000.000 отсчетов в сек. Записываем 36000 получаем 2000 отсчетов за 1 сек.
Подобным образом можно определять значение шима, практически не нагружая проц.
Если пойти дальше, то к таймеру, можно прикрутить DMA. Тогда модуль ДМА сам(без участия процессора), по событию будет инкриментированно складывать значения таймера прямо в память(как в массив, т.е. каждое значение в следующую ячейку массива). Таким образом мы еще больше высвобождаем ресурсы процессора.
Так же ДМА можно запустить по циклу размером к примеру 16. Тогда в массиве у вас всегда будет лежать последние 16 значений периодов тактов. Тогда простым усреднением всех значений массива, мы можем получать усредненное значение оборотов(периода м/у тактами).
подобным образом можно считывать инкриментный энкодер или датчик холла. Не нагружая процессор.
Вот пример на вскидку практически под ваши потребности
http://robocraft.ru/blog/ARM/739.html
Единственное, данный пример использует SPL бибилиотеку. А она мне не нравится(много ошибок, и генерить много байтов в прошике). Нужно переписать инициализацию на CMSIS cинтаксис. По сути прямая инициализация через регистры.
Вообще, с STM32 потихоньку начинаешь отвыкать от праграммирвоания в режиме простого ногодрыга, на максимальное использование всех встроенных модулей микроконтроллера. Таймеры у STM32 простоуникум, можно запрограммировать таймер на режим полумостового PUSH-PULL c заданным Dead-Time чтобы исключить сквозного пробоя ключей.
Cамая моя любимая реализация максимального задействования всех прелестей ARM, это Индикация сегментнтного дисплея с использованием только таймеров и ДМА.
http://kazus.ru/forums/showpost.php?...95&postcount=8
Но высший пилотаж это подключение HD44780 с использованием 2х каскадированных таймеров и одного канала ДМА!
Процессор занят только тем что заполняет массив информацией которая должна попасть на экран. Все остальное делает железо, не нагружая сам процессор.
http://kazus.ru/forums/showthread.ph...545#post713545
в них кстати используется CMSIS cинтаксис при инициализации.
Тут небольшое обсуждение
http://www.microchip.su/showthread.php?t=16822