Files
STM32_General/Inc/general_encoder.h
T
Razvalyaev d6cc99a25b Добавлены GPIO-энкодеры
Encoder_Init привязывает порты и пины A/B. Encoder_Update самостоятельно читает GPIO, обрабатывает направление и дребезг и возвращает готовые шаги. Число переходов на детент задаётся при инициализации, экземпляры независимы.

Добавлены только general_encoder.h и general_encoder.c в стиле существующих модулей. Готовые файлы, документация и структура библиотеки сохранены.
2026-10-09 02:32:31 +03:00

40 lines
1.8 KiB
C

/**
**************************************************************************
* @file general_encoder.h
* @brief Заголовочный файл для работы с квадратурными энкодерами через GPIO.
**************************************************************************
* @defgroup GENERAL_ENCODER Encoder Tools
* @ingroup STM32_GENERAL
* @brief Опрос GPIO и обработка шагов механического энкодера.
* @details
Порты и пины задаются при инициализации. Обработчик самостоятельно читает
фазы A/B, учитывает направление, дребезг и число переходов на детент.
*************************************************************************/
#ifndef __ENCODER_GENERAL_H_
#define __ENCODER_GENERAL_H_
#include "mylibs_config.h"
/** Структура энкодера; каждый экземпляр имеет собственное состояние. */
typedef struct
{
GPIO_TypeDef *port_a;
GPIO_TypeDef *port_b;
uint16_t pin_a;
uint16_t pin_b;
uint8_t state;
uint8_t steps_per_detent;
int8_t partial_steps;
uint32_t invalid_transitions;
} Encoder_HandleTypeDef;
/** Привязать настроенные GPIO A/B; steps_per_detent — от 1 до 4. */
HAL_StatusTypeDef Encoder_Init(Encoder_HandleTypeDef *encoder,
GPIO_TypeDef *port_a, uint16_t pin_a,
GPIO_TypeDef *port_b, uint16_t pin_b,
unsigned steps_per_detent);
/** Самостоятельно опросить GPIO, обработать фазы и вернуть -1, 0 или +1 детент. */
int Encoder_Update(Encoder_HandleTypeDef *encoder);
#endif