#ifndef LED_BLINKER_RS485_H #define LED_BLINKER_RS485_H #include "stm32f1xx_hal.h" // Измените под свой конкретный микроконтроллер #include #include typedef struct { GPIO_TypeDef* led_port; // Порт светодиода uint16_t led_pin; // Пин светодиода GPIO_TypeDef* de_re_port; // Порт управления RS485 (NULL если не используется) uint16_t de_re_pin; // Пин управления RS485 TIM_HandleTypeDef* htim; // Таймер для отсчета времени uint32_t blink_duration; // Длительность мигания в мс uint32_t last_blink_tick; // Время последнего мигания (в тиках) bool led_state; // Текущее состояние светодиода bool blinking; // Флаг мигания uint8_t blink_count; // Счетчик миганий uint8_t target_blink_count; // Целевое количество миганий uint32_t last_packet_tick; // Время последнего пакета } LedBlinker_HandleTypeDef; /** * Инициализация структуры мигалки * @param hblinker - указатель на структуру * @param led_port - порт светодиода * @param led_pin - пин светодиода * @param de_re_port - порт управления RS485 (NULL если не используется) * @param de_re_pin - пин управления RS485 * @param htim - таймер для временных отсчетов * @return HAL_OK или HAL_ERROR */ HAL_StatusTypeDef LedBlinker_Init(LedBlinker_HandleTypeDef* hblinker, GPIO_TypeDef* led_port, uint16_t led_pin, GPIO_TypeDef* de_re_port, uint16_t de_re_pin, TIM_HandleTypeDef* htim); /** * Обработчик мигания (вызывать в основном цикле) * @param hblinker - указатель на структуру */ void LedBlinker_Update(LedBlinker_HandleTypeDef* hblinker); /** * Обработка полученного пакета * @param hblinker - указатель на структуру * @param data - указатель на данные * @param len - длина данных */ void LedBlinker_ProcessPacket(LedBlinker_HandleTypeDef* hblinker, uint8_t* data, uint16_t len); /** * Простое мигание при получении пакета * @param hblinker - указатель на структуру * @param duration - длительность мигания в мс */ void LedBlinker_BlinkOnce(LedBlinker_HandleTypeDef* hblinker, uint32_t duration); /** * Мигание с определенным паттерном * @param hblinker - указатель на структуру * @param count - количество миганий * @param duration - длительность одного мигания в мс */ void LedBlinker_BlinkPattern(LedBlinker_HandleTypeDef* hblinker, uint8_t count, uint32_t duration); /** * Установка режима RS485 * @param hblinker - указатель на структуру * @param transmit - true для передачи, false для приема */ void LedBlinker_SetRS485Mode(LedBlinker_HandleTypeDef* hblinker, bool transmit); /** * Проверка, мигает ли сейчас светодиод * @param hblinker - указатель на структуру * @return true если мигает */ bool LedBlinker_IsBlinking(LedBlinker_HandleTypeDef* hblinker); /** * Получение времени с последнего пакета * @param hblinker - указатель на структуру * @return время в мс с последнего пакета */ uint32_t LedBlinker_GetTimeSinceLastPacket(LedBlinker_HandleTypeDef* hblinker); #endif // LED_BLINKER_RS485_H