#include "linkBlink.h" /* Локальная копия конфигурации */ static LED_BlinkRx_Config_t led_cfg; /* Внутренние переменные состояния */ static uint32_t last_tick = 0; // Время последнего переключения static uint8_t toggle_counter = 0; // Счётчик переключений static uint8_t blinking = 0; // Флаг активного мигания /** * @brief Инициализация структуры */ void LED_BlinkRx_Init(LED_BlinkRx_Config_t *cfg) { led_cfg = *cfg; } /** * @brief Запуск мигания при приёме данных */ void LED_BlinkRx_OnRx(void) { blinking = 1; toggle_counter = 0; last_tick = HAL_GetTick(); } /** * @brief Функция должна вызываться регулярно (в while(1)) */ void LED_BlinkRx_Process(void) { if (!blinking) return; /* Проверка истечения периода */ if (HAL_GetTick() - last_tick >= led_cfg.blink_period) { last_tick = HAL_GetTick(); /* Переключаем состояние пина */ HAL_GPIO_TogglePin(led_cfg.port, led_cfg.pin); toggle_counter++; /* Каждое мигание = 2 переключения (вкл + выкл) */ if (toggle_counter >= led_cfg.blink_count * 2) { HAL_GPIO_WritePin(led_cfg.port, led_cfg.pin, GPIO_PIN_SET); blinking = 0; } } }