Evgeniy1294 (27.07.2017 07:55 - 08:02, просмотров: 230) ответил IBAH на STM32, Таймер2 в режиме обработки энкодера. Какое событие генерируется по изменения состояния счетчика? по приходу фронта от энкодера? перерыл весь рефернс, моего знания аглицкого не хватает...
Делаю сейчас девайс на stm32, работающий одновременно с 3-мя энкодерами. Все прекрасно работает. При использовании энкодеров нужно учесть, что на один отсчет энкодера счетчик считает 4 импульса: А(2 фронта)+В(2 фронта). Т.е. если у энкодера 50к отсчетов на оборот, счетчик насчитает 200к.
При переполнении таймера в режиме энкодера срабатывает стандартное прерывание. Также в регистрах таймера есть флаг направления TIM_CR1_DIR, благодаря которому можно подсчитывать значения больше 65535 (таймер 16-бит).
Пример (мне не хватило разрешения 16-бит, поэтому я использую доп. переменную, инкремент и декремент которой выполняю через функции upCount и downCount):
extern "C" void TIM1_UP_TIM10_IRQHandler(void)
{
// Прерывание по переполнению таймера
if (TIM1->SR & TIM_SR_UIF)
{
TIM1->SR &= ~TIM_SR_UIF;
// Обработка показаний энкодера
if (TIM1->CR1 & TIM_CR1_DIR)
{ // Значение <0
enc->downCount();
}
else
{
// Значение >65535
enc->upCount();
}
}
return;
}